RFR: 8270056: Generated lambda class can not access protected static method of target class
Yi Yang
yyang at openjdk.java.net
Thu Jul 8 02:42:15 UTC 2021
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
More information about the core-libs-dev
mailing list