From 23e09a859d34307f952e3e659475f9268eadfc8d Mon Sep 17 00:00:00 2001 From: nik Date: Mon, 17 Oct 2011 13:36:43 +0400 Subject: [PATCH] xdebugger: don't remove error message nodes when a new value node is added --- .../ui/tree/nodes/XValueContainerNode.java | 44 ++++++++++++------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XValueContainerNode.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XValueContainerNode.java index 8207a17a99e5..570a6b4d5472 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XValueContainerNode.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XValueContainerNode.java @@ -16,6 +16,7 @@ package com.intellij.xdebugger.impl.ui.tree.nodes; import com.intellij.ui.SimpleTextAttributes; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.SortedList; import com.intellij.xdebugger.frame.*; import com.intellij.xdebugger.impl.settings.XDebuggerSettingsManager; @@ -37,6 +38,7 @@ import java.util.List; public abstract class XValueContainerNode extends XDebuggerTreeNode implements XCompositeNode, TreeNode { private List myValueChildren; private List myMessageChildren; + private List myTemporaryMessageChildren; private List myCachedAllChildren; protected final ValueContainer myValueContainer; private volatile boolean myObsolete; @@ -48,13 +50,13 @@ public abstract class XValueContainerNode messages) { + private void setMessageNodes(final List messages, boolean temporary) { myCachedAllChildren = null; - final int[] indices = getNodesIndices(myMessageChildren); + List allMessageChildren = ContainerUtil.concat(myMessageChildren != null ? myMessageChildren : Collections.emptyList(), + myTemporaryMessageChildren != null ? myTemporaryMessageChildren : Collections.emptyList()); + final int[] indices = getNodesIndices(allMessageChildren); final TreeNode[] nodes = getChildNodes(indices); - myMessageChildren = Collections.emptyList(); + myMessageChildren = null; + myTemporaryMessageChildren = null; fireNodesRemoved(indices, nodes); - myMessageChildren = messages; + if (!temporary) { + myMessageChildren = messages; + } + else { + myTemporaryMessageChildren = messages; + } myCachedAllChildren = null; - fireNodesInserted(myMessageChildren); + fireNodesInserted(messages); } protected List getChildren() { @@ -162,11 +173,14 @@ public abstract class XValueContainerNode(); + if (myMessageChildren != null) { + myCachedAllChildren.addAll(myMessageChildren); + } if (myValueChildren != null) { myCachedAllChildren.addAll(myValueChildren); } - if (myMessageChildren != null) { - myCachedAllChildren.addAll(myMessageChildren); + if (myTemporaryMessageChildren != null) { + myCachedAllChildren.addAll(myTemporaryMessageChildren); } } return myCachedAllChildren;