From 1d6b44a098e2e745f1f27743e4fc26f522ef287f Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Mon, 28 Oct 2019 08:02:48 +0100 Subject: [PATCH] override gutter icons: remove duplicates GitOrigin-RevId: 7f4f8f9cbcb646b16a4bd1329cb2e6db495d6b0b --- .../codeInsight/daemon/impl/MarkerType.java | 55 ++++++++++--------- 1 file changed, 29 insertions(+), 26 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/MarkerType.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/MarkerType.java index 5dcda32de07f..e1fea1f04b47 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/MarkerType.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/MarkerType.java @@ -15,6 +15,7 @@ import com.intellij.openapi.application.ReadAction; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.project.DumbService; +import com.intellij.openapi.project.Project; import com.intellij.psi.*; import com.intellij.psi.impl.FindSuperElementsHelper; import com.intellij.psi.search.GlobalSearchScope; @@ -353,11 +354,32 @@ public class MarkerType { PsiElementListNavigator.openTargets(e, inheritors.toArray(NavigatablePsiElement.EMPTY_NAVIGATABLE_ELEMENT_ARRAY), subclassUpdater.getCaption(inheritors.size()), CodeInsightBundle.message("goto.implementation.findUsages.title", aClass.getName()), renderer, subclassUpdater); } - private static class SubclassUpdater extends BackgroundUpdaterTask { + private static abstract class OverridingMembersUpdater extends BackgroundUpdaterTask { + private OverridingMembersUpdater(@Nullable Project project, + @NotNull String title, + @NotNull PsiElementListCellRenderer renderer) { + super(project, title, createComparatorWrapper((Comparator)renderer.getComparator())); + } + + protected void collectFunctionalInheritors(@NotNull ProgressIndicator indicator, PsiClass psiClass) { + FunctionalExpressionSearch.search(psiClass).forEach(new CommonProcessors.CollectProcessor() { + @Override + public boolean process(final PsiFunctionalExpression expr) { + if (!updateComponent(expr)) { + indicator.cancel(); + } + ProgressManager.checkCanceled(); + return super.process(expr); + } + }); + } + } + + private static class SubclassUpdater extends OverridingMembersUpdater { private final PsiClass myClass; private SubclassUpdater(@NotNull PsiClass aClass, @NotNull PsiElementListCellRenderer renderer) { - super(aClass.getProject(), SEARCHING_FOR_OVERRIDDEN_METHODS, createComparatorWrapper((Comparator)renderer.getComparator())); + super(aClass.getProject(), SEARCHING_FOR_OVERRIDDEN_METHODS, renderer); myClass = aClass; } @@ -393,24 +415,15 @@ public class MarkerType { } }); - FunctionalExpressionSearch.search(myClass).forEach(new CommonProcessors.CollectProcessor() { - @Override - public boolean process(final PsiFunctionalExpression expr) { - if (!updateComponent(expr)) { - indicator.cancel(); - } - ProgressManager.checkCanceled(); - return super.process(expr); - } - }); + collectFunctionalInheritors(indicator, myClass); } } - private static class OverridingMethodsUpdater extends BackgroundUpdaterTask { + private static class OverridingMethodsUpdater extends OverridingMembersUpdater { private final PsiMethod myMethod; - private OverridingMethodsUpdater(@NotNull PsiMethod method, @NotNull PsiElementListCellRenderer renderer) { - super(method.getProject(), SEARCHING_FOR_OVERRIDING_METHODS, createComparatorWrapper(renderer.getComparator())); + private OverridingMethodsUpdater(@NotNull PsiMethod method, @NotNull PsiElementListCellRenderer renderer) { + super(method.getProject(), SEARCHING_FOR_OVERRIDING_METHODS, renderer); myMethod = method; } @@ -447,17 +460,7 @@ public class MarkerType { } }); if (ReadAction.compute(() -> myMethod.hasModifierProperty(PsiModifier.ABSTRACT))) { - PsiClass psiClass = ReadAction.compute(myMethod::getContainingClass); - FunctionalExpressionSearch.search(psiClass).forEach(new CommonProcessors.CollectProcessor() { - @Override - public boolean process(final PsiFunctionalExpression expr) { - if (!updateComponent(expr)) { - indicator.cancel(); - } - ProgressManager.checkCanceled(); - return super.process(expr); - } - }); + collectFunctionalInheritors(indicator, ReadAction.compute(myMethod::getContainingClass)); } } }