On Fri, 9 Jul 2021 02:28:46 GMT, Yi Yang <yy...@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