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