> 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: mistake ------------- Changes: - all: https://git.openjdk.java.net/jdk/pull/4714/files - new: https://git.openjdk.java.net/jdk/pull/4714/files/8aa4e1d7..1d4ad2ca Webrevs: - full: https://webrevs.openjdk.java.net/?repo=jdk&pr=4714&range=02 - incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=4714&range=01-02 Stats: 3 lines in 1 file changed: 0 ins; 0 del; 3 mod Patch: https://git.openjdk.java.net/jdk/pull/4714.diff Fetch: git fetch https://git.openjdk.java.net/jdk pull/4714/head:pull/4714 PR: https://git.openjdk.java.net/jdk/pull/4714