From 1ce06c9538af3671c7b2c8d092ac213ac38e332c Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Fri, 31 Oct 2014 14:34:53 +0100 Subject: [PATCH] detach element to avoid memory leaks --- .../impl/RunnerAndConfigurationSettingsImpl.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.java b/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.java index 59e2ac7622a4..e55d39f50139 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.java @@ -247,7 +247,8 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C myUnloadedRunnerSettings.clear(); } myLoadedRunnerSettings.clear(); - for (Element runnerElement : element.getChildren(RUNNER_ELEMENT)) { + for (Iterator iterator = element.getChildren(RUNNER_ELEMENT).iterator(); iterator.hasNext(); ) { + Element runnerElement = iterator.next(); String id = runnerElement.getAttributeValue(RUNNER_ID); ProgramRunner runner = RunnerRegistry.getInstance().findRunnerById(id); if (runner != null) { @@ -262,11 +263,15 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C if (myUnloadedRunnerSettings == null) { myUnloadedRunnerSettings = new SmartList(); } + + iterator.remove(); myUnloadedRunnerSettings.add(runnerElement); } } - myUnloadedConfigurationPerRunnerSettings = null; + if (myUnloadedRunnerSettings != null) { + myUnloadedRunnerSettings.clear(); + } for (Iterator iterator = element.getChildren(CONFIGURATION_ELEMENT).iterator(); iterator.hasNext(); ) { Element configurationElement = iterator.next(); ProgramRunner runner = RunnerRegistry.getInstance().findRunnerById(configurationElement.getAttributeValue(RUNNER_ID));