diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/XDebuggerTreeRestorer.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/XDebuggerTreeRestorer.java index aa49f5554499..5a072fe046aa 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/XDebuggerTreeRestorer.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/XDebuggerTreeRestorer.java @@ -62,13 +62,11 @@ public class XDebuggerTreeRestorer implements XDebuggerTreeListener, TreeSelecti private void restoreNode(final XDebuggerTreeNode treeNode, final XDebuggerTreeState.NodeInfo parentInfo) { if (treeNode instanceof XValueNodeImpl) { XValueNodeImpl node = (XValueNodeImpl)treeNode; - String nodeName = node.getName(); - String nodeValue = node.getValue(); - if (nodeName == null || nodeValue == null) { - myNode2ParentState.put(node, parentInfo); + if (node.isComputed()) { + doRestoreNode(node, parentInfo, node.getName(), node.getValue()); } else { - doRestoreNode(node, parentInfo, nodeName, nodeValue); + myNode2ParentState.put(node, parentInfo); } } } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/XDebuggerTreeState.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/XDebuggerTreeState.java index 82a12c76e2d9..bbde1afc97e0 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/XDebuggerTreeState.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/XDebuggerTreeState.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2013 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,12 +18,12 @@ package com.intellij.xdebugger.impl.ui.tree; import com.intellij.openapi.application.ApplicationManager; import com.intellij.xdebugger.impl.ui.tree.nodes.XDebuggerTreeNode; import com.intellij.xdebugger.impl.ui.tree.nodes.XValueNodeImpl; +import gnu.trove.THashMap; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.tree.TreePath; import java.awt.*; -import java.util.HashMap; import java.util.List; import java.util.Map; @@ -80,10 +80,8 @@ public class XDebuggerTreeState { private static NodeInfo createNode(final XDebuggerTreeNode node, boolean selected) { if (node instanceof XValueNodeImpl) { XValueNodeImpl valueNode = (XValueNodeImpl)node; - String name = valueNode.getName(); - String value = valueNode.getValue(); - if (name != null && value != null) { - return new NodeInfo(name, value, selected); + if (valueNode.isComputed()) { + return new NodeInfo(valueNode.getName(), valueNode.getValue(), selected); } } return null; @@ -94,7 +92,7 @@ public class XDebuggerTreeState { private final String myValue; private boolean myExpanded; private final boolean mySelected; - private Map myChidlren; + private Map myChildren; public NodeInfo(final String name, final String value, boolean selected) { myName = name; @@ -103,10 +101,10 @@ public class XDebuggerTreeState { } public void addChild(@NotNull NodeInfo child) { - if (myChidlren == null) { - myChidlren = new HashMap(); + if (myChildren == null) { + myChildren = new THashMap(); } - myChidlren.put(child.myName, child); + myChildren.put(child.myName, child); } public boolean isExpanded() { @@ -123,7 +121,7 @@ public class XDebuggerTreeState { @Nullable public NodeInfo removeChild(@NotNull String name) { - return myChidlren != null ? myChidlren.remove(name) : null; + return myChildren != null ? myChildren.remove(name) : null; } } } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/actions/XFetchValueActionBase.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/actions/XFetchValueActionBase.java index e290d97a7c9a..5fc5f992fb3e 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/actions/XFetchValueActionBase.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/actions/XFetchValueActionBase.java @@ -52,8 +52,7 @@ public abstract class XFetchValueActionBase extends AnAction { for (TreePath path : paths) { Object node = path.getLastPathComponent(); if (node instanceof XValueNodeImpl) { - XValueNodeImpl valueNode = (XValueNodeImpl)node; - if (valueNode.getName() != null && valueNode.getValue() != null) { + if (((XValueNodeImpl)node).isComputed()) { e.getPresentation().setEnabled(true); return; } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XValueNodeImpl.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XValueNodeImpl.java index a872872ae0c0..801da16e318b 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XValueNodeImpl.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XValueNodeImpl.java @@ -235,6 +235,10 @@ public class XValueNodeImpl extends XValueContainerNode implements XValu return myValue; } + public boolean isComputed() { + return myName != null && myValuePresenter != null; + } + public void setValueModificationStarted() { ApplicationManager.getApplication().assertIsDispatchThread(); myValue = null; @@ -245,4 +249,9 @@ public class XValueNodeImpl extends XValueContainerNode implements XValu setLeaf(true); fireNodeStructureChanged(); } + + @Override + public String toString() { + return getName(); + } } \ No newline at end of file