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 forwarded 
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.

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

Commit messages:
 - proposed fix

Changes: https://git.openjdk.java.net/jdk/pull/4714/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=4714&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8270056
  Stats: 102 lines in 2 files changed: 100 ins; 0 del; 2 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

Reply via email to