RFR: 8284942: Proxy building can just iterate superinterfaces once [v5]
Mandy Chung
mchung at openjdk.java.net
Thu May 26 21:38:46 UTC 2022
On Thu, 26 May 2022 20:53:29 GMT, liach <duke at 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
More information about the core-libs-dev
mailing list