test/tools/javac/lambda/MostSpecific12.java

Tue, 29 Mar 2016 10:48:49 +0000

author
dbuck
date
Tue, 29 Mar 2016 10:48:49 +0000
changeset 3102
e74dd6df4d4c
parent 0
959103a6100f
permissions
-rw-r--r--

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

aoqi@0 1 /*
aoqi@0 2 * @test /nodynamiccopyright/
aoqi@0 3 * @bug 8034223
aoqi@0 4 * @summary Most-specific testing with inference variables in function parameter types
aoqi@0 5 * @compile/fail/ref=MostSpecific12.out -XDrawDiagnostics MostSpecific12.java
aoqi@0 6 */
aoqi@0 7 class MostSpecific12 {
aoqi@0 8
aoqi@0 9 interface I<T> { void take(T arg1, String arg2); }
aoqi@0 10 interface J<T> { void take(String arg1, T arg2); }
aoqi@0 11 interface K { void take(String arg1, String arg2); }
aoqi@0 12
aoqi@0 13 <T> void m1(I<T> arg) {}
aoqi@0 14 void m1(K arg) {}
aoqi@0 15
aoqi@0 16 <T> void m2(J<T> arg) {}
aoqi@0 17 <T> void m2(K arg) {}
aoqi@0 18
aoqi@0 19 <T> void m3(I<T> arg) {}
aoqi@0 20 <T> void m3(J<T> arg) {}
aoqi@0 21
aoqi@0 22 void test() {
aoqi@0 23 m1((String s1, String s2) -> {}); // ok
aoqi@0 24 m2((String s1, String s2) -> {}); // ok
aoqi@0 25 m3((String s1, String s2) -> {}); // error
aoqi@0 26
aoqi@0 27 m1(this::referencedMethod); // ok
aoqi@0 28 m2(this::referencedMethod); // ok
aoqi@0 29 m3(this::referencedMethod); // error
aoqi@0 30
aoqi@0 31 m1(String::compareTo); // ok
aoqi@0 32 m2(String::compareTo); // ok
aoqi@0 33 m3(String::compareTo); // error
aoqi@0 34 }
aoqi@0 35
aoqi@0 36 void referencedMethod(String s1, String s2) {}
aoqi@0 37
aoqi@0 38 }

mercurial