|
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 { |
|
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 } |