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