langtools/test/tools/javac/lambda/TargetType63.java
changeset 18909 8f9fc5d876e4
equal deleted inserted replaced
18908:f76cab33bee3 18909:8f9fc5d876e4
       
     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 }