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