From bb0fa00b6e25462dd28ec9391dcef7b508d1c192 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Tue, 5 Apr 2011 18:18:19 +0400 Subject: [PATCH] concurrent injected highlight --- .../daemon/impl/GeneralHighlightingPass.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/GeneralHighlightingPass.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/GeneralHighlightingPass.java index d0a9bacbfa29..0a3f4c394c8d 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/GeneralHighlightingPass.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/GeneralHighlightingPass.java @@ -316,15 +316,21 @@ public class GeneralHighlightingPass extends ProgressableTextEditorHighlightingP hosts.addAll(elements1); hosts.addAll(elements2); - PsiLanguageInjectionHost.InjectedPsiVisitor visitor = new PsiLanguageInjectionHost.InjectedPsiVisitor() { + final PsiLanguageInjectionHost.InjectedPsiVisitor visitor = new PsiLanguageInjectionHost.InjectedPsiVisitor() { public void visit(@NotNull PsiFile injectedPsi, @NotNull List places) { - outInjected.add(injectedPsi); + synchronized (outInjected) { + outInjected.add(injectedPsi); + } } }; - for (PsiElement element : hosts) { - progress.checkCanceled(); - InjectedLanguageUtil.enumerate(element, myFile, visitor, false); - } + if (!JobUtil.invokeConcurrentlyUnderProgress(new ArrayList(hosts), new Processor() { + @Override + public boolean process(PsiElement element) { + progress.checkCanceled(); + InjectedLanguageUtil.enumerate(element, myFile, visitor, false); + return true; + } + }, false, progress)) throw new ProcessCanceledException(); } // returns false if canceled