From 86f51b59f63b5276036902c1d2fbafbeca70e41c Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Fri, 29 Aug 2014 15:53:57 +0200 Subject: [PATCH] support nearest position calculation --- .../impl/ui/tree/nodes/XValueNodeImpl.java | 46 +++++++++++-------- 1 file changed, 27 insertions(+), 19 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 b4aaa08a8364..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 @@ -26,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; @@ -132,26 +134,32 @@ public class XValueNodeImpl extends XValueContainerNode implements XValu public void updateInlineDebuggerData() { try { - getValueContainer().computeSourcePosition(new XNavigatable() { - @Override - public void setSourcePosition(@Nullable XSourcePosition sourcePosition) { - final Map, Set> map = myTree.getProject().getUserData(XVariablesView.DEBUG_VARIABLES); - final Map 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 key = Pair.create(file, line); - Set presentations = map.get(key); - if (presentations == null) { - presentations = new LinkedHashSet(); - map.put(key, presentations); - timestamps.put(file, doc.getModificationStamp()); - } - presentations.add(XValueNodeImpl.this); + 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, Set> map = myTree.getProject().getUserData(XVariablesView.DEBUG_VARIABLES); + final Map 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 key = Pair.create(file, line); + Set presentations = map.get(key); + if (presentations == null) { + presentations = new LinkedHashSet(); + map.put(key, presentations); + timestamps.put(file, doc.getModificationStamp()); + } + presentations.add(XValueNodeImpl.this); + } + }); } - }); + } } catch (Exception ignore) { }