RFR: 8353840: jnativescan should not throw error for missing system classes

Danish Nawab duke at openjdk.org
Tue Apr 8 08:26:23 UTC 2025


## 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 to `NativeMethodFinder` which can log the error to it, but continue with the analysis

### Alternatives considered

- Instead of propagating `err` downstream, adapt the outer try-catch in `com.sun.tools.jnativescan.Main#run`.
    - Con: This would require complicated error recovery synchronization between Main and `JNativeScanTask` to resume the scanning after the exception 
- Instead of adapting the catch block in `com.sun.tools.jnativescan.NativeMethodFinder#findAll`, don't even surface the exception from `com.sun.tools.jnativescan.ClassResolver.SystemModuleClassResolver#lookup` rather log it right in `ClassResolver`
    - Con: We don't have access to `MethodRef`/`MethodModel` in ClassResolver#lookup which will make the error message less detailed/useful

### stdout 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).

-------------

Commit messages:
 - 8353840: jnativescan should not throw error for missing system classes

Changes: https://git.openjdk.org/jdk/pull/24499/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=24499&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8353840
  Stats: 17 lines in 4 files changed: 6 ins; 1 del; 10 mod
  Patch: https://git.openjdk.org/jdk/pull/24499.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/24499/head:pull/24499

PR: https://git.openjdk.org/jdk/pull/24499


More information about the compiler-dev mailing list