[groovy] IDEA-224641 Wrong resolve of 'this' and 'super' in anonymous classes definition

GitOrigin-RevId: f1818e1bee67c70d89a7dd1d937a31781d808052
This commit is contained in:
alexey.afanasiev
2019-11-07 02:40:58 +00:00
committed by intellij-monorepo-bot
parent 3ef63950ef
commit b175ba126e
2 changed files with 35 additions and 1 deletions
@@ -443,8 +443,15 @@ public class PsiUtil {
}
@Nullable
public static PsiClass getContextClass(@Nullable PsiElement context) {
public static PsiClass getContextClass(@Nullable PsiElement element) {
PsiElement context = element;
while (context != null) {
if (context instanceof GrAnonymousClassDefinition
&& PsiTreeUtil.isAncestor(((GrAnonymousClassDefinition)context).getArgumentListGroovy(), element, false)) {
context = context.getContext();
continue;
}
if (context instanceof PsiClass && !isInDummyFile(context)) {
return (PsiClass)context;
}
@@ -36,4 +36,31 @@ class B {}
expressionTypeTest 'new A()++', 'A'
expressionTypeTest '++new A()', 'B'
}
@Test
void 'this inside anonymous definition'() {
typingTest '''
class Test {
void main2() {
new A(th<caret>is){}
}
}
class A{}
''', "Test"
}
@Test
void 'super inside anonymous definition'() {
typingTest '''
class Test extends C {
void main2() {
new A(su<caret>per.equals("")){}
}
}
class C {}
class B {}
class A extends B {}
''', "C"
}
}