diff options
Diffstat (limited to 'platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XStackFrameNode.java')
-rw-r--r-- | platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XStackFrameNode.java | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XStackFrameNode.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XStackFrameNode.java index fa32ebcc4d75..b7b21560f438 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XStackFrameNode.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XStackFrameNode.java @@ -15,7 +15,16 @@ */ package com.intellij.xdebugger.impl.ui.tree.nodes; +import com.intellij.openapi.util.registry.Registry; +import com.intellij.xdebugger.XDebugSession; +import com.intellij.xdebugger.XExpression; +import com.intellij.xdebugger.evaluation.XDebuggerEvaluator; import com.intellij.xdebugger.frame.XStackFrame; +import com.intellij.xdebugger.frame.XValue; +import com.intellij.xdebugger.frame.XValueChildrenList; +import com.intellij.xdebugger.impl.XDebugSessionImpl; +import com.intellij.xdebugger.impl.frame.XDebugView; +import com.intellij.xdebugger.impl.ui.XDebugSessionData; import com.intellij.xdebugger.impl.ui.tree.XDebuggerTree; import org.jetbrains.annotations.NotNull; @@ -27,4 +36,32 @@ public class XStackFrameNode extends XValueContainerNode<XStackFrame> { super(tree, null, xStackFrame); setLeaf(false); } + + @Override + public void startComputingChildren() { + if (Registry.is("debugger.watches.in.variables")) { + XDebugSession session = XDebugView.getSession(getTree()); + XDebuggerEvaluator evaluator = getValueContainer().getEvaluator(); + if (session != null && evaluator != null) { + XDebugSessionData data = ((XDebugSessionImpl)session).getSessionData(); + XExpression[] expressions = data.getWatchExpressions(); + for (final XExpression expression : expressions) { + evaluator.evaluate(expression, new XDebuggerEvaluator.XEvaluationCallback() { + @Override + public void evaluated(@NotNull XValue result) { + XValueChildrenList watches = new XValueChildrenList(); + watches.add(expression.getExpression(), result); + addChildren(watches, false); + } + + @Override + public void errorOccurred(@NotNull String errorMessage) { + // do not add anything + } + }, getValueContainer().getSourcePosition()); + } + } + } + super.startComputingChildren(); + } } |