diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java index a3afb162b8fd..f4cee56e70cf 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java @@ -1307,16 +1307,19 @@ public class HighlightUtil extends HighlightUtilBase { return HighlightClassUtil.reportIllegalEnclosingUsage(expr, null, aClass, expr); } - if (expr instanceof PsiThisExpression && PsiTreeUtil.getParentOfType(expr, PsiMethod.class) == null) { - if (aClass.isInterface()) { - return thisNotFoundInInterfaceInfo(expr); - } - - if (aClass instanceof PsiAnonymousClass && PsiTreeUtil.isAncestor(((PsiAnonymousClass)aClass).getArgumentList(), expr, true)) { - final PsiClass parentClass = PsiTreeUtil.getParentOfType(aClass, PsiClass.class, true); - if (parentClass != null && parentClass.isInterface()) { + if (expr instanceof PsiThisExpression) { + final PsiMethod psiMethod = PsiTreeUtil.getParentOfType(expr, PsiMethod.class); + if (psiMethod == null || psiMethod.getContainingClass() != aClass) { + if (aClass.isInterface()) { return thisNotFoundInInterfaceInfo(expr); } + + if (aClass instanceof PsiAnonymousClass && PsiTreeUtil.isAncestor(((PsiAnonymousClass)aClass).getArgumentList(), expr, true)) { + final PsiClass parentClass = PsiTreeUtil.getParentOfType(aClass, PsiClass.class, true); + if (parentClass != null && parentClass.isInterface()) { + return thisNotFoundInInterfaceInfo(expr); + } + } } } return null; diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ThisInInterface.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ThisInInterface.java index e32d0da7501c..4f1b9b37218e 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ThisInInterface.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/ThisInInterface.java @@ -5,4 +5,20 @@ class C implements A { interface A { A a = new C(this); A a1 = new C(this){}; + + class B { + A foo() { + return A.this; + } + + B foo1() { + return B.this; + } + + class D { + B f() { + return B.this; + } + } + } } \ No newline at end of file