From 3f73c21123f54d7e11c935344b109cf1720b0e22 Mon Sep 17 00:00:00 2001 From: nik Date: Tue, 26 Jan 2010 14:01:43 +0300 Subject: [PATCH] xdebugger api: position passed to 'evaluate' method when showing value tooltip in editor --- .../intellij/xdebugger/evaluation/XDebuggerEvaluator.java | 11 ++++++++++- .../xdebugger/impl/evaluate/XDebuggerEvaluationDialog.java | 2 +- .../intellij/xdebugger/impl/evaluate/quick/XValueHint.java | 13 +++++++++++-- .../xdebugger/impl/ui/tree/nodes/WatchesRootNode.java | 4 ++-- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/platform/xdebugger-api/src/com/intellij/xdebugger/evaluation/XDebuggerEvaluator.java b/platform/xdebugger-api/src/com/intellij/xdebugger/evaluation/XDebuggerEvaluator.java index fe609b5e5b..3e5857bbce 100644 --- a/platform/xdebugger-api/src/com/intellij/xdebugger/evaluation/XDebuggerEvaluator.java +++ b/platform/xdebugger-api/src/com/intellij/xdebugger/evaluation/XDebuggerEvaluator.java @@ -64,7 +64,16 @@ public abstract class XDebuggerEvaluator { * @param expression expression to evaluate * @param callback used to notify that the expression has been evaluated or an error occurs */ - public abstract void evaluate(@NotNull String expression, XEvaluationCallback callback); + public void evaluate(@NotNull String expression, XEvaluationCallback callback, @Nullable XSourcePosition expressionPosition) { + evaluate(expression, callback); + } + + /** + * @deprecated override {@link XDebuggerEvaluator#evaluate(String, XEvaluationCallback, com.intellij.xdebugger.XSourcePosition)} instead + */ + @Deprecated + public void evaluate(@NotNull String expression, XEvaluationCallback callback) { + } /** * Return text range of expression which can be evaluated. diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/XDebuggerEvaluationDialog.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/XDebuggerEvaluationDialog.java index 8c22c26ae6..936e382979 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/XDebuggerEvaluationDialog.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/XDebuggerEvaluationDialog.java @@ -166,7 +166,7 @@ public class XDebuggerEvaluationDialog extends DialogWrapper { final XDebuggerEditorBase inputEditor = myInputComponent.getInputEditor(); inputEditor.saveTextInHistory(); String expression = inputEditor.getText(); - myEvaluator.evaluate(expression, evaluationCallback); + myEvaluator.evaluate(expression, evaluationCallback, null); } public JComponent getPreferredFocusedComponent() { diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/XValueHint.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/XValueHint.java index e22df1a65f..f77c5374b6 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/XValueHint.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/XValueHint.java @@ -17,13 +17,18 @@ package com.intellij.xdebugger.impl.evaluate.quick; import com.intellij.codeInsight.hint.HintUtil; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.TextRange; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.SimpleColoredText; import com.intellij.ui.SimpleTextAttributes; import com.intellij.xdebugger.XDebugSession; +import com.intellij.xdebugger.XDebuggerUtil; +import com.intellij.xdebugger.XSourcePosition; import com.intellij.xdebugger.evaluation.XDebuggerEvaluator; import com.intellij.xdebugger.frame.XValue; import com.intellij.xdebugger.frame.XValueNode; @@ -48,13 +53,17 @@ public class XValueHint extends AbstractValueHint { private final XDebuggerEvaluator myEvaluator; private final XDebugSession myDebugSession; private final String myExpression; + private final @Nullable XSourcePosition myExpressionPosition; public XValueHint(final Project project, final Editor editor, final Point point, final ValueHintType type, final TextRange textRange, final XDebuggerEvaluator evaluator, final XDebugSession session) { super(project, editor, point, type, textRange); myEvaluator = evaluator; myDebugSession = session; - myExpression = textRange.substring(editor.getDocument().getText()); + final Document document = editor.getDocument(); + myExpression = textRange.substring(document.getText()); + final VirtualFile file = FileDocumentManager.getInstance().getFile(document); + myExpressionPosition = file != null ? XDebuggerUtil.getInstance().createPositionByOffset(file, textRange.getStartOffset()) : null; } @@ -91,7 +100,7 @@ public class XValueHint extends AbstractValueHint { public void errorOccurred(@NotNull final String errorMessage) { LOG.debug("Cannot evaluate '" + myExpression + "':" + errorMessage); } - }); + }, myExpressionPosition); } private void doShowHint(final XValue xValue, final String name, final String separator, final String value, final boolean hasChildren) { 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 c61c5d30e6..2ca705576c 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 @@ -53,7 +53,7 @@ public class WatchesRootNode extends XDebuggerTreeNode { final String expression = child.getExpression(); final WatchMessageNode evaluatingNode = WatchMessageNode.createEvaluatingNode(myTree, this, expression); newChildren.add(evaluatingNode); - evaluator.evaluate(expression, new MyEvaluationCallback(evaluatingNode)); + evaluator.evaluate(expression, new MyEvaluationCallback(evaluatingNode), null); } } else { @@ -119,7 +119,7 @@ public class WatchesRootNode extends XDebuggerTreeNode { else { myChildren.add(index, message); } - evaluator.evaluate(expression, new MyEvaluationCallback(message)); + evaluator.evaluate(expression, new MyEvaluationCallback(message), null); fireNodeChildrenChanged(); } -- 2.11.4.GIT