mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-21 05:51:25 +07:00
overload resolution: resolve conflicts with static methods in super interfaces
This commit is contained in:
@@ -299,10 +299,12 @@ public class JavaMethodsConflictResolver implements PsiConflictResolver{
|
||||
final PsiClass containingClass = method.getContainingClass();
|
||||
if (containingClass != null && containingClass.isInterface()) {
|
||||
if (qualifierClass == null) {
|
||||
qualifierClass = getQualifiedClass();
|
||||
qualifierClass = getQualifiedClass(method);
|
||||
if (qualifierClass == null) return;
|
||||
}
|
||||
if (!containingClass.getManager().areElementsEquivalent(containingClass, qualifierClass)) {
|
||||
|
||||
if (!containingClass.getManager().areElementsEquivalent(containingClass, qualifierClass) &&
|
||||
!PsiTreeUtil.isAncestor(containingClass, qualifierClass, false)) {
|
||||
iterator.remove();
|
||||
}
|
||||
}
|
||||
@@ -310,7 +312,7 @@ public class JavaMethodsConflictResolver implements PsiConflictResolver{
|
||||
}
|
||||
}
|
||||
|
||||
private PsiClass getQualifiedClass() {
|
||||
private PsiClass getQualifiedClass(PsiMethod method) {
|
||||
final PsiElement parent = myArgumentsList.getParent();
|
||||
if (parent instanceof PsiMethodCallExpression) {
|
||||
final PsiExpression expression = ((PsiMethodCallExpression)parent).getMethodExpression().getQualifierExpression();
|
||||
@@ -320,6 +322,9 @@ 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,11 @@
|
||||
interface A {
|
||||
static void m() {}
|
||||
}
|
||||
|
||||
interface B extends A {
|
||||
static void m() {}
|
||||
|
||||
default void f() {
|
||||
m();
|
||||
}
|
||||
}
|
||||
@@ -264,6 +264,8 @@ public class OverloadResolutionTest extends LightDaemonAnalyzerTestCase {
|
||||
|
||||
public void testUnqualifiedStaticInterfaceMethodCallsOnInnerClasses() { doTest(false);}
|
||||
|
||||
public void testStaticMethodInSuperInterfaceConflictWithCurrentStatic() { doTest(false);}
|
||||
|
||||
private void doTest() {
|
||||
doTest(true);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user