From 93d54859a90bfad2f589db769988f18248e02db1 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Thu, 11 Jun 2015 15:51:15 +0300 Subject: [PATCH] added dispatch thread assertions to protect myConfigurationToBeforeTaskMap --- .../intellij/execution/impl/RunManagerImpl.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.java b/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.java index 539a85ae964d..c9e5b8885010 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.java @@ -22,6 +22,7 @@ import com.intellij.execution.configurations.*; import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.ide.util.PropertiesComponent; import com.intellij.openapi.Disposable; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.components.*; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.extensions.Extensions; @@ -154,6 +155,7 @@ public class RunManagerImpl extends RunManagerEx implements PersistentStateCompo @NotNull public RunnerAndConfigurationSettings createConfiguration(@NotNull final RunConfiguration runConfiguration, @NotNull final ConfigurationFactory factory) { + assertDispatchThread(); RunnerAndConfigurationSettings template = getConfigurationTemplate(factory); RunnerAndConfigurationSettingsImpl settings = new RunnerAndConfigurationSettingsImpl(this, runConfiguration, false); settings.importRunnerAndConfigurationSettings((RunnerAndConfigurationSettingsImpl)template); @@ -163,6 +165,12 @@ public class RunManagerImpl extends RunManagerEx implements PersistentStateCompo return settings; } + private void assertDispatchThread() { + if (myProject.isInitialized()) { + ApplicationManager.getApplication().assertIsDispatchThread(); + } + } + @Override public void dispose() { myTemplateConfigurationsMap.clear(); @@ -336,6 +344,7 @@ public class RunManagerImpl extends RunManagerEx implements PersistentStateCompo public void addConfiguration(RunnerAndConfigurationSettings settings, boolean shared, List tasks, boolean addEnabledTemplateTasksIfAbsent) { + assertDispatchThread(); String existingId = findExistingConfigurationId(settings); String newId = settings.getUniqueID(); RunnerAndConfigurationSettings existingSettings = null; @@ -416,6 +425,7 @@ public class RunManagerImpl extends RunManagerEx implements PersistentStateCompo @Override public void removeConfiguration(@Nullable RunnerAndConfigurationSettings settings) { + assertDispatchThread(); if (settings == null) return; for (Iterator it = getSortedConfigurations().iterator(); it.hasNext(); ) { @@ -684,8 +694,6 @@ public class RunManagerImpl extends RunManagerEx implements PersistentStateCompo @Override public void loadState(Element parentNode) { - clear(false); - List children = parentNode.getChildren(CONFIGURATION); Element[] sortedElements = children.toArray(new Element[children.size()]); // ensure templates are loaded first @@ -810,6 +818,7 @@ public class RunManagerImpl extends RunManagerEx implements PersistentStateCompo } private void clear(boolean allConfigurations) { + assertDispatchThread(); List configurations; if (allConfigurations) { myConfigurations.clear(); @@ -1138,6 +1147,7 @@ public class RunManagerImpl extends RunManagerEx implements PersistentStateCompo @NotNull @Override public List getBeforeRunTasks(RunConfiguration settings, Key taskProviderID) { + assertDispatchThread(); if (settings instanceof WrappingRunConfiguration) { return getBeforeRunTasks(((WrappingRunConfiguration)settings).getPeer(), taskProviderID); } @@ -1159,6 +1169,7 @@ public class RunManagerImpl extends RunManagerEx implements PersistentStateCompo @Override @NotNull public List getBeforeRunTasks(final RunConfiguration settings) { + assertDispatchThread(); if (settings instanceof WrappingRunConfiguration) { return getBeforeRunTasks(((WrappingRunConfiguration)settings).getPeer()); } @@ -1214,6 +1225,7 @@ public class RunManagerImpl extends RunManagerEx implements PersistentStateCompo @Override public final void setBeforeRunTasks(final RunConfiguration runConfiguration, @NotNull List tasks, boolean addEnabledTemplateTasksIfAbsent) { + assertDispatchThread(); List result = new SmartList(tasks); if (addEnabledTemplateTasksIfAbsent) { List templates = getTemplateBeforeRunTasks(runConfiguration); @@ -1234,6 +1246,7 @@ public class RunManagerImpl extends RunManagerEx implements PersistentStateCompo } public final void resetBeforeRunTasks(final RunConfiguration runConfiguration) { + assertDispatchThread(); myConfigurationToBeforeTasksMap.remove(runConfiguration); fireBeforeRunTasksUpdated(); }