RFR: 8270056: Generated lambda class can not access protected static method of target class [v2]

Mandy Chung mchung at openjdk.java.net
Fri Jul 9 17:30:52 UTC 2021


On Fri, 9 Jul 2021 02:28:46 GMT, Yi Yang <yyang at openjdk.org> wrote:

>> Generated lambda class can not access protected static method of the target class. The following exception is thrown when executing the attached reproducible program:
>> 
>> 
>> Exception in thread "main" java.lang.IllegalAccessError: class AccessProtectedStaticMethodFromSuper$B$$Lambda$15/0x0000000800b8ea48 tried to access protected method 'void AccessProtectedStaticMethodFromSuper$A.func()' (AccessProtectedStaticMethodFromSuper$B$$Lambda$15/0x0000000800b8ea48 is in unnamed module of loader AccessProtectedStaticMethodFromSuper$1Loader @71dac704; AccessProtectedStaticMethodFromSuper$A is in unnamed module of loader AccessProtectedStaticMethodFromSuper$1Loader @39ed3c8d)
>> 	at AccessProtectedStaticMethodFromSuper.main(AccessProtectedStaticMethodFromSuper.java:51)
>> 
>> 
>> This issue is similar to JDK-8254975(#767) with slight differences: generated lambda proxy calls static protected method rather than protected member method.
>> 
>> The proposed fix 1) tries to use MethodHandle instead of invoking forwardee directly(since the lambda class has no access to the resolved method) and 2) does not force accepting an implClass as the first argument when invoking a static method.
>> 
>> Testing:
>> - test/jdk/java/ with release mode
>> - presubmit tests
>
> Yi Yang has updated the pull request incrementally with one additional commit since the last revision:
> 
>   rename SuperMethodTest -> ProtectedMethodInOtherPackage; add test case within it;

The class name needs to be renamed as well.  Also the classname in the `@run` command.

test/jdk/java/lang/invoke/lambda/superProtectedMethod/ProtectedMethodInOtherPackage.java line 105:

> 103: 
> 104:     @Test
> 105:     public static void splitPackage1() throws Throwable {

perhaps the method name can be `protectedStaticMethodInSplitPackage`

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

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


More information about the core-libs-dev mailing list