default methods: check for super class is now needed (IDEA-122720)

This commit is contained in:
Anna Kozlova
2014-03-26 12:12:46 +01:00
parent 2dd7e9258e
commit 72203e26ef
4 changed files with 24 additions and 2 deletions

View File

@@ -101,7 +101,7 @@ public final class PsiUtil extends PsiUtilCore {
@NotNull
public static JavaResolveResult getAccessObjectClass(@NotNull PsiExpression expression) {
if (expression instanceof PsiSuperExpression) return JavaResolveResult.EMPTY;
if (expression instanceof PsiSuperExpression && !isLanguageLevel8OrHigher(expression)) return JavaResolveResult.EMPTY;
PsiType type = expression.getType();
if (type instanceof PsiClassType) {
return ((PsiClassType)type).resolveGenerics();

View File

@@ -439,7 +439,7 @@ public class PsiScopesUtil {
}
else if (resolve instanceof PsiClass) {
PsiExpression qualifier = methodCall.getMethodExpression().getQualifierExpression();
if (!(qualifier instanceof PsiSuperExpression)) {
if (!(qualifier instanceof PsiSuperExpression) || PsiUtil.isLanguageLevel8OrHigher(methodCall)) {
processor.setAccessClass((PsiClass)PsiUtil.getAccessObjectClass(qualifier).getElement());
}
}

View File

@@ -0,0 +1,21 @@
interface I {
default void f() {}
}
class P {
public void f() {}
}
class AP extends P implements I {
@Override
public void f() {
I.super.f();
}
}
class AC implements Cloneable {
public Object clone() throws CloneNotSupportedException {
return Cloneable.super.<error descr="'clone()' has protected access in 'java.lang.Object'">clone</error>();
}
}

View File

@@ -34,6 +34,7 @@ public class Interface8MethodsHighlightingTest extends LightDaemonAnalyzerTestCa
public void testDefaultMethodOverrideEquivalentObject() { doTest(false, false); }
public void testStaticMethods() { doTest(false, false); }
public void testFinalStaticDefaultMethods() { doTest(false, false); }
public void testIDEA122720() { doTest(false, false); }
public void testDefaultSupersInStaticContext() {
doTest(false, false);
}