mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-08-26 03:13:40 +07:00
method reference: additional diagnostics for invalid method references (IDEA-149688)
This commit is contained in:
+15
@@ -0,0 +1,15 @@
|
||||
class A {
|
||||
static class B<T> {
|
||||
int foo(T x) {return 0;}
|
||||
}
|
||||
public static void main(String[] args) {
|
||||
B<? extends CharSequence> q = new B<>();
|
||||
|
||||
Func x = q::<error descr="Invalid method reference: CharSequence cannot be converted to capture of ? extends CharSequence">foo</error>;
|
||||
x.invoke("");
|
||||
}
|
||||
|
||||
interface Func {
|
||||
int invoke(CharSequence x);
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -7,7 +7,7 @@ interface B<BT> {
|
||||
|
||||
class Test {
|
||||
public static void test() {
|
||||
method1(Test::<error descr="Cannot resolve method 'method2'">method2</error>);
|
||||
method1(Test::<error descr="Invalid method reference: A<capture of ? super M> cannot be converted to A<? super String>">method2</error>);
|
||||
}
|
||||
|
||||
static <M> void method1(B<A<? super M>> arg) { }
|
||||
|
||||
+6
-6
@@ -29,14 +29,14 @@ class Test {
|
||||
static void meth4(I3 s) { }
|
||||
|
||||
static {
|
||||
meth1(Foo::<error descr="Cannot resolve constructor 'Foo'">new</error>);
|
||||
meth1(Foo::<error descr="Invalid constructor reference: String cannot be converted to X">new</error>);
|
||||
meth2(Foo::new);
|
||||
meth3(Foo::<error descr="Cannot resolve constructor 'Foo'">new</error>);
|
||||
meth3(Foo::<error descr="Invalid constructor reference: Object cannot be converted to X">new</error>);
|
||||
meth4<error descr="Ambiguous method call: both 'Test.meth4(I1)' and 'Test.meth4(I2)' match">(Foo::new)</error>;
|
||||
|
||||
meth1(Test::<error descr="Cannot resolve method 'foo'">foo</error>);
|
||||
meth1(Test::<error descr="Invalid method reference: String cannot be converted to X">foo</error>);
|
||||
meth2(Test::foo);
|
||||
meth3(Test::<error descr="Cannot resolve method 'foo'">foo</error>);
|
||||
meth3(Test::<error descr="Invalid method reference: Object cannot be converted to X">foo</error>);
|
||||
meth4<error descr="Ambiguous method call: both 'Test.meth4(I1)' and 'Test.meth4(I2)' match">(Test::foo)</error>;
|
||||
}
|
||||
|
||||
@@ -55,8 +55,8 @@ class Test {
|
||||
}
|
||||
|
||||
void test() {
|
||||
II1 i1 = this::<error descr="Cannot resolve method 'fooInstance'">fooInstance</error>;
|
||||
II1 i1 = this::<error descr="Invalid method reference: X cannot be converted to X">fooInstance</error>;
|
||||
II2 i2 = this::fooInstance;
|
||||
II3 i3 = this::<error descr="Cannot resolve method 'fooInstance'">fooInstance</error>;
|
||||
II3 i3 = this::<error descr="Invalid method reference: X cannot be converted to X">fooInstance</error>;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@ abstract class Test {
|
||||
|
||||
{
|
||||
I i = Test::<String>foo;
|
||||
I i1 = Test::<Integer><error descr="Cannot resolve method 'foo'">foo</error>;
|
||||
I i1 = Test::<Integer><error descr="Invalid method reference: String cannot be converted to Integer">foo</error>;
|
||||
I i2 = Test::foo;
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user