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

Reply via email to