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
1 /*
2 * @test /nodynamiccopyright/
3 * @summary smoke test for inference of throws type variables
4 * @compile/fail/ref=TargetType63.out -XDrawDiagnostics TargetType63.java
5 */
6 class TargetType63 {
8 interface F<T extends Throwable> {
9 void m() throws T;
10 }
12 void g1() { }
13 void g2() throws ClassNotFoundException { }
14 void g3() throws Exception { }
16 <Z extends Throwable> void m1(F<Z> fz) throws Z { }
17 <Z extends ClassNotFoundException> void m2(F<Z> fz) throws Z { }
19 void test1() {
20 m1(()->{ }); //ok (Z = RuntimeException)
21 m1(this::g1); //ok (Z = RuntimeException)
22 }
24 void test2() {
25 m2(()->{ }); //fail (Z = ClassNotFoundException)
26 m2(this::g1); //fail (Z = ClassNotFoundException)
27 }
29 void test3() {
30 m1(()->{ throw new ClassNotFoundException(); }); //fail (Z = ClassNotFoundException)
31 m1(this::g2); //fail (Z = ClassNotFoundException)
32 m2(()->{ throw new ClassNotFoundException(); }); //fail (Z = ClassNotFoundException)
33 m2(this::g2); //fail (Z = ClassNotFoundException)
34 }
36 void test4() {
37 m1(()->{ throw new Exception(); }); //fail (Z = Exception)
38 m1(this::g3); //fail (Z = Exception)
39 }
40 }