This PR adds a new JDK tool, called `jnativescan`, that can be used to find 
code that accesses native functionality. Currently this includes `native` 
method declarations, and methods marked with `@Restricted`.

The tool accepts a list of class path and module path entries through 
`--class-path` and `--module-path`, and a set of root modules through 
`--add-modules`, as well as an optional target release with `--release`.

The default mode is for the tool to report all uses of `@Restricted` methods, 
and `native` method declaration in a tree-like structure:


app.jar (ALL-UNNAMED):
  main.Main:
    main.Main::main(String[])void references restricted methods:
      java.lang.foreign.MemorySegment::reinterpret(long)MemorySegment
    main.Main::m()void is a native method declaration


The `--print-native-access` option can be used print out all the module names 
of modules doing native access in a comma separated list. For class path code, 
this will print out `ALL-UNNAMED`.

Testing: 
- `langtools_jnativescan` tests.
- Running the tool over jextract's libclang bindings, which use the FFM API, 
and thus has a lot of references to `@Restricted` methods.
- tier 1-3

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

Commit messages:
 - Merge branch 'master' into jnativescan
 - use URI-based constructor of Path
 - add jnativescan to help flag test
 - add --print-native-access test
 - correct one more comment
 - correct comment
 - add missing newlinw
 - add more testing + cleanup code
 - add test for references through subclasses
 - add test for array method refs
 - ... and 5 more: https://git.openjdk.org/jdk/compare/50bed6c6...9e8dad03

Changes: https://git.openjdk.org/jdk/pull/19774/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=19774&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8317611
  Stats: 1769 lines in 34 files changed: 1760 ins; 0 del; 9 mod
  Patch: https://git.openjdk.org/jdk/pull/19774.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/19774/head:pull/19774

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

Reply via email to