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

Reply via email to