mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-08 15:09:39 +07:00
overload resolution: accept unqualified calls of static interface methods (IDEA-180236)
This commit is contained in:
@@ -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());
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
interface Test {
|
||||
|
||||
final class Inner {
|
||||
|
||||
void func() {
|
||||
of("");
|
||||
of();
|
||||
of("", "");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void of(String... lists) { }
|
||||
|
||||
}
|
||||
@@ -262,6 +262,8 @@ public class OverloadResolutionTest extends LightDaemonAnalyzerTestCase {
|
||||
|
||||
public void testAdaptReturnTypesOfSiblingMethods() { doTest(false);}
|
||||
|
||||
public void testUnqualifiedStaticInterfaceMethodCallsOnInnerClasses() { doTest(false);}
|
||||
|
||||
private void doTest() {
|
||||
doTest(true);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user