On Mon, 7 Apr 2025 16:36:07 GMT, Jorn Vernee <jver...@openjdk.org> wrote:
> `jnativescan` uses the `ClassResolver` class to find both system classes, as > well as application classes. In principle, a class resolver supports both > iterating over all classes from that particular source, as well as looking up > classes by name. However, the `ClassResolver` for system classes doesn't > support iterating, and the lookup functionality for `ClassResolvers` from > other sources is never used (only iterating). > > This patch proposes to split the iterating functionality out of > `ClassResolver`. Clients that were using this functionality will switch to > using the iteration functionality that is available on `ClassFileSource` > directly (whose classes were previously being wrapped in a `ClassResolver`). > As a result of this latter change, we can now also let `NativeMethodFinder` > operate on individual classes. We just iterate over all the class file > sources in `JNativeScanTask`, and feed individual class models to > `NativeMethodFinder`. I think this is a good conceptual simplification of > `NativeMethodFinder`, > > Since `ClassResolver` is now only used for system classes, I've removed it, > leaving only its single implementation: `SystemClassResolver`. > > Testing: running `langtools_jnativescan` test suite. src/jdk.jdeps/share/classes/com/sun/tools/jnativescan/ClassFileSource.java line 86: > 84: > 85: record ClassPathJar(Path path, Runtime.Version version) implements > ClassFileSource { > 86: @Override The runtime version was only being used by `ClassPathJar::classFiles`, so I've made it a property of `ClassPathjar` instead of a parameter to that method, which is not used by the other implementations. src/jdk.jdeps/share/classes/com/sun/tools/jnativescan/NativeMethodFinder.java line 70: > 68: } > 69: > 70: private SortedSet<MethodRef> > findRestrictedMethodInvocations(MethodModel methodModel) { Created this helper method to reduce the overall nesting of the `find` method. src/jdk.jdeps/share/classes/com/sun/tools/jnativescan/SystemClassResolver.java line 41: > 39: import java.util.*; > 40: > 41: class SystemClassResolver implements AutoCloseable { Code in this class is unchanged from the old implementation in `ClassFileResolver`, except that the class was moved to the top level, and some code moved around within the class to match existing style. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/24493#discussion_r2031619068 PR Review Comment: https://git.openjdk.org/jdk/pull/24493#discussion_r2031620942 PR Review Comment: https://git.openjdk.org/jdk/pull/24493#discussion_r2031623738