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