On Fri, 9 Jul 2021 02:28:46 GMT, Yi Yang <[email protected]> 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