diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerManagerImpl.java b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerManagerImpl.java index 392a14b78bbf..9c094e255ca9 100644 --- a/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerManagerImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/impl/DebuggerManagerImpl.java @@ -582,7 +582,7 @@ public class DebuggerManagerImpl extends DebuggerManagerEx implements Persistent GenericDebuggerRunnerSettings settings, boolean checkValidity) throws ExecutionException { - return createDebugParameters(parameters, settings.LOCAL, settings.getTransport(), settings.DEBUG_PORT, checkValidity); + return createDebugParameters(parameters, settings.LOCAL, settings.getTransport(), settings.getDebugPort(), checkValidity); } private static class MyDebuggerStateManager extends DebuggerStateManager { diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerRunner.java b/java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerRunner.java index 06408ce2a27a..cba2d3ef9b67 100644 --- a/java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerRunner.java +++ b/java/debugger/impl/src/com/intellij/debugger/impl/GenericDebuggerRunner.java @@ -134,7 +134,7 @@ public class GenericDebuggerRunner extends JavaPatchableProgramRunner mySerializedAccessorNameTracker = new THashSet(); + private final SkipDefaultValuesSerializationFilters mySerializationFilter = new SkipDefaultValuesSerializationFilters() { + @Override + protected boolean accepts(@NotNull Accessor accessor, @NotNull Object bean, @Nullable Object beanValue) { + if (mySerializedAccessorNameTracker.contains(accessor.getName())) { + return true; + } + return super.accepts(accessor, bean, beanValue); + } + }; + + @Override + public final void readExternal(Element element) { + mySerializedAccessorNameTracker.clear(); + XmlSerializer.deserializeInto(this, element, mySerializedAccessorNameTracker); + } + + @Override + public final void writeExternal(Element element) { + XmlSerializer.serializeInto(this, element, mySerializationFilter); + } +} \ No newline at end of file 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 d0434b84c493..f979668495c4 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/RunnerAndConfigurationSettingsImpl.java @@ -262,9 +262,9 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C } myUnloadedConfigurationPerRunnerSettings = null; - for (Element configurationElement : element.getChildren(CONFIGURATION_ELEMENT)) { - String id = configurationElement.getAttributeValue(RUNNER_ID); - ProgramRunner runner = RunnerRegistry.getInstance().findRunnerById(id); + for (Iterator iterator = element.getChildren(CONFIGURATION_ELEMENT).iterator(); iterator.hasNext(); ) { + Element configurationElement = iterator.next(); + ProgramRunner runner = RunnerRegistry.getInstance().findRunnerById(configurationElement.getAttributeValue(RUNNER_ID)); if (runner != null) { ConfigurationPerRunnerSettings settings = myConfiguration.createRunnerSettings(new InfoProvider(runner)); if (settings != null) { @@ -276,15 +276,16 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C if (myUnloadedConfigurationPerRunnerSettings == null) { myUnloadedConfigurationPerRunnerSettings = new SmartList(); } + + iterator.remove(); myUnloadedConfigurationPerRunnerSettings.add(configurationElement); } } } @Override - public void writeExternal(final Element element) throws WriteExternalException { + public void writeExternal(Element element) throws WriteExternalException { final ConfigurationFactory factory = myConfiguration.getFactory(); - if (!(myConfiguration instanceof UnknownRunConfiguration)) { element.setAttribute(TEMPLATE_FLAG_ATTRIBUTE, String.valueOf(myIsTemplate)); if (!myIsTemplate) { @@ -297,7 +298,9 @@ public class RunnerAndConfigurationSettingsImpl implements JDOMExternalizable, C } //element.setAttribute(UNIQUE_ID, getUniqueID()); - if (isEditBeforeRun()) element.setAttribute(EDIT_BEFORE_RUN, String.valueOf(true)); + if (isEditBeforeRun()) { + element.setAttribute(EDIT_BEFORE_RUN, String.valueOf(true)); + } if (myWasSingletonSpecifiedExplicitly || mySingleton != factory.isConfigurationSingletonByDefault()) { element.setAttribute(SINGLETON, String.valueOf(mySingleton)); } diff --git a/platform/util/src/com/intellij/util/xmlb/BeanBinding.java b/platform/util/src/com/intellij/util/xmlb/BeanBinding.java index 28d23331d090..57a13fe0e6d2 100644 --- a/platform/util/src/com/intellij/util/xmlb/BeanBinding.java +++ b/platform/util/src/com/intellij/util/xmlb/BeanBinding.java @@ -129,10 +129,12 @@ class BeanBinding implements Binding { if (element == null) { return o; } - return deserializeInto(XmlSerializerImpl.newInstance(myBeanClass), element); + Object instance = XmlSerializerImpl.newInstance(myBeanClass); + deserializeInto(instance, element, null); + return instance; } - public Object deserializeInto(@NotNull Object result, @NotNull Element element) { + public void deserializeInto(@NotNull Object result, @NotNull Element element, @Nullable Set accessorNameTracker) { Set bindings = myPropertyBindings.keySet(); MultiMap data = MultiMap.createSmartList(); nextNode: @@ -155,10 +157,11 @@ class BeanBinding implements Binding { } for (Binding binding : data.keySet()) { + if (accessorNameTracker != null) { + accessorNameTracker.add(myPropertyBindings.get(binding).getName()); + } binding.deserialize(result, ArrayUtil.toObjectArray(data.get(binding))); } - - return result; } @Override diff --git a/platform/util/src/com/intellij/util/xmlb/XmlSerializer.java b/platform/util/src/com/intellij/util/xmlb/XmlSerializer.java index 7dd7f6856cae..76fa9d08c0e1 100644 --- a/platform/util/src/com/intellij/util/xmlb/XmlSerializer.java +++ b/platform/util/src/com/intellij/util/xmlb/XmlSerializer.java @@ -26,6 +26,7 @@ import org.jetbrains.annotations.Nullable; import java.io.IOException; import java.lang.reflect.Array; import java.net.URL; +import java.util.Set; public class XmlSerializer { private static final SerializationFilter TRUE_FILTER = new SerializationFilter() { @@ -101,8 +102,12 @@ public class XmlSerializer { } public static void deserializeInto(@NotNull Object bean, @NotNull Element element) { + deserializeInto(bean, element, null); + } + + public static void deserializeInto(@NotNull Object bean, @NotNull Element element, @Nullable Set accessorNameTracker) { try { - ((BeanBinding)XmlSerializerImpl.getBinding(bean.getClass())).deserializeInto(bean, element); + ((BeanBinding)XmlSerializerImpl.getBinding(bean.getClass())).deserializeInto(bean, element, accessorNameTracker); } catch (XmlSerializationException e) { throw e;