diff options
Diffstat (limited to 'platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes')
4 files changed, 41 insertions, 12 deletions
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/WatchesRootNode.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/WatchesRootNode.java index 204f45a4a02d..cf67f7d5fdb5 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/WatchesRootNode.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/WatchesRootNode.java @@ -21,6 +21,7 @@ import com.intellij.xdebugger.evaluation.XDebuggerEvaluator; import com.intellij.xdebugger.frame.XValue; import com.intellij.xdebugger.impl.breakpoints.XExpressionImpl; import com.intellij.xdebugger.impl.frame.WatchInplaceEditor; +import com.intellij.xdebugger.impl.frame.XDebugView; import com.intellij.xdebugger.impl.frame.XWatchesView; import com.intellij.xdebugger.impl.ui.DebuggerUIUtil; import com.intellij.xdebugger.impl.ui.tree.XDebuggerTree; @@ -37,18 +38,15 @@ import java.util.List; * @author nik */ public class WatchesRootNode extends XDebuggerTreeNode { - private final XDebugSession mySession; private final XWatchesView myWatchesView; private List<WatchNode> myChildren; private List<XDebuggerTreeNode> myLoadedChildren; private XDebuggerEvaluator myCurrentEvaluator; - public WatchesRootNode(final @NotNull XDebuggerTree tree, - @NotNull XDebugSession session, + public WatchesRootNode(@NotNull XDebuggerTree tree, @NotNull XWatchesView watchesView, @NotNull XExpression[] watchExpressions) { super(tree, null, false); - mySession = session; myWatchesView = watchesView; myChildren = new ArrayList<WatchNode>(); for (XExpression watchExpression : watchExpressions) { @@ -189,7 +187,10 @@ public class WatchesRootNode extends XDebuggerTreeNode { myChildren.set(index, messageNode); fireNodeStructureChanged(messageNode); } - new WatchInplaceEditor(this, mySession, myWatchesView, messageNode, "watch", node).show(); + XDebugSession session = XDebugView.getSession(myTree); + if (session != null) { + new WatchInplaceEditor(this, session, myWatchesView, messageNode, "watch", node).show(); + } } private class MyEvaluationCallback extends XEvaluationCallbackBase { diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XDebuggerTreeNode.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XDebuggerTreeNode.java index e01d0ad7ce79..5e3101bff21a 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XDebuggerTreeNode.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XDebuggerTreeNode.java @@ -49,8 +49,7 @@ public abstract class XDebuggerTreeNode implements TreeNode, TreeSpeedSearch.Pat @Override public TreeNode getChildAt(final int childIndex) { - if (isLeaf()) return null; - return getChildren().get(childIndex); + return isLeaf() ? null : getChildren().get(childIndex); } @Override @@ -64,7 +63,7 @@ public abstract class XDebuggerTreeNode implements TreeNode, TreeSpeedSearch.Pat } @Override - public int getIndex(final TreeNode node) { + public int getIndex(@NotNull TreeNode node) { if (isLeaf()) return -1; return getChildren().indexOf(node); } 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 b808c3ca96d8..1f3d4c77e84f 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 @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2014 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. @@ -16,14 +16,19 @@ package com.intellij.xdebugger.impl.ui.tree.nodes; import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.util.Pair; +import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.AppUIUtil; import com.intellij.ui.ColoredTextContainer; import com.intellij.ui.SimpleTextAttributes; import com.intellij.util.NotNullFunction; +import com.intellij.xdebugger.XSourcePosition; import com.intellij.xdebugger.frame.*; import com.intellij.xdebugger.frame.presentation.XValuePresentation; import com.intellij.xdebugger.impl.frame.XValueMarkers; +import com.intellij.xdebugger.impl.frame.XVariablesView; import com.intellij.xdebugger.impl.ui.DebuggerUIUtil; import com.intellij.xdebugger.impl.ui.XDebuggerUIConstants; import com.intellij.xdebugger.impl.ui.tree.ValueMarkup; @@ -35,6 +40,9 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.awt.event.MouseEvent; import java.util.Comparator; +import java.util.LinkedHashSet; +import java.util.Map; +import java.util.Set; /** * @author nik @@ -111,7 +119,28 @@ public class XValueNodeImpl extends XValueContainerNode<XValue> implements XValu setIcon(icon); myValuePresentation = valuePresentation; myRawValue = XValuePresentationUtil.computeValueText(valuePresentation); - + if (Registry.is("ide.debugger.inline")) { + try { + getValueContainer().computeSourcePosition(new XNavigatable() { + @Override + public void setSourcePosition(@Nullable XSourcePosition sourcePosition) { + Map<Pair<VirtualFile, Integer>, Set<XValueNodeImpl>> map = myTree.getProject().getUserData(XVariablesView.DEBUG_VARIABLES); + if (map == null || sourcePosition == null) return; + VirtualFile file = sourcePosition.getFile(); + int line = sourcePosition.getLine(); + Pair<VirtualFile, Integer> key = Pair.create(file, line); + Set<XValueNodeImpl> presentations = map.get(key); + if (presentations == null) { + presentations = new LinkedHashSet<XValueNodeImpl>(); + map.put(key, presentations); + } + presentations.add(XValueNodeImpl.this); + } + }); + } + catch (Exception ignore) { + } + } updateText(); setLeaf(!hasChildren); fireNodeChanged(); diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XValueTextRendererImpl.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XValueTextRendererImpl.java index e8b8616e6b69..98410cf62552 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XValueTextRendererImpl.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XValueTextRendererImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * Copyright 2000-2014 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. @@ -27,7 +27,7 @@ import org.jetbrains.annotations.Nullable; /** * @author nik */ -class XValueTextRendererImpl extends XValueTextRendererBase { +public class XValueTextRendererImpl extends XValueTextRendererBase { private final ColoredTextContainer myText; public XValueTextRendererImpl(@NotNull ColoredTextContainer text) { |