this and super are not available inside anonymous class args

This commit is contained in:
Anna Kozlova
2016-07-01 12:01:48 +03:00
parent c392ae8910
commit 7896eddc3b
4 changed files with 24 additions and 1 deletions

View File

@@ -1521,6 +1521,9 @@ public class HighlightUtil extends HighlightUtilBase {
}
else {
aClass = PsiTreeUtil.getParentOfType(expr, PsiClass.class);
if (aClass instanceof PsiAnonymousClass && PsiTreeUtil.isAncestor(((PsiAnonymousClass)aClass).getArgumentList(), expr, false)) {
aClass = PsiTreeUtil.getParentOfType(aClass, PsiClass.class, true);
}
}
if (aClass == null) return null;

View File

@@ -4,7 +4,7 @@ class C implements A {
interface A {
A a = new C(<error descr="'A.this' cannot be referenced from a static context">this</error>);
A a1 = new C(<error descr="Cannot find symbol variable this">this</error>){};
A a1 = new C(<error descr="'A.this' cannot be referenced from a static context">this</error>){};
class B {
A foo() {

View File

@@ -0,0 +1,17 @@
class A {
public A(Object o) {
}
}
class B {}
class C extends B {
static {
A a = new A(<error descr="'C.this' cannot be referenced from a static context">this</error>) {};
A a1 = new A(<error descr="'C.super' cannot be referenced from a static context">super</error>.clone()) {};
}
{
A a = new A(this);
}
}

View File

@@ -75,4 +75,7 @@ public class LightAdvHighlightingJdk6Test extends LightDaemonAnalyzerTestCase {
public void testVariableUsedBeforeAssignmentWithParenthesis() {
doTest(false, false);
}
public void testThisInArgListOfAnonymous() {
doTest(false, false);
}
}