Platform:Run Configurations: do not remove and recreate all configurations on 'Edit Configurations->apply'

AppCode:Schemes: do not spoil schemes after editing Run Configurations (OC-3024)
This commit is contained in:
Anton Makeev
2012-02-24 12:24:57 +01:00
parent c58eb4a272
commit 449d5ecc8b
2 changed files with 23 additions and 32 deletions
@@ -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<RunnerAndConfigurationSettings> toDeleteSettings = new THashSet<RunnerAndConfigurationSettings>();
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);
}
}
@@ -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<RunnerAndConfigurationSettings> removed = new ArrayList<RunnerAndConfigurationSettings>();
for (Iterator<RunnerAndConfigurationSettings> 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<RunnerAndConfigurationSettings> 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;