summaryrefslogtreecommitdiff
path: root/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XValueNodeImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XValueNodeImpl.java')
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/XValueNodeImpl.java66
1 files changed, 45 insertions, 21 deletions
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 1f3d4c77e84f..292cca541699 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
@@ -16,6 +16,8 @@
package com.intellij.xdebugger.impl.ui.tree.nodes;
import com.intellij.openapi.application.ApplicationManager;
+import com.intellij.openapi.editor.Document;
+import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.util.text.StringUtil;
@@ -24,9 +26,11 @@ import com.intellij.ui.AppUIUtil;
import com.intellij.ui.ColoredTextContainer;
import com.intellij.ui.SimpleTextAttributes;
import com.intellij.util.NotNullFunction;
+import com.intellij.xdebugger.XDebugSession;
import com.intellij.xdebugger.XSourcePosition;
import com.intellij.xdebugger.frame.*;
import com.intellij.xdebugger.frame.presentation.XValuePresentation;
+import com.intellij.xdebugger.impl.frame.XDebugView;
import com.intellij.xdebugger.impl.frame.XValueMarkers;
import com.intellij.xdebugger.impl.frame.XVariablesView;
import com.intellij.xdebugger.impl.ui.DebuggerUIUtil;
@@ -120,26 +124,7 @@ public class XValueNodeImpl extends XValueContainerNode<XValue> implements XValu
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) {
- }
+ updateInlineDebuggerData();
}
updateText();
setLeaf(!hasChildren);
@@ -147,6 +132,39 @@ public class XValueNodeImpl extends XValueContainerNode<XValue> implements XValu
myTree.nodeLoaded(this, myName);
}
+ public void updateInlineDebuggerData() {
+ try {
+ final XDebugSession session = XDebugView.getSession(getTree());
+ if (session != null) {
+ final XSourcePosition position = session.getCurrentPosition();
+ if (position != null) {
+ getValueContainer().computeSourcePosition(new XNearestSourcePosition() {
+ @Override
+ public void setSourcePosition(@Nullable XSourcePosition sourcePosition) {
+ final Map<Pair<VirtualFile, Integer>, Set<XValueNodeImpl>> map = myTree.getProject().getUserData(XVariablesView.DEBUG_VARIABLES);
+ final Map<VirtualFile, Long> timestamps = myTree.getProject().getUserData(XVariablesView.DEBUG_VARIABLES_TIMESTAMPS);
+ if (map == null || timestamps == null || sourcePosition == null) return;
+ VirtualFile file = sourcePosition.getFile();
+ final Document doc = FileDocumentManager.getInstance().getDocument(file);
+ if (doc == null) return;
+ 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);
+ timestamps.put(file, doc.getModificationStamp());
+ }
+ presentations.add(XValueNodeImpl.this);
+ }
+ });
+ }
+ }
+ }
+ catch (Exception ignore) {
+ }
+ }
+
@Override
public void setFullValueEvaluator(@NotNull final XFullValueEvaluator fullValueEvaluator) {
AppUIUtil.invokeOnEdt(new Runnable() {
@@ -179,7 +197,13 @@ public class XValueNodeImpl extends XValueContainerNode<XValue> implements XValu
}
public static void buildText(@NotNull XValuePresentation valuePresenter, @NotNull ColoredTextContainer text) {
- XValuePresentationUtil.appendSeparator(text, valuePresenter.getSeparator());
+ buildText(valuePresenter, text, true);
+ }
+
+ public static void buildText(@NotNull XValuePresentation valuePresenter, @NotNull ColoredTextContainer text, boolean appendSeparator) {
+ if (appendSeparator) {
+ XValuePresentationUtil.appendSeparator(text, valuePresenter.getSeparator());
+ }
String type = valuePresenter.getType();
if (type != null) {
text.append("{" + type + "} ", XDebuggerUIConstants.TYPE_ATTRIBUTES);