test/tools/javac/lambda/MethodReference64.java

Tue, 12 Mar 2013 16:02:43 +0000

author
mcimadamore
date
Tue, 12 Mar 2013 16:02:43 +0000
changeset 1628
5ddecb91d843
parent 0
959103a6100f
permissions
-rw-r--r--

8009545: Graph inference: dependencies between inference variables should be set during incorporation
Summary: Move all transitivity checks into the incorporation round
Reviewed-by: jjg

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 }

mercurial