Tue, 29 Mar 2016 10:48:49 +0000
8143647: Javac compiles method reference that allows results in an IllegalAccessError
Summary: Lambda implementation method synthesized by javac should not mention inaccessible types.
Reviewed-by: mcimadamore
vromero@2567 | 1 | /* |
vromero@2567 | 2 | * @test /nodynamiccopyright/ |
vromero@2567 | 3 | * @bug 8033483 |
vromero@2567 | 4 | * @summary Should ignore nested lambda bodies during overload resolution |
vromero@2567 | 5 | * @compile/fail/ref=IgnoreLambdaBodyDuringResolutionTest2.out -XDrawDiagnostics IgnoreLambdaBodyDuringResolutionTest2.java |
vromero@2567 | 6 | */ |
vromero@2567 | 7 | |
vromero@2567 | 8 | class IgnoreLambdaBodyDuringResolutionTest2 { |
vromero@2567 | 9 | interface SAM<S> { |
vromero@2567 | 10 | boolean test(S t); |
vromero@2567 | 11 | } |
vromero@2567 | 12 | |
vromero@2567 | 13 | <I, T extends I> I bar(final T l) { |
vromero@2567 | 14 | return null; |
vromero@2567 | 15 | } |
vromero@2567 | 16 | |
vromero@2567 | 17 | class D<D1, D2> { |
vromero@2567 | 18 | void foo() { |
vromero@2567 | 19 | m(bar(e -> false)); |
vromero@2567 | 20 | } |
vromero@2567 | 21 | |
vromero@2567 | 22 | void m(Class<D1> arg) {} |
vromero@2567 | 23 | void m(SAM<D2> arg) {} |
vromero@2567 | 24 | } |
vromero@2567 | 25 | |
vromero@2567 | 26 | class F { |
vromero@2567 | 27 | void foo() { |
vromero@2567 | 28 | m(bar((String e) -> false)); |
vromero@2567 | 29 | } |
vromero@2567 | 30 | |
vromero@2567 | 31 | <F1> void m(Class<F1> arg) {} |
vromero@2567 | 32 | <F2> void m(SAM<F2> arg) {} |
vromero@2567 | 33 | } |
vromero@2567 | 34 | } |