diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrThisReferenceExpressionImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrThisReferenceExpressionImpl.java index 7ad5f9e8ede0..a1913dc59ddc 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrThisReferenceExpressionImpl.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrThisReferenceExpressionImpl.java @@ -85,12 +85,24 @@ public class GrThisReferenceExpressionImpl extends GrThisSuperReferenceExpressio } private PsiType createType(PsiClass context) { - PsiElementFactory elementFactory = JavaPsiFacade.getInstance(getProject()).getElementFactory(); - if (PsiUtil.isInStaticContext(this)) { - return elementFactory.createTypeFromText(CommonClassNames.JAVA_LANG_CLASS + "<" + context.getName() + ">", this); - //in case of anonymous class this code don't matter because anonymous classes can't have static methods + final JavaPsiFacade facade = JavaPsiFacade.getInstance(context.getProject()); + PsiElementFactory elementFactory = facade.getElementFactory(); + + if (!PsiUtil.isInStaticContext(this)) return elementFactory.createType(context); + + //create instance of java.lang.Class + if (context instanceof PsiAnonymousClass) { + final PsiClassType type = ((PsiAnonymousClass)context).getBaseClassType(); + final PsiClass aClass = + facade.findClass(CommonClassNames.JAVA_LANG_CLASS, context.getResolveScope()); + if (aClass != null) { + return elementFactory.createType(aClass, type); + } + else { + return elementFactory.createTypeFromText(CommonClassNames.JAVA_LANG_CLASS + "<" + type.getCanonicalText() + ">", this); + } } - return elementFactory.createType(context); + return elementFactory.createTypeFromText(CommonClassNames.JAVA_LANG_CLASS + "<" + context.getName() + ">", this); } @NotNull diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.groovy index 76ade3fc24a0..3b76f85a3299 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.groovy @@ -538,4 +538,21 @@ class Bar {{ void testOctalInspection() { doTest(new GroovyOctalIntegerInspection()) } + + void testThisInStaticMethodOfAnonymousClass() { + myFixture.configureByText('a.groovy', '''\ +class A { + static abc + def foo() { + new Runnable() { + static void run() { + print this.@abc + } + }.run() + } +}''') + + myFixture.enableInspections(GroovyAssignabilityCheckInspection) + myFixture.checkHighlighting(true, false, false); + } } \ No newline at end of file