static interface method call: ignore static imports if call is qualified (IDEA-136077)

This commit is contained in:
Anna Kozlova
2015-02-11 12:17:10 +01:00
parent 5da386943e
commit 502dd423d9
3 changed files with 16 additions and 1 deletions

View File

@@ -65,7 +65,10 @@ public class MethodCandidatesProcessor extends MethodsProcessor{
}
private boolean isInterfaceStaticMethodAccessibleThroughInheritance(PsiMethod method) {
if (method.hasModifierProperty(PsiModifier.STATIC) && !(myCurrentFileContext instanceof PsiImportStaticStatement)) {
if (method.hasModifierProperty(PsiModifier.STATIC) &&
!(myCurrentFileContext instanceof PsiImportStaticStatement) &&
myPlace instanceof PsiMethodCallExpression &&
((PsiMethodCallExpression)myPlace).getMethodExpression().getQualifierExpression() == null) {
final PsiClass containingClass = method.getContainingClass();
return containingClass != null && containingClass.isInterface();
}

View File

@@ -0,0 +1,8 @@
import java.util.function.Function;
import static java.util.function.Function.identity;
class FunctionExample {
public static void main(String [] args) throws Exception {
Function f = Function.identity();
}
}

View File

@@ -47,6 +47,10 @@ public class Interface8MethodsHighlightingTest extends LightCodeInsightFixtureTe
doTest(false, false);
}
public void testStaticMethodAccessibleThroughStaticImportButExplicitlyQualified() throws Exception {
doTest(true, false);
}
public void testStaticMethodAccessibleBothThroughStaticImportAndInheritance() throws Exception {
myFixture.addClass("package p; public interface Foo {" +
" static void foo() {}" +