diff --git a/platform/analysis-impl/src/com/intellij/codeInsight/daemon/impl/ProgressableTextEditorHighlightingPass.java b/platform/analysis-impl/src/com/intellij/codeInsight/daemon/impl/ProgressableTextEditorHighlightingPass.java index 32861ec99a6a..564dac79f821 100644 --- a/platform/analysis-impl/src/com/intellij/codeInsight/daemon/impl/ProgressableTextEditorHighlightingPass.java +++ b/platform/analysis-impl/src/com/intellij/codeInsight/daemon/impl/ProgressableTextEditorHighlightingPass.java @@ -17,6 +17,7 @@ package com.intellij.codeInsight.daemon.impl; import com.intellij.codeHighlighting.TextEditorHighlightingPass; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.progress.ProgressIndicator; @@ -151,8 +152,16 @@ public abstract class ProgressableTextEditorHighlightingPass extends TextEditorH } } + void waitForHighlightInfosApplied() { + ApplicationManager.getApplication().assertIsDispatchThread(); + HighlightingSessionImpl session = (HighlightingSessionImpl)myHighlightingSession; + if (session != null) { + session.waitForHighlightInfosApplied(); + } + } + static class EmptyPass extends TextEditorHighlightingPass { - public EmptyPass(final Project project, @Nullable final Document document) { + EmptyPass(final Project project, @Nullable final Document document) { super(project, document, false); } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/PassExecutorService.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/PassExecutorService.java index 10ffb48c7a8f..57db3cd614a4 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/PassExecutorService.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/PassExecutorService.java @@ -517,6 +517,9 @@ class PassExecutorService implements Disposable { throw new RuntimeException(message, e); } if (threadsToStartCountdown.decrementAndGet() == 0) { + if (pass instanceof ProgressableTextEditorHighlightingPass) { + ((ProgressableTextEditorHighlightingPass)pass).waitForHighlightInfosApplied(); + } log(updateProgress, pass, "Stopping "); updateProgress.stopIfRunning(); } @@ -543,7 +546,7 @@ class PassExecutorService implements Disposable { } private static void sortById(@NotNull List result) { - ContainerUtil.quickSort(result, (o1, o2) -> o1.getId() - o2.getId()); + ContainerUtil.quickSort(result, Comparator.comparingInt(TextEditorHighlightingPass::getId)); } private static int getThreadNum() {