java 8: forbid super in static methods

This commit is contained in:
anna
2013-11-05 12:23:19 +01:00
parent dda9d7dbb1
commit ae7e30edee
3 changed files with 17 additions and 1 deletions

View File

@@ -1462,7 +1462,7 @@ public class HighlightUtil extends HighlightUtilBase {
final PsiType superType = expr.getType();
if (!(superType instanceof PsiClassType)) return false;
final PsiClass superClass = ((PsiClassType)superType).resolve();
return superClass != null && aClass.equals(superClass);
return superClass != null && aClass.equals(superClass) && PsiUtil.getEnclosingStaticElement(expr, PsiTreeUtil.getParentOfType(expr, PsiClass.class)) == null;
}
@NotNull

View File

@@ -0,0 +1,13 @@
interface Super
{
default void method()
{
System.out.println("Super.method()");
}
}
interface Sub extends Super {
static void foo() {
<error descr="'Super' is not an enclosing class">Super.super</error>.method();
}
}

View File

@@ -32,6 +32,9 @@ 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 testDefaultSupersInStaticContext() {
doTest(false, false);
}
private void doTest() {
doTest(false, false);