diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/JavaResolveUtil.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/JavaResolveUtil.java index 9fc420fd261b..981739b7d815 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/JavaResolveUtil.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/JavaResolveUtil.java @@ -128,6 +128,12 @@ public class JavaResolveUtil { PsiClass topMemberClass = getTopLevelClass(memberClass, accessObjectClass); PsiClass topAccessClass = getTopLevelClass(accessObjectClass, memberClass); if (!manager.areElementsEquivalent(topMemberClass, topAccessClass)) return false; + if (accessObjectClass instanceof PsiAnonymousClass && accessObjectClass.isInheritor(memberClass, true)) { + if (place instanceof PsiMethodCallExpression && + ((PsiMethodCallExpression)place).getMethodExpression().getQualifierExpression() instanceof PsiThisExpression) { + return false; + } + } } if (fileResolveScope == null) { @@ -183,7 +189,7 @@ public class JavaResolveUtil { PsiClass lastClass = null; Boolean isAtLeast17 = null; for (PsiElement placeParent = place; placeParent != null; placeParent = placeParent.getContext()) { - if (placeParent instanceof PsiClass) { + if (placeParent instanceof PsiClass && !(placeParent instanceof PsiAnonymousClass)) { final boolean isTypeParameter = placeParent instanceof PsiTypeParameter; if (isTypeParameter && isAtLeast17 == null) { isAtLeast17 = JavaVersionService.getInstance().isAtLeast(place, JavaSdkVersion.JDK_1_7); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/IDEA78916.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/IDEA78916.java index 214a3aec4bd6..fa1ed556fe86 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/IDEA78916.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/IDEA78916.java @@ -35,4 +35,14 @@ abstract class EnumPrivateMethodTest2 { public abstract void execute(); private void firstMethod() {} +} + +class Test { + private class Foo { + private Foo() {} + + { + new Foo(){}; + } + } } \ No newline at end of file