diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightNamesUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightNamesUtil.java index b6b136530032..5e8fb9d20af6 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightNamesUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightNamesUtil.java @@ -62,8 +62,13 @@ public class HighlightNamesUtil { if (!isDeclaration) { if (isCalledOnThis(elementToHighlight)) { - PsiClass enclosingClass = PsiTreeUtil.getParentOfType(elementToHighlight, PsiClass.class); - isInherited = enclosingClass != null && enclosingClass.isInheritor(method.getContainingClass(), true); + final PsiClass containingClass = method.getContainingClass(); + PsiClass enclosingClass = containingClass == null ? null : PsiTreeUtil.getParentOfType(elementToHighlight, PsiClass.class); + while (enclosingClass != null) { + isInherited = enclosingClass.isInheritor(containingClass, true); + if (isInherited) break; + enclosingClass = PsiTreeUtil.getParentOfType(enclosingClass, PsiClass.class, true); + } } } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/NamesHighlighting.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/NamesHighlighting.java index a92aefa049be..e25fa4ac277e 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/NamesHighlighting.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/NamesHighlighting.java @@ -59,4 +59,38 @@ class NoCtrClass { class Generic<TT extends Runnable> { TT field; +} + +class InheritedSymbolNames { + + private static class A { + public String getName() { + return "classA"; + } + } + + private static class B extends A { + { + new java.lang.Runnable() { + public void run() { + getName(); + } + }; + getName(); + } + } + + private static class C extends A { + { + new java.lang.Runnable() { + public void run() { + getName(); + } + }; + getName(); + } + public String getName() { + return "classC"; + } + } } \ No newline at end of file