From b1eb1477f8de96c47a2e362368036a4a39798941 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Tue, 7 Oct 2014 13:17:10 +0400 Subject: [PATCH] https://ea.jetbrains.com/browser/ea_problems/61344 --- .../impl/InjectedGeneralHighlightingPass.java | 4 ++- .../intellij/concurrency/JobLauncherImpl.java | 30 +++++++++++++------ 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/InjectedGeneralHighlightingPass.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/InjectedGeneralHighlightingPass.java index 0321191294c5..a960d7da87f7 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/InjectedGeneralHighlightingPass.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/InjectedGeneralHighlightingPass.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,6 +21,7 @@ import com.intellij.concurrency.JobLauncher; import com.intellij.injected.editor.DocumentWindow; import com.intellij.lang.Language; import com.intellij.lang.injection.InjectedLanguageManager; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; @@ -145,6 +146,7 @@ public class InjectedGeneralHighlightingPass extends GeneralHighlightingPass imp private Set getInjectedPsiFiles(@NotNull final List elements1, @NotNull final List elements2, @NotNull final ProgressIndicator progress) { + ApplicationManager.getApplication().assertReadAccessAllowed(); final Set outInjected = new THashSet(); List injected = InjectedLanguageUtil.getCachedInjectedDocuments(myFile); diff --git a/platform/platform-impl/src/com/intellij/concurrency/JobLauncherImpl.java b/platform/platform-impl/src/com/intellij/concurrency/JobLauncherImpl.java index 3c9ae67c1980..ef88f15ee2d3 100644 --- a/platform/platform-impl/src/com/intellij/concurrency/JobLauncherImpl.java +++ b/platform/platform-impl/src/com/intellij/concurrency/JobLauncherImpl.java @@ -16,6 +16,7 @@ package com.intellij.concurrency; import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.application.ex.ApplicationManagerEx; import com.intellij.openapi.progress.ProcessCanceledException; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.progress.ProgressManager; @@ -129,19 +130,30 @@ public class JobLauncherImpl extends JobLauncher { if (things.size() <= 1 || JobSchedulerImpl.CORES_COUNT <= CORES_FORK_THRESHOLD) { final AtomicBoolean result = new AtomicBoolean(true); - ProgressManager.getInstance().executeProcessUnderProgress(new Runnable() { + Runnable runnable = new Runnable() { @Override public void run() { - //noinspection ForLoopReplaceableByForEach - for (int i = 0; i < things.size(); i++) { - T thing = things.get(i); - if (!thingProcessor.process(thing)) { - result.set(false); - break; + ProgressManager.getInstance().executeProcessUnderProgress(new Runnable() { + @Override + public void run() { + //noinspection ForLoopReplaceableByForEach + for (int i = 0; i < things.size(); i++) { + T thing = things.get(i); + if (!thingProcessor.process(thing)) { + result.set(false); + break; + } + } } - } + }, wrapper); } - }, wrapper); + }; + if (runInReadAction) { + if (!ApplicationManagerEx.getApplicationEx().tryRunReadAction(runnable)) return false; + } + else { + runnable.run(); + } return result.get(); }