method refs: static testdata, apply qualifier substitutor

This commit is contained in:
anna
2012-09-27 19:25:40 +02:00
parent b130fcba63
commit ac4a96fc03
5 changed files with 47 additions and 1 deletions

View File

@@ -256,8 +256,10 @@ public class PsiMethodReferenceExpressionImpl extends PsiReferenceExpressionBase
if (!(conflict instanceof MethodCandidateInfo)) continue;
final PsiMethod psiMethod = ((MethodCandidateInfo)conflict).getElement();
if (psiMethod == null) continue;
PsiSubstitutor subst = PsiSubstitutor.EMPTY;
subst = subst.putAll(mySubstitutor);
if (!LambdaUtil.areAcceptable(mySignature,
psiMethod.getSignature(conflict.getSubstitutor()), myContainingClass, mySubstitutor)) {
psiMethod.getSignature(subst.putAll(conflict.getSubstitutor())), myContainingClass, mySubstitutor)) {
iterator.remove();
}
}

View File

@@ -19,3 +19,18 @@ class MyTest {
new B().m(10);
}
}
class MyTest1 {
interface I {
void m();
}
void call(I s) {}
I i = <error descr="Cannot resolve symbol 'NonExistentType'">NonExistentType</error>::m;
{
call(<error descr="Cannot resolve symbol 'NonExistentType'">NonExistentType</error>::m);
}
}

View File

@@ -1,3 +1,5 @@
import java.util.*;
class MyTest {
interface I {
String m(Foo<String> f);
@@ -28,3 +30,9 @@ class MyTest1 {
}
}
}
class MyTest2 {
public static void main(String[] args) {
Arrays.sort(new String[0], String.CASE_INSENSITIVE_ORDER::compare);
}
}

View File

@@ -0,0 +1,17 @@
class MyTest {
interface I {
String m(Foo f);
}
static class Foo<X> {
String foo() { return null; }
Foo<X> getFoo() { return this; }
static void test() {
I i1 = Foo.<error descr="Non-static method 'getFoo()' cannot be referenced from a static context">getFoo</error>()::foo;
I i2 = <error descr="'MyTest.Foo.this' cannot be referenced from a static context">this</error>::foo;
I i3 = Foo :: foo;
}
}
}

View File

@@ -45,6 +45,10 @@ public class MethodRefHighlightingTest extends LightDaemonAnalyzerTestCase {
doTest();
}
public void testStaticProblems() throws Exception {
doTest();
}
private void doTest() throws Exception {
doTest(BASE_PATH + "/" + getTestName(false) + ".java", false, false);
}