blob: 14b9a2baa2b276dc63d21250b2128785c599394b [file] [log] [blame]
import java.util.*;
class MyTest {
static void m(int i) {//here
}
static void m(Integer i) {}
interface I {
void m(int x);
}
static void call(I s) { s.m(42); }
public static void main(String[] args) {
I s = MyTest::m;
s.m(42);
call(MyTest::m);
}
}
class MyTest1 {
static void m(Integer i) { }
interface I1 {
void m(int x);
}
interface I2 {
void m(Integer x);
}
static void call(int i, I1 s) {
}
static void call(int i, I2 s) {
//here
}
public static void main(String[] args) {
call<error descr="Ambiguous method call: both 'MyTest1.call(int, I1)' and 'MyTest1.call(int, I2)' match">(1, MyTest1::m)</error>;
}
}
class MyTest2 {
static void m(Integer i) { }
interface I {
void m(int x);
}
static void call(int i, I s) { }
static void call(Integer i, I s) { }
static void test() {
call(1, MyTest2::m); //call(int i, I s)
}
}
class MyTest3 {
interface I {
void m();
}
MyTest3() {}
static void m() { }
public static void main(String[] args) {
I s = <error descr="Static method referenced through non-static qualifier">new MyTest3()::m</error>;
}
}
class MyTest4 {
interface I {
MyTest4 m(List<Integer> l1, List<Integer> l2);
}
MyTest4 meth(List<Integer>... lli) { return null; }
MyTest4(List<Integer>... lli) { }
I s1 = this::meth;
I s2 = MyTest4::new;
}
class MyTest5 {
interface I_void<X> {
void m();
}
interface I_Void<X> {
void m();
}
static void m_void() {}
static Void _Void() {return null; }
public static void main(String[] args) {
I_void s1 = MyTest5::m_void;
s1.m();
I_Void s2 = MyTest5::m_void;
s2.m();
I_void s3 = MyTest5::_Void;
s3.m();
I_Void s4 = MyTest5::_Void;
s4.m();
}
}
class MyTest6 {
interface I {
MyTest6 invoke();
}
MyTest6() {
}
static MyTest6 m() {
return null;
}
public static void main(String[] args) {
I I1 = ((I)() -> {return null; })::invoke;
I1.invoke();
I I2 = ((I)MyTest6::new)::invoke;
I1.invoke();
I I3 = ((I)MyTest6::m)::invoke;
I1.invoke();
}
}
class MyTest7{
interface I<R> {
R invoke();
}
@interface A { }
static abstract class AC { }
enum E { }
void test() {
I s1 = <error descr="'A' is abstract; cannot be instantiated">A::new</error>;
I s2 = <error descr="'I' is abstract; cannot be instantiated">I::new</error>;
I s3 = <error descr="'AC' is abstract; cannot be instantiated">AC::new</error>;
I s4 = <error descr="Enum types cannot be instantiated">E::new</error>;
}
}
class MyTest8{
static class Sup {}
static class Sub extends Sup {
interface I { Sup m(Sup x, String str); }
class Inner extends Sup {
Inner(String val) { }
}
void test() {
I var = Sub.Inner::<error descr="Cannot resolve constructor 'Inner'">new</error>;;
}
}
}
class MyTest9 {
static class SuperFoo<X> { }
static class Foo<X extends Number> extends SuperFoo<X> { }
interface I1 {
void m();
}
interface I2 {
void m();
}
static <X extends Number> Foo<X> m() { return null; }
static void g1(I1 s) { }
static void g2(I1 s) { }
static void g2(I2 s) { }
void test() {
g1(MyTest9::m);
g2<error descr="Ambiguous method call: both 'MyTest9.g2(I1)' and 'MyTest9.g2(I2)' match">(MyTest9::m)</error>;
}
}