Wed, 23 Oct 2013 07:50:04 +0200
8026861: Wrong LineNumberTable for variable declarations in lambdas
Summary: Setting or correcting positions for many trees produced by LambdaToMethod.
Reviewed-by: vromero, rfield
aoqi@0 | 1 | /* |
aoqi@0 | 2 | * @test /nodynamiccopyright/ |
aoqi@0 | 3 | * @bug 8008540 8008539 8008538 |
aoqi@0 | 4 | * @summary Constructor reference to non-reifiable array should be rejected |
aoqi@0 | 5 | * @compile/fail/ref=MethodReference64.out -XDrawDiagnostics MethodReference64.java |
aoqi@0 | 6 | */ |
aoqi@0 | 7 | class MethodReference64 { |
aoqi@0 | 8 | interface ClassFactory { |
aoqi@0 | 9 | Object m(); |
aoqi@0 | 10 | } |
aoqi@0 | 11 | |
aoqi@0 | 12 | interface ArrayFactory { |
aoqi@0 | 13 | Object m(int i); |
aoqi@0 | 14 | } |
aoqi@0 | 15 | |
aoqi@0 | 16 | @interface Anno { } |
aoqi@0 | 17 | |
aoqi@0 | 18 | enum E { } |
aoqi@0 | 19 | |
aoqi@0 | 20 | interface I { } |
aoqi@0 | 21 | |
aoqi@0 | 22 | static class Foo<X> { } |
aoqi@0 | 23 | |
aoqi@0 | 24 | void m(ClassFactory cf) { } |
aoqi@0 | 25 | void m(ArrayFactory cf) { } |
aoqi@0 | 26 | |
aoqi@0 | 27 | void testAssign() { |
aoqi@0 | 28 | ClassFactory c1 = Anno::new; //error |
aoqi@0 | 29 | ClassFactory c2 = E::new; //error |
aoqi@0 | 30 | ClassFactory c3 = I::new; //error |
aoqi@0 | 31 | ClassFactory c4 = Foo<?>::new; //error |
aoqi@0 | 32 | ClassFactory c5 = 1::new; //error |
aoqi@0 | 33 | ArrayFactory a1 = Foo<?>[]::new; //ok |
aoqi@0 | 34 | ArrayFactory a2 = Foo<? extends String>[]::new; //error |
aoqi@0 | 35 | } |
aoqi@0 | 36 | |
aoqi@0 | 37 | void testMethod() { |
aoqi@0 | 38 | m(Anno::new); //error |
aoqi@0 | 39 | m(E::new); //error |
aoqi@0 | 40 | m(I::new); //error |
aoqi@0 | 41 | m(Foo<?>::new); //error |
aoqi@0 | 42 | m(1::new); //error |
aoqi@0 | 43 | m(Foo<?>[]::new); //ok - resolves to m(ArrayFactory) |
aoqi@0 | 44 | m(Foo<? extends String>[]::new); //error |
aoqi@0 | 45 | } |
aoqi@0 | 46 | } |