overload resolution: accept unqualified calls of static interface methods (IDEA-180236)

This commit is contained in:
Anna.Kozlova
2017-10-09 11:43:59 +02:00
parent 60cede53c1
commit 14cb19fa39
3 changed files with 19 additions and 5 deletions

View File

@@ -299,7 +299,7 @@ public class JavaMethodsConflictResolver implements PsiConflictResolver{
final PsiClass containingClass = method.getContainingClass();
if (containingClass != null && containingClass.isInterface()) {
if (qualifierClass == null) {
qualifierClass = getQualifiedClass(method);
qualifierClass = getQualifiedClass();
if (qualifierClass == null) return;
}
if (!containingClass.getManager().areElementsEquivalent(containingClass, qualifierClass)) {
@@ -310,7 +310,7 @@ public class JavaMethodsConflictResolver implements PsiConflictResolver{
}
}
private PsiClass getQualifiedClass(PsiMethod method) {
private PsiClass getQualifiedClass() {
final PsiElement parent = myArgumentsList.getParent();
if (parent instanceof PsiMethodCallExpression) {
final PsiExpression expression = ((PsiMethodCallExpression)parent).getMethodExpression().getQualifierExpression();
@@ -320,9 +320,6 @@ public class JavaMethodsConflictResolver implements PsiConflictResolver{
return (PsiClass)resolve;
}
}
else if (expression == null && !ImportsUtil.hasStaticImportOn(parent, method, true)) {
return PsiTreeUtil.getParentOfType(parent, PsiClass.class);
}
if (expression != null) {
return PsiUtil.resolveClassInType(expression.getType());

View File

@@ -0,0 +1,15 @@
interface Test {
final class Inner {
void func() {
of("");
of();
of("", "");
}
}
static void of(String... lists) { }
}

View File

@@ -262,6 +262,8 @@ public class OverloadResolutionTest extends LightDaemonAnalyzerTestCase {
public void testAdaptReturnTypesOfSiblingMethods() { doTest(false);}
public void testUnqualifiedStaticInterfaceMethodCallsOnInnerClasses() { doTest(false);}
private void doTest() {
doTest(true);
}