diff --git a/platform/lang-impl/src/com/intellij/execution/impl/ModuleRunConfigurationManager.java b/platform/lang-impl/src/com/intellij/execution/impl/ModuleRunConfigurationManager.java index 74fc813c17c1..900a8ed4b116 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/ModuleRunConfigurationManager.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/ModuleRunConfigurationManager.java @@ -42,13 +42,14 @@ import java.util.Set; @State(name = "ModuleRunConfigurationManager") public final class ModuleRunConfigurationManager implements PersistentStateComponent { + private static final Object LOCK = new Object(); private static final Logger LOG = Logger.getInstance(ModuleRunConfigurationManager.class); @NotNull + private final Module myModule; + @NotNull private final Condition myModuleConfigCondition = settings -> settings != null && usesMyModule(settings.getConfiguration()); @NotNull - private final Module myModule; - @NotNull private final RunManagerImpl myManager; @Nullable private List myUnloadedElements = null; @@ -62,8 +63,10 @@ public final class ModuleRunConfigurationManager implements PersistentStateCompo public void beforeModuleRemoved(@NotNull Project project, @NotNull Module module) { if (myModule.equals(module)) { LOG.debug("time to remove something from project (" + project + ")"); - for (final RunnerAndConfigurationSettings settings : getModuleRunConfigurationSettings()) { - myManager.removeConfiguration(settings); + synchronized (LOCK) { + for (final RunnerAndConfigurationSettings settings : getModuleRunConfigurationSettings()) { + myManager.removeConfiguration(settings); + } } } } @@ -117,6 +120,12 @@ public final class ModuleRunConfigurationManager implements PersistentStateCompo } public void readExternal(@NotNull final Element element) { + synchronized (LOCK) { + doReadExternal(element); + } + } + + private void doReadExternal(@NotNull Element element) { LOG.debug("readExternal(" + myModule + ")"); myUnloadedElements = null; final Set existing = new HashSet<>();