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 640fafc0f609..c2817d2f8672 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 @@ -245,7 +245,7 @@ public class MarkerType { } @Override - public void run(@NotNull ProgressIndicator indicator) { + public void run(@NotNull final ProgressIndicator indicator) { super.run(indicator); ClassInheritorsSearch.search(myClass, ApplicationManager.getApplication().runReadAction(new Computable() { @Override @@ -255,7 +255,10 @@ public class MarkerType { }), true).forEach(new CommonProcessors.CollectProcessor() { @Override public boolean process(final PsiClass o) { - updateComponent(o, myRenderer.getComparator()); + if (!updateComponent(o, myRenderer.getComparator())) { + indicator.cancel(); + } + indicator.checkCanceled(); return super.process(o); } }); @@ -281,13 +284,16 @@ public class MarkerType { } @Override - public void run(@NotNull ProgressIndicator indicator) { + public void run(@NotNull final ProgressIndicator indicator) { super.run(indicator); OverridingMethodsSearch.search(myMethod, true).forEach( new CommonProcessors.CollectProcessor() { @Override public boolean process(PsiMethod psiMethod) { - updateComponent(psiMethod, myRenderer.getComparator()); + if (!updateComponent(psiMethod, myRenderer.getComparator())) { + indicator.cancel(); + } + indicator.checkCanceled(); return super.process(psiMethod); } }); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/hint/actions/ShowImplementationsAction.java b/platform/lang-impl/src/com/intellij/codeInsight/hint/actions/ShowImplementationsAction.java index 99efaf5e9d08..1f0d80bc1f16 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/hint/actions/ShowImplementationsAction.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/hint/actions/ShowImplementationsAction.java @@ -335,13 +335,16 @@ public class ShowImplementationsAction extends AnAction implements PopupAction { } @Override - public void run(@NotNull ProgressIndicator indicator) { + public void run(final @NotNull ProgressIndicator indicator) { super.run(indicator); myElements = getSelfAndImplementations(myEditor, myElement, new ImplementationSearcher.BackgroundableImplementationSearcher() { @Override protected void processElement(PsiElement element) { - updateComponent(element, null); + if (!updateComponent(element, null)) { + indicator.cancel(); + } + indicator.checkCanceled(); } @Override diff --git a/platform/lang-impl/src/com/intellij/codeInsight/navigation/BackgroundUpdaterTask.java b/platform/lang-impl/src/com/intellij/codeInsight/navigation/BackgroundUpdaterTask.java index 2490267051e0..4c1dd1bf8777 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/navigation/BackgroundUpdaterTask.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/navigation/BackgroundUpdaterTask.java @@ -83,12 +83,12 @@ public abstract class BackgroundUpdaterTask extends Task.Backgroundable { return canceled; } - public void updateComponent(PsiElement element, @Nullable final Comparator comparator) { - if (myCanceled) return; - if (myPopup.isDisposed()) return; + public boolean updateComponent(PsiElement element, @Nullable final Comparator comparator) { + if (myCanceled) return false; + if (myPopup.isDisposed()) return false; synchronized (lock) { - if (myData.contains(element)) return; + if (myData.contains(element)) return true; myData.add(element); } @@ -110,6 +110,7 @@ public abstract class BackgroundUpdaterTask extends Task.Backgroundable { myPopup.pack(true, true); } }, 200, ModalityState.stateForComponent(myPopup.getContent())); + return true; } public int getCurrentSize() { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/navigation/GotoImplementationHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/navigation/GotoImplementationHandler.java index 14be963ab4bb..11ee1c156d9e 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/navigation/GotoImplementationHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/navigation/GotoImplementationHandler.java @@ -78,16 +78,21 @@ public class GotoImplementationHandler extends GotoTargetHandler { } @Override - public void run(@NotNull ProgressIndicator indicator) { + public void run(final @NotNull ProgressIndicator indicator) { super.run(indicator); for (PsiElement element : myGotoData.targets) { - updateComponent(element, createComparator(renderers, myGotoData)); + if (!updateComponent(element, createComparator(renderers, myGotoData))) { + return; + } } new ImplementationSearcher.BackgroundableImplementationSearcher() { protected void processElement(PsiElement element) { if (myGotoData.addTarget(element)) { - updateComponent(element, createComparator(renderers, myGotoData)); + if (!updateComponent(element, createComparator(renderers, myGotoData))) { + indicator.cancel(); + } } + indicator.checkCanceled(); } }.searchImplementations(myEditor, myGotoData.source, myOffset); } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInsight/GroovyMarkerTypes.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInsight/GroovyMarkerTypes.java index 17858dc94695..2ccadd1a866b 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInsight/GroovyMarkerTypes.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInsight/GroovyMarkerTypes.java @@ -333,14 +333,17 @@ public class GroovyMarkerTypes { } @Override - public void run(@NotNull ProgressIndicator indicator) { + public void run(final @NotNull ProgressIndicator indicator) { super.run(indicator); for (PsiMethod method : PsiImplUtil.getMethodOrReflectedMethods(myMethod)) { OverridingMethodsSearch.search(method, true).forEach( new CommonProcessors.CollectProcessor() { @Override public boolean process(PsiMethod psiMethod) { - updateComponent(com.intellij.psi.impl.PsiImplUtil.handleMirror(psiMethod), myRenderer.getComparator()); + if (!updateComponent(com.intellij.psi.impl.PsiImplUtil.handleMirror(psiMethod), myRenderer.getComparator())) { + indicator.cancel(); + } + indicator.checkCanceled(); return true; } });