diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java
index 43b1406122d4..5d633783a1d9 100644
--- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java
+++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java
@@ -1126,13 +1126,17 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh
if (resolved instanceof PsiVariable) {
PsiVariable variable = (PsiVariable)resolved;
- PsiElement containingClass = PsiTreeUtil.getNonStrictParentOfType(ref, PsiClass.class, PsiLambdaExpression.class);
- if ((containingClass instanceof PsiAnonymousClass || containingClass instanceof PsiLambdaExpression) &&
- !PsiTreeUtil.isAncestor(containingClass, variable, false) &&
- !(variable instanceof PsiField) &&
- (containingClass instanceof PsiLambdaExpression ||
- !PsiTreeUtil.isAncestor(((PsiAnonymousClass)containingClass).getArgumentList(), ref, false))) {
- myHolder.add(HighlightInfo.newHighlightInfo(JavaHighlightInfoTypes.IMPLICIT_ANONYMOUS_CLASS_PARAMETER).range(ref).create());
+ if (!(variable instanceof PsiField)) {
+ PsiElement containingClass = PsiTreeUtil.getNonStrictParentOfType(ref, PsiClass.class, PsiLambdaExpression.class);
+ while ((containingClass instanceof PsiAnonymousClass || containingClass instanceof PsiLambdaExpression) &&
+ !PsiTreeUtil.isAncestor(containingClass, variable, false)) {
+ if (containingClass instanceof PsiLambdaExpression ||
+ !PsiTreeUtil.isAncestor(((PsiAnonymousClass)containingClass).getArgumentList(), ref, false)) {
+ myHolder.add(HighlightInfo.newHighlightInfo(JavaHighlightInfoTypes.IMPLICIT_ANONYMOUS_CLASS_PARAMETER).range(ref).create());
+ break;
+ }
+ containingClass = PsiTreeUtil.getParentOfType(containingClass, PsiClass.class, PsiLambdaExpression.class);
+ }
}
if (variable instanceof PsiParameter && ref instanceof PsiExpression && PsiUtil.isAccessedForWriting((PsiExpression)ref)) {
diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/JavaSymbolHighlightingTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/JavaSymbolHighlightingTest.java
index f05b3049b81a..b3165fa2f2c1 100644
--- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/JavaSymbolHighlightingTest.java
+++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/JavaSymbolHighlightingTest.java
@@ -23,11 +23,13 @@ public class JavaSymbolHighlightingTest extends LightDaemonAnalyzerTestCase {
public void testImplicitAnonymousClassParameterHighlighting_InsideLambda() {
configureFromFileText("Test.java",
- "class T {\n" +
+ "class T {" +
+ " private T(int i){}\n" +
" public void test() {\n" +
" int xxx = 12;\n" +
" Runnable r = () -> {\n" +
" check(xxx);\n" +
+ " new T(xxx){};" +
" };" +
" }\n" +
" public void check(int a) {}\n" +