diff options
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.java | 66 |
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); |