On Thu, 26 May 2022 20:53:29 GMT, liach <d...@openjdk.java.net> wrote:
>> Currently, in ProxyBuilder::mapToModule and ProxyBuilder::defineProxyClass, >> the interfaces are iterated twice. The two passes can be merged into one, >> yielding the whole proxy definition context (module, package, whether >> there's package-private interface) when determining the module. >> >> Split from #8278. Helpful for moving proxies to hidden classes, but is a >> good cleanup on its own. > > liach has updated the pull request with a new target base due to a merge or a > rebase. The incremental webrev excludes the unrelated changes brought in by > the merge/rebase. The pull request contains seven additional commits since > the last revision: > > - Group proxy location validation all into the class context constructor > - Merge branch 'master' into fix/proxy-single-pass > - Update > - Updates suggested by mandy > - Merge branch 'master' into fix/proxy-single-pass > - Don't need to complexify module cache > - 8284942: Proxy building can just iterate superinterfaces once src/java.base/share/classes/java/lang/reflect/Proxy.java line 498: > 496: new ClassLoaderValue<>(); > 497: > 498: private record ProxyClassContext(Module module, String pkg, int > accessFlags) { Suggestion: private record ProxyClassContext(Module module, String packageName, int accessFlags) { src/java.base/share/classes/java/lang/reflect/Proxy.java line 499: > 497: > 498: private record ProxyClassContext(Module module, String pkg, int > accessFlags) { > 499: private ProxyClassContext { We should validate the `accessFlags` value as it must be 0 or `PUBLIC`. src/java.base/share/classes/java/lang/reflect/Proxy.java line 513: > 511: > 512: if (!module.isOpen(pkg, Proxy.class.getModule())) { > 513: // Required for default method invocation Is this comment true? The module of the proxy class opens the package to `java.base` if the proxy interface is non-public in a named module or if all proxy interfaces are public but a proxy interface is not unconditionally exported. ------------- PR: https://git.openjdk.java.net/jdk/pull/8281