diff --git a/platform/lang-impl/src/com/intellij/execution/impl/RunConfigurable.java b/platform/lang-impl/src/com/intellij/execution/impl/RunConfigurable.java index 31e90b61d96c..6d134daf7a83 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/RunConfigurable.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/RunConfigurable.java @@ -41,10 +41,12 @@ import com.intellij.ui.treeStructure.Tree; import com.intellij.util.ArrayUtil; import com.intellij.util.PlatformIcons; import com.intellij.util.config.StorageAccessors; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.Convertor; import com.intellij.util.containers.HashMap; import com.intellij.util.ui.UIUtil; import com.intellij.util.ui.tree.TreeUtil; +import gnu.trove.THashSet; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -618,11 +620,18 @@ class RunConfigurable extends BaseConfigurable { } // if apply succeeded, update the list of configurations in RunManager - manager.removeConfigurations(type); - for (final RunConfigurationBean stableConfiguration : stableConfigurations) { - manager.addConfiguration(stableConfiguration.getSettings(), - stableConfiguration.isShared(), - stableConfiguration.getStepsBeforeLaunch()); + Set toDeleteSettings = new THashSet(); + for (RunConfiguration each : manager.getConfigurations(type)) { + ContainerUtil.addIfNotNull(toDeleteSettings, manager.getSettings(each)); + } + + for (RunConfigurationBean each : stableConfigurations) { + toDeleteSettings.remove(each.getSettings()); + manager.addConfiguration(each.getSettings(), each.isShared(), each.getStepsBeforeLaunch()); + } + + for (RunnerAndConfigurationSettings each : toDeleteSettings) { + manager.removeConfiguration(each); } } 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 f0e6a15f6206..d878cca21a27 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.java @@ -249,9 +249,10 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable, Integer existingId = findConfigurationIdByUniqueName(getUniqueName(settings)); Integer newId = configuration.getUniqueID(); + RunnerAndConfigurationSettings existingSettings = null; if (existingId != null) { - myConfigurations.remove(existingId); + existingSettings = myConfigurations.remove(existingId); mySharedConfigurations.remove(existingId); } @@ -261,7 +262,13 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable, mySharedConfigurations.put(newId, shared); setBeforeRunTasks(configuration, tasks); - myDispatcher.getMulticaster().runConfigurationAdded(settings); + + if (existingSettings == settings) { + myDispatcher.getMulticaster().runConfigurationChanged(settings); + } + else { + myDispatcher.getMulticaster().runConfigurationAdded(settings); + } } void checkRecentsLimit() { @@ -285,31 +292,6 @@ public class RunManagerImpl extends RunManagerEx implements JDOMExternalizable, (config instanceof UnknownRunConfiguration ? config.getUniqueID() : ""); } - public void removeConfigurations(@NotNull final ConfigurationType type) { - List removed = new ArrayList(); - for (Iterator it = getSortedConfigurations().iterator(); it.hasNext(); ) { - final RunnerAndConfigurationSettings configuration = it.next(); - final ConfigurationType configurationType = configuration.getType(); - if (configurationType != null && type.getId().equals(configurationType.getId())) { - removed.add(configuration); - invalidateConfigurationIcon(configuration); - it.remove(); - } - } - fireRunConfigurationsRemoved(removed); - - final RunnerAndConfigurationSettings selectedConfiguration = getSelectedConfiguration(); - if (selectedConfiguration != null && removed.contains(selectedConfiguration)) { - final Collection sortedConfigurations = getSortedConfigurations(); - RunnerAndConfigurationSettings toSelect = null; - if (sortedConfigurations.size() > 0) { - toSelect = sortedConfigurations.iterator().next(); - } - - setSelectedConfiguration(toSelect); - } - } - @Override public void removeConfiguration(@Nullable RunnerAndConfigurationSettings settings) { if (settings == null) return;