On Thu, 21 Apr 2022 03:44:18 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 incrementally with one additional commit 
> since the last revision:
> 
>   Don't need to complexify module cache

src/java.base/share/classes/java/lang/reflect/Proxy.java line 498:

> 496:             new ClassLoaderValue<>();
> 497: 
> 498:         private record ProxyContext(Module module, String pkg, boolean 
> packagePrivate) {}

This represents the context for a proxy class.   It seems `ProxyClassContext` 
would be clearer.   I suggest the context to have the accessFlags for a proxy 
class rather than the boolean whether it's package private.   The constructor 
should check that it must be 0 or `Modifier.PUBLIC`.   `FINAL` will be added to 
the access flags when it generates the proxy class.

src/java.base/share/classes/java/lang/reflect/Proxy.java line 766:

> 764:          * Reads edge and qualified exports are added for dynamic module 
> to access.
> 765:          */
> 766:         private static ProxyContext setupContext(ClassLoader loader,

Perhaps name this method `proxyClassContext` that returns `ProxyClassContext`.

src/java.base/share/classes/java/lang/reflect/Proxy.java line 831:

> 829:             // All proxy interfaces are public.  So maps to a dynamic 
> proxy module
> 830:             // and add reads edge and qualified exports, if necessary
> 831:             var context = getDynamicModuleContext(loader, nonExported);

I suggest to keep the `getDynamicModule` method as creating a dynamic module of 
a given class loader is a clear function.   The context can be created in this 
method body.


            var targetModule = getDynamicModule(loader);
            var pkgName = nonExported ? PROXY_PACKAGE_PREFIX + '.' + 
targetModule.getName()
                                      : targetModule.getName();
            var context = new ProxyClassContext(targetModule, pkgName, 
Modifier.PUBLIC);

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

PR: https://git.openjdk.java.net/jdk/pull/8281

Reply via email to