| /* | |
| * @test /nodynamiccopyright/ | |
| * @bug 8008540 8008539 8008538 | |
| * @summary Constructor reference to non-reifiable array should be rejected | |
| * @compile/fail/ref=MethodReference64.out -XDrawDiagnostics MethodReference64.java | |
| */ | |
| class MethodReference64 { | |
| interface ClassFactory { | |
| Object m(); | |
| } | |
| interface ArrayFactory { | |
| Object m(int i); | |
| } | |
| @interface Anno { } | |
| enum E { } | |
| interface I { } | |
| static class Foo<X> { } | |
| void m(ClassFactory cf) { } | |
| void m(ArrayFactory cf) { } | |
| void testAssign() { | |
| ClassFactory c1 = Anno::new; //error | |
| ClassFactory c2 = E::new; //error | |
| ClassFactory c3 = I::new; //error | |
| ClassFactory c4 = Foo<?>::new; //error | |
| ClassFactory c5 = 1::new; //error | |
| ArrayFactory a1 = Foo<?>[]::new; //ok | |
| ArrayFactory a2 = Foo<? extends String>[]::new; //error | |
| } | |
| void testMethod() { | |
| m(Anno::new); //error | |
| m(E::new); //error | |
| m(I::new); //error | |
| m(Foo<?>::new); //error | |
| m(1::new); //error | |
| m(Foo<?>[]::new); //ok - resolves to m(ArrayFactory) | |
| m(Foo<? extends String>[]::new); //error | |
| } | |
| } |