-
Notifications
You must be signed in to change notification settings - Fork 5.8k
8353840: JNativeScan should not abort for missing classes #24499
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
👋 Welcome back danishnawab! A progress list of the required criteria for merging this PR into |
@danishnawab This change now passes all automated pre-integration checks. ℹ️ This project also has non-automated pre-integration requirements. Please see the file CONTRIBUTING.md for details. After integration, the commit message for the final commit will be:
You can use pull request commands such as /summary, /contributor and /issue to adjust it as needed. At the time when this comment was updated there had been 49 new commits pushed to the
As there are no conflicts, your changes will automatically be rebased on top of these commits when integrating. If you prefer to avoid this automatic rebasing, please check the documentation for the /integrate command for further details. As you do not have Committer status in this project an existing Committer must agree to sponsor your change. Possible candidates are the reviewers of this PR (@JornVernee, @liach) but any other Committer may sponsor as well. ➡️ To flag this PR as ready for integration with the above commit message, type |
@danishnawab The following labels will be automatically applied to this pull request:
When this pull request is ready to be reviewed, an "RFR" email will be sent to the corresponding mailing lists. If you would like to change these labels, use the /label pull request command. |
Webrevs
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've updated the issue title to start with a capital letter.
src/jdk.jdeps/share/classes/com/sun/tools/jnativescan/NativeMethodFinder.java
Outdated
Show resolved
Hide resolved
Also, note that there was some other cleanup I wanted to do in this area first: #24493 which will likely result in merge conflicts. |
src/jdk.jdeps/share/classes/com/sun/tools/jnativescan/NativeMethodFinder.java
Outdated
Show resolved
Hide resolved
src/jdk.jdeps/share/classes/com/sun/tools/jnativescan/JNativeScanTask.java
Outdated
Show resolved
Hide resolved
.stderrShouldContain("java.lang.Compiler") | ||
.stderrAsLines(); | ||
|
||
assertEquals(2, stderr.size(), "Unexpected number of lines in stderr"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
To ensure that the two calls to java.lang.Compiler.enable
have been de-duped into one.
@@ -192,4 +201,8 @@ public static String qualName(ClassDesc desc) { | |||
String packagePrefix = desc.packageName().isEmpty() ? "" : desc.packageName() + "."; | |||
return packagePrefix + desc.displayName(); | |||
} | |||
|
|||
interface Diagnostics { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Added as an inner type since there was already precedence for that with com.sun.tools.jnativescan.JNativeScanTask.Action
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Changes look good, thanks!
Please note that we will have to wait 24 hours before integrating, in order to give other reviews time to look as well.
Great, thanks for your review! |
/integrate |
@danishnawab |
Hello @danishnawab, I have updated the issue title to "JNativeScan should not abort for missing classes" to be more accurate for the changes done. Can you update the PR title here too? |
@liach it's done. |
Thanks! /sponsor |
Going to push as commit 5f2a604.
Your commit was automatically rebased without conflicts. |
@liach @danishnawab Pushed as commit 5f2a604. 💡 You may see a message that your pull request was closed with unmerged commits. This can be safely ignored. |
Description
https://bugs.openjdk.org/browse/JDK-8353840
Existing behavior
Log the error message and terminate in case of missing system class
New behavior
Still log the error message about the missing system class, but continue the analysis
Design choices
Propagate
err
all the way toNativeMethodFinder
which can log the error to it, but continue with the analysisAlternatives considered
err
downstream, adapt the outer try-catch incom.sun.tools.jnativescan.Main#run
.JNativeScanTask
to resume the scanning after the exceptioncom.sun.tools.jnativescan.NativeMethodFinder#findAll
, don't even surface the exception fromcom.sun.tools.jnativescan.ClassResolver.SystemModuleClassResolver#lookup
rather log it right inClassResolver
MethodRef
/MethodModel
in ClassResolver#lookup which will make the error message less detailed/usefulstdout vs stderr
One could argue that since this is a non-terminal error, perhaps it should be logged to stdout. However, my thinking was that while it may be non-terminal, it is still an "error", and thus should be logged to stderr. I am happy to revisit this decision, if needed.
Testing
The existing test
TestMissingSystemClass#testSingleJarClassPath
has been adapted to test for successful execution, as well as verify the stdout output.I considered briefly to update the test setup in a way that we see some restricted methods on the stdout instead of just
<no restricted methods>
, but it was unclear if that would really add any additional value since the main purpose of this test is just to ascertain the missing system class (with successful execution from now onward).Progress
Issue
Reviewers
Reviewing
Using
git
Checkout this PR locally:
$ git fetch https://git.openjdk.org/jdk.git pull/24499/head:pull/24499
$ git checkout pull/24499
Update a local copy of the PR:
$ git checkout pull/24499
$ git pull https://git.openjdk.org/jdk.git pull/24499/head
Using Skara CLI tools
Checkout this PR locally:
$ git pr checkout 24499
View PR using the GUI difftool:
$ git pr show -t 24499
Using diff file
Download this PR as a diff file:
https://git.openjdk.org/jdk/pull/24499.diff
Using Webrev
Link to Webrev Comment