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 2e42524b6c81..7b08dfd76423 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/RunManagerImpl.java @@ -37,6 +37,7 @@ import com.intellij.util.SmartList; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.HashMap; import com.intellij.util.containers.WeakHashMap; +import gnu.trove.THashMap; import org.jdom.Element; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -57,7 +58,7 @@ public class RunManagerImpl extends RunManagerEx implements PersistentStateCompo private final Map myTypesByName = new LinkedHashMap(); private final Map myTemplateConfigurationsMap = - new HashMap(); + new THashMap(); private final Map myConfigurations = new LinkedHashMap(); // template configurations are not included here private final Map mySharedConfigurations = new TreeMap(); @@ -536,33 +537,43 @@ public class RunManagerImpl extends RunManagerEx implements PersistentStateCompo @Override public Element getState() { Element parentNode = new Element("state"); - writeContext(parentNode);//writes temporary configurations here - for (final RunnerAndConfigurationSettings runnerAndConfigurationSettings : myTemplateConfigurationsMap.values()) { - if (runnerAndConfigurationSettings.getConfiguration() instanceof UnknownRunConfiguration) { - if (((UnknownRunConfiguration)runnerAndConfigurationSettings.getConfiguration()).isDoNotStore()) { - continue; - } + // writes temporary configurations here + writeContext(parentNode); + + for (RunnerAndConfigurationSettings configuration : myTemplateConfigurationsMap.values()) { + if (configuration.getConfiguration() instanceof UnknownRunConfiguration && + ((UnknownRunConfiguration)configuration.getConfiguration()).isDoNotStore()) { + continue; } - addConfigurationElement(parentNode, runnerAndConfigurationSettings); + addConfigurationElement(parentNode, configuration); } for (RunnerAndConfigurationSettings configuration : getStableConfigurations(false)) { addConfigurationElement(parentNode, configuration); } - final JDOMExternalizableStringList order = new JDOMExternalizableStringList(); - //temp && stable configurations, !unknown + // temp && stable configurations, !unknown + JDOMExternalizableStringList order = null; for (RunnerAndConfigurationSettings each : myConfigurations.values()) { - if (each.getType() instanceof UnknownConfigurationType) continue; + if (each.getType() instanceof UnknownConfigurationType) { + continue; + } + + if (order == null) { + order = new JDOMExternalizableStringList(); + } order.add(each.getUniqueID()); } - - order.writeExternal(parentNode); + if (order != null) { + order.writeExternal(parentNode); + } final JDOMExternalizableStringList recentList = new JDOMExternalizableStringList(); for (RunConfiguration each : myRecentlyUsedTemporaries) { - if (each.getType() instanceof UnknownConfigurationType) continue; + if (each.getType() instanceof UnknownConfigurationType) { + continue; + } RunnerAndConfigurationSettings settings = getSettings(each); if (settings == null) { continue; @@ -570,7 +581,7 @@ public class RunManagerImpl extends RunManagerEx implements PersistentStateCompo recentList.add(settings.getUniqueID()); } if (!recentList.isEmpty()) { - final Element recent = new Element(RECENT); + Element recent = new Element(RECENT); parentNode.addContent(recent); recentList.writeExternal(recent); } @@ -583,12 +594,13 @@ public class RunManagerImpl extends RunManagerEx implements PersistentStateCompo return parentNode; } - public void writeContext(Element parentNode) { + public void writeContext(@NotNull Element parentNode) { for (RunnerAndConfigurationSettings configurationSettings : myConfigurations.values()) { if (configurationSettings.isTemporary()) { addConfigurationElement(parentNode, configurationSettings, CONFIGURATION); } } + RunnerAndConfigurationSettings selected = getSelectedConfiguration(); if (selected != null) { parentNode.setAttribute(SELECTED_ATTR, selected.getUniqueID());