From dff37087956121ccdb53f3002dc21b3ef1463ddd Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Tue, 3 Nov 2009 15:12:05 +0300 Subject: [PATCH] cancel job when one of tasks threw PCE --- .../daemon/impl/LocalInspectionsPass.java | 3 +-- .../daemon/impl/UpdateHighlightersUtil.java | 20 ------------------- .../src/com/intellij/concurrency/JobUtil.java | 15 ++++++++++---- 3 files changed, 12 insertions(+), 26 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java index 5ffb0bc3ca04..620f03a0f30f 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java @@ -275,9 +275,8 @@ public class LocalInspectionsPass extends ProgressableTextEditorHighlightingPass if (problemDescriptors == null) return; InspectionProfile inspectionProfile = InspectionProjectProfileManager.getInstance(myProject).getInspectionProfile(); final HighlightSeverity severity = inspectionProfile.getErrorLevel(HighlightDisplayKey.find(tool.getShortName()), myFile).getSeverity(); - ProgressManager progressManager = ProgressManager.getInstance(); for (ProblemDescriptor problemDescriptor : problemDescriptors) { - progressManager.checkCanceled(); + ProgressManager.checkCanceled(); if (!(ignoreSuppressed && InspectionManagerEx.inspectionResultSuppressed(problemDescriptor.getPsiElement(), tool))) { myDescriptors.add(problemDescriptor); HighlightInfoType type = highlightTypeFromDescriptor(problemDescriptor, severity); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/UpdateHighlightersUtil.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/UpdateHighlightersUtil.java index ca2a9f556efd..7bd8431b23e6 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/UpdateHighlightersUtil.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/UpdateHighlightersUtil.java @@ -53,7 +53,6 @@ import com.intellij.util.SmartList; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.MultiMap; import gnu.trove.THashMap; -import gnu.trove.TObjectHashingStrategy; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.TestOnly; @@ -77,25 +76,6 @@ public class UpdateHighlightersUtil { return o1.getStartOffset() - o2.getStartOffset(); } }; - private static final TObjectHashingStrategy DISTINQUISH_INVALID_MARKERS = new TObjectHashingStrategy() { - public int computeHashCode(HighlightInfo info) { - return info.getActualStartOffset(); - } - - public boolean equals(HighlightInfo info1, HighlightInfo info2) { - if (info1 == info2) return true; - if (info1.highlighter != null && !info1.highlighter.isValid()) return false; - if (info2.highlighter != null && !info2.highlighter.isValid()) return false; - return info1.getSeverity() == info2.getSeverity() && - info1.getActualStartOffset() == info2.getActualStartOffset() && - info1.getActualEndOffset() == info2.getActualEndOffset() && - info1.type.equals(info2.type) && - Comparing.equal(info1.getGutterIconRenderer(), info2.getGutterIconRenderer()) && - Comparing.equal(info1.forcedTextAttributes, info2.forcedTextAttributes) && - Comparing.strEqual(info1.description, info2.description) - ; - } - }; private static void cleanFileLevelHighlights(@NotNull Project project, final int group, PsiFile psiFile) { if (psiFile == null || !psiFile.getViewProvider().isPhysical()) return; diff --git a/platform/lang-impl/src/com/intellij/concurrency/JobUtil.java b/platform/lang-impl/src/com/intellij/concurrency/JobUtil.java index 92e46f954181..021c9ffe18e9 100644 --- a/platform/lang-impl/src/com/intellij/concurrency/JobUtil.java +++ b/platform/lang-impl/src/com/intellij/concurrency/JobUtil.java @@ -53,14 +53,19 @@ public class JobUtil { final Job job = JobScheduler.getInstance().createJob(jobName, Job.DEFAULT_PRIORITY); for (final T thing : things) { - //noinspection HardCodedStringLiteral job.addTask(new Runnable(){ public void run() { - if (!thingProcessor.process(thing)) { + try { + if (!thingProcessor.process(thing)) { + job.cancel(); + } + } + catch (ProcessCanceledException e) { job.cancel(); + throw e; } } - }, "done"); + }); } try { job.scheduleAndWaitForResults(); @@ -77,7 +82,9 @@ public class JobUtil { } // execute in multiple threads, with checkCanceled in each delegated to our current progress - public static boolean invokeConcurrentlyUnderMyProgress(@NotNull Collection things, @NotNull final Processor thingProcessor, @NotNull @NonNls String jobName) throws ProcessCanceledException { + public static boolean invokeConcurrentlyUnderMyProgress(@NotNull Collection things, + @NotNull final Processor thingProcessor, + @NotNull @NonNls String jobName) throws ProcessCanceledException { final ProgressIndicator indicator = ProgressManager.getInstance().getProgressIndicator(); return invokeConcurrentlyForAll(things, new Processor() { public boolean process(final T t) {