1 /*
2  * @test /nodynamiccopyright/
3  * @bug 8034223
4  * @summary Most-specific testing with inference variables in function parameter types
5  * @compile/fail/ref=MostSpecific12.out -XDrawDiagnostics MostSpecific12.java
6  */
7 class MostSpecific12 {
8 
take(T arg1, String arg2)9     interface I<T> { void take(T arg1, String arg2); }
take(String arg1, T arg2)10     interface J<T> { void take(String arg1, T arg2); }
take(String arg1, String arg2)11     interface K { void take(String arg1, String arg2); }
12 
m1(I<T> arg)13     <T> void m1(I<T> arg) {}
m1(K arg)14     void m1(K arg) {}
15 
m2(J<T> arg)16     <T> void m2(J<T> arg) {}
m2(K arg)17     <T> void m2(K arg) {}
18 
m3(I<T> arg)19     <T> void m3(I<T> arg) {}
m3(J<T> arg)20     <T> void m3(J<T> arg) {}
21 
test()22     void test() {
23         m1((String s1, String s2) -> {}); // ok
24         m2((String s1, String s2) -> {}); // ok
25         m3((String s1, String s2) -> {}); // error
26 
27         m1(this::referencedMethod); // ok
28         m2(this::referencedMethod); // ok
29         m3(this::referencedMethod); // error
30 
31         m1(String::compareTo); // ok
32         m2(String::compareTo); // ok
33         m3(String::compareTo); // error
34     }
35 
referencedMethod(String s1, String s2)36     void referencedMethod(String s1, String s2) {}
37 
38 }
39