diff --git a/java/java-impl/src/com/intellij/usages/impl/rules/JavaUsageTypeProvider.java b/java/java-impl/src/com/intellij/usages/impl/rules/JavaUsageTypeProvider.java index ec2335f2fa91..2aee0622f459 100644 --- a/java/java-impl/src/com/intellij/usages/impl/rules/JavaUsageTypeProvider.java +++ b/java/java-impl/src/com/intellij/usages/impl/rules/JavaUsageTypeProvider.java @@ -219,8 +219,11 @@ public class JavaUsageTypeProvider implements UsageTypeProviderEx { final PsiNewExpression psiNewExpression = PsiTreeUtil.getParentOfType(element, PsiNewExpression.class); if (psiNewExpression != null) { - final PsiJavaCodeReferenceElement classReference = psiNewExpression.getClassReference(); + final PsiJavaCodeReferenceElement classReference = psiNewExpression.getClassOrAnonymousClassReference(); if (classReference != null && PsiTreeUtil.isAncestor(classReference, element, false)) { + if (isAnonymousClassOf(psiNewExpression.getAnonymousClass(), targets)) { + return UsageType.CLASS_ANONYMOUS_NEW_OPERATOR; + } if (isInnerClassOf(classReference, targets)) { return UsageType.CLASS_INNER_NEW_OPERATOR; } @@ -234,20 +237,29 @@ public class JavaUsageTypeProvider implements UsageTypeProviderEx { return null; } - private static boolean isInnerClassOf(PsiJavaCodeReferenceElement classReference, @Nullable UsageTarget[] targets) { - if (targets == null) { + private static boolean isAnonymousClassOf(@Nullable PsiAnonymousClass anonymousClass, @NotNull UsageTarget[] targets) { + if (anonymousClass == null) { return false; } - PsiElement qualifier = classReference.getQualifier(); + + return qualifiesToTargetClasses(anonymousClass.getBaseClassReference(), targets); + } + + private static boolean isInnerClassOf(PsiJavaCodeReferenceElement classReference, @NotNull UsageTarget[] targets) { + final PsiElement qualifier = classReference.getQualifier(); if (qualifier instanceof PsiJavaCodeReferenceElement) { - for (UsageTarget target : targets) { - if (target instanceof PsiElementUsageTarget) { - PsiElement element = ((PsiElementUsageTarget)target).getElement(); - if (element instanceof PsiClass) { - String name = target.getName(); - if (Comparing.equal(((PsiJavaCodeReferenceElement)qualifier).getReferenceName(), name)) { - return true; - } + return qualifiesToTargetClasses((PsiJavaCodeReferenceElement)qualifier, targets); + } + return false; + } + + private static boolean qualifiesToTargetClasses(@NotNull PsiJavaCodeReferenceElement qualifier, @NotNull UsageTarget[] targets) { + for (UsageTarget target : targets) { + if (target instanceof PsiElementUsageTarget) { + PsiElement element = ((PsiElementUsageTarget)target).getElement(); + if (element instanceof PsiClass) { + if (Comparing.equal(qualifier.getReferenceName(), target.getName())) { + return true; } } } diff --git a/platform/platform-resources-en/src/messages/UsageView.properties b/platform/platform-resources-en/src/messages/UsageView.properties index 3ed9c19827bd..a8333adb3c88 100644 --- a/platform/platform-resources-en/src/messages/UsageView.properties +++ b/platform/platform-resources-en/src/messages/UsageView.properties @@ -53,6 +53,7 @@ usage.target.package.in.directory={0} (in {1}) usage.target.exception=Exception usage.type.new=New instance creation usage.type.new.inner=New inner class instance creation +usage.type.new.anonymous=New anonymous inheritor creation usage.type.new.array=New array creation usage.type.annotation=Annotation usage.type.type.parameter=Type parameter