diff --git a/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/RunnerLayout.java b/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/RunnerLayout.java index 3cf33f1e8155..854a2ec81fff 100644 --- a/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/RunnerLayout.java +++ b/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/RunnerLayout.java @@ -24,6 +24,8 @@ import com.intellij.openapi.util.Key; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.content.Content; +import com.intellij.util.containers.hash.LinkedHashMap; +import com.intellij.util.xmlb.SkipDefaultValuesSerializationFilters; import com.intellij.util.xmlb.XmlSerializer; import org.jdom.Element; import org.jetbrains.annotations.NonNls; @@ -38,7 +40,7 @@ public class RunnerLayout { public static final Key DROP_INDEX = Key.create("RunnerLayoutDropIndex"); private final String myID; - protected Map myViews = new HashMap(); + protected Map myViews = new LinkedHashMap(); private final Map myDefaultViews = new HashMap(); protected Set myTabs = new TreeSet(new Comparator() { @@ -138,10 +140,11 @@ public class RunnerLayout { @NotNull public Element read(@NotNull Element parentNode) { - List tabs = parentNode.getChildren(StringUtil.getShortName(TabImpl.class.getName())); - for (Object eachTabElement : tabs) { - TabImpl eachTab = new TabImpl((Element)eachTabElement); - getOrCreateTab(eachTab.getIndex()).read((Element)eachTabElement); + List tabs = parentNode.getChildren(StringUtil.getShortName(TabImpl.class.getName())); + for (Element eachTabElement : tabs) { + TabImpl eachTab = XmlSerializer.deserialize(eachTabElement, TabImpl.class); + assert eachTab != null; + XmlSerializer.deserializeInto(getOrCreateTab(eachTab.getIndex()), eachTabElement); } final List views = parentNode.getChildren(StringUtil.getShortName(ViewImpl.class.getName())); @@ -158,16 +161,17 @@ public class RunnerLayout { @NotNull public Element write(@NotNull Element parentNode) { for (ViewImpl eachState : myViews.values()) { - eachState.write(parentNode); + parentNode.addContent(XmlSerializer.serialize(eachState)); } + SkipDefaultValuesSerializationFilters filter = new SkipDefaultValuesSerializationFilters(); for (TabImpl eachTab : myTabs) { if (isUsed(eachTab)) { - eachTab.write(parentNode); + parentNode.addContent(XmlSerializer.serialize(eachTab, filter)); } } - parentNode.addContent(XmlSerializer.serialize(myGeneral)); + parentNode.addContent(XmlSerializer.serialize(myGeneral, filter)); return parentNode; } @@ -213,12 +217,11 @@ public class RunnerLayout { @NotNull private ViewImpl getOrCreateView(@NotNull String id) { - if (myViews.containsKey(id)) { - return myViews.get(id); + ViewImpl view = myViews.get(id); + if (view == null) { + view = getOrCreateDefault(id).createView(this); + myViews.put(id, view); } - final ViewImpl.Default defaultView = getOrCreateDefault(id); - final ViewImpl view = defaultView.createView(this); - myViews.put(id, view); return view; } diff --git a/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/TabImpl.java b/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/TabImpl.java index bfa546d008db..24da57e63192 100644 --- a/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/TabImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/TabImpl.java @@ -16,23 +16,12 @@ package com.intellij.execution.ui.layout.impl; -import com.intellij.execution.ui.layout.Tab; import com.intellij.execution.ui.layout.PlaceInGrid; -import com.intellij.util.xmlb.XmlSerializer; -import org.jdom.Element; +import com.intellij.execution.ui.layout.Tab; import javax.swing.*; public class TabImpl extends AbstractTab implements Tab { - - public TabImpl(Element element) { - read(element); - } - - public void read(final Element element) { - XmlSerializer.deserializeInto(this, element); - } - TabImpl() { } @@ -66,12 +55,6 @@ public class TabImpl extends AbstractTab implements Tab { myDisplayName = displayName; } - - public void write(final Element parentNode) { - final Element element = XmlSerializer.serialize(this); - parentNode.addContent(element); - } - public float getLeftProportion() { return myLeftProportion; } diff --git a/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/ViewImpl.java b/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/ViewImpl.java index 00f9cc6cf525..712a6f9cb876 100644 --- a/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/ViewImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/ViewImpl.java @@ -16,9 +16,9 @@ package com.intellij.execution.ui.layout.impl; +import com.intellij.execution.ui.layout.PlaceInGrid; import com.intellij.execution.ui.layout.Tab; import com.intellij.execution.ui.layout.View; -import com.intellij.execution.ui.layout.PlaceInGrid; import com.intellij.openapi.util.Key; import com.intellij.util.xmlb.XmlSerializer; import org.jdom.Element; @@ -51,10 +51,6 @@ public class ViewImpl implements View { assignTab(settings.getOrCreateTab(myTabIndex)); } - public void write(final Element content) { - content.addContent(XmlSerializer.serialize(this)); - } - @Override public Tab getTab() { return myTab;