untie static methods in interface hierarchy (IDEA-118577)

This commit is contained in:
Anna Kozlova
2013-12-23 16:15:14 +04:00
parent 3d7a8fb300
commit 6565df2bab
3 changed files with 15 additions and 1 deletions

View File

@@ -273,7 +273,12 @@ public class PsiSuperMethodImplUtil {
if (superClass != null) {
if (superClass.isInterface() ||
CommonClassNames.JAVA_LANG_OBJECT.equals(superClass.getQualifiedName())) {
if (superMethod.hasModifierProperty(PsiModifier.DEFAULT) || hierarchicalMethodSignature.getMethod().hasModifierProperty(PsiModifier.DEFAULT)) {
if (superMethod.hasModifierProperty(PsiModifier.STATIC) ||
hierarchicalMethodSignature.getMethod().hasModifierProperty(PsiModifier.STATIC)) {
return false;
}
if (superMethod.hasModifierProperty(PsiModifier.DEFAULT) ||
hierarchicalMethodSignature.getMethod().hasModifierProperty(PsiModifier.DEFAULT)) {
return !InheritanceUtil.isInheritorOrSelf(superClass, containingClass, true);
}
return true;

View File

@@ -0,0 +1,8 @@
interface A
{
static void foo(){}
}
interface B extends A
{
static int foo(){ return 1; }
}

View File

@@ -32,6 +32,7 @@ public class Interface8MethodsHighlightingTest extends LightDaemonAnalyzerTestCa
public void testThisAccessibility() { doTest(false, false); }
public void testStaticMethodCalls() { doTest(false, false); }
public void testDefaultMethodOverrideEquivalentObject() { doTest(false, false); }
public void testStaticMethods() { doTest(false, false); }
public void testDefaultSupersInStaticContext() {
doTest(false, false);
}