summaryrefslogtreecommitdiff
path: root/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XVariablesViewBase.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XVariablesViewBase.java')
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XVariablesViewBase.java119
1 files changed, 52 insertions, 67 deletions
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XVariablesViewBase.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XVariablesViewBase.java
index d4bd27c30d9b..4bfcfa58855f 100644
--- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XVariablesViewBase.java
+++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XVariablesViewBase.java
@@ -15,34 +15,34 @@
*/
package com.intellij.xdebugger.impl.frame;
-import com.intellij.codeInsight.hint.HintManager;
-import com.intellij.codeInsight.hint.HintUtil;
import com.intellij.ide.dnd.DnDManager;
-import com.intellij.openapi.Disposable;
+import com.intellij.openapi.application.AccessToken;
+import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.editor.Editor;
+import com.intellij.openapi.editor.LogicalPosition;
import com.intellij.openapi.editor.event.SelectionEvent;
import com.intellij.openapi.editor.event.SelectionListener;
+import com.intellij.openapi.editor.impl.SelectionModelImpl;
import com.intellij.openapi.fileEditor.FileEditor;
import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx;
import com.intellij.openapi.fileEditor.impl.text.PsiAwareTextEditorImpl;
import com.intellij.openapi.project.Project;
-import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.Pair;
+import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.ui.SimpleColoredComponent;
-import com.intellij.ui.SimpleColoredText;
+import com.intellij.xdebugger.XDebugSession;
import com.intellij.xdebugger.XDebuggerBundle;
import com.intellij.xdebugger.XSourcePosition;
+import com.intellij.xdebugger.evaluation.ExpressionInfo;
import com.intellij.xdebugger.evaluation.XDebuggerEditorsProvider;
import com.intellij.xdebugger.evaluation.XDebuggerEvaluator;
-import com.intellij.xdebugger.frame.XFullValueEvaluator;
import com.intellij.xdebugger.frame.XStackFrame;
import com.intellij.xdebugger.frame.XValue;
-import com.intellij.xdebugger.frame.XValuePlace;
-import com.intellij.xdebugger.frame.presentation.XValuePresentation;
import com.intellij.xdebugger.impl.actions.XDebuggerActions;
+import com.intellij.xdebugger.impl.evaluate.quick.XValueHint;
+import com.intellij.xdebugger.impl.evaluate.quick.common.ValueHintType;
import com.intellij.xdebugger.impl.ui.tree.XDebuggerTree;
import com.intellij.xdebugger.impl.ui.tree.XDebuggerTreePanel;
import com.intellij.xdebugger.impl.ui.tree.XDebuggerTreeRestorer;
@@ -50,11 +50,11 @@ import com.intellij.xdebugger.impl.ui.tree.XDebuggerTreeState;
import com.intellij.xdebugger.impl.ui.tree.nodes.XEvaluationCallbackBase;
import com.intellij.xdebugger.impl.ui.tree.nodes.XStackFrameNode;
import com.intellij.xdebugger.impl.ui.tree.nodes.XValueNodeImpl;
-import com.intellij.xdebugger.impl.ui.tree.nodes.XValueNodePresentationConfigurator;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
+import java.awt.*;
import java.util.HashMap;
import java.util.Set;
@@ -88,68 +88,53 @@ public abstract class XVariablesViewBase extends XDebugView {
myTreeRestorer = myTreeState.restoreState(tree);
}
if (position != null && Registry.is("ide.debugger.inline")) {
- final VirtualFile file = position.getFile();
- final FileEditor fileEditor = FileEditorManagerEx.getInstanceEx(project).getSelectedEditor(file);
- if (fileEditor instanceof PsiAwareTextEditorImpl) {
- final Editor editor = ((PsiAwareTextEditorImpl)fileEditor).getEditor();
- final SelectionListener listener = new SelectionListener() {
- @Override
- public void selectionChanged(SelectionEvent e) {
- final String text = editor.getDocument().getText(e.getNewRange());
- final XDebuggerEvaluator evaluator = stackFrame.getEvaluator();
- if (evaluator != null && !StringUtil.isEmpty(text)
- && !(text.contains("exec(") || text.contains("++") || text.contains("--") || text.contains("="))) {
- evaluator.evaluate(text, new XEvaluationCallbackBase() {
- @Override
- public void evaluated(@NotNull XValue result) {
- result.computePresentation(new XValueNodePresentationConfigurator.ConfigurableXValueNodeImpl() {
- @Override
- public void applyPresentation(@Nullable Icon icon,
- @NotNull XValuePresentation valuePresenter,
- boolean hasChildren) {
- SimpleColoredText text = new SimpleColoredText();
- XValueNodeImpl.buildText(valuePresenter, text, false);
- SimpleColoredComponent component = HintUtil.createInformationComponent();
- text.appendToComponent(component);
- String str = text.toString();
- if ("undefined".equals(str) || str.startsWith("Cannot find local variable")
- || str.startsWith("Invalid expression")) {
- return; //todo[kb] this is temporary solution
- }
- HintManager.getInstance().hideAllHints();
- HintManager.getInstance().showInformationHint(editor, component);
- }
+ registerInlineEvaluator(stackFrame, tree, position, project);
+ }
+ }
- @Override
- public void setFullValueEvaluator(@NotNull XFullValueEvaluator fullValueEvaluator) {
- }
+ private void registerInlineEvaluator(final XStackFrame stackFrame,
+ XDebuggerTree tree,
+ final XSourcePosition position,
+ final Project project) {
+ final VirtualFile file = position.getFile();
+ final FileEditor fileEditor = FileEditorManagerEx.getInstanceEx(project).getSelectedEditor(file);
+ if (fileEditor instanceof PsiAwareTextEditorImpl) {
+ final Editor editor = ((PsiAwareTextEditorImpl)fileEditor).getEditor();
+ final SelectionListener listener = new SelectionListener() {
+ @Override
+ public void selectionChanged(final SelectionEvent e) {
+ final String text = editor.getDocument().getText(e.getNewRange());
+ final XDebuggerEvaluator evaluator = stackFrame.getEvaluator();
+ if (evaluator != null && !StringUtil.isEmpty(text)
+ && !(text.contains("exec(") || text.contains("++") || text.contains("--") || text.contains("="))) {
+ evaluator.evaluate(text, new XEvaluationCallbackBase() {
+ @Override
+ public void evaluated(@NotNull XValue result) {
+ final AccessToken token = ApplicationManager.getApplication().acquireReadActionLock();
+ try {
+ final XDebugSession session = getSession(getTree());
+ if (session == null) return;
+ final TextRange range = e.getNewRange();
+ final ExpressionInfo info = new ExpressionInfo(range);
+ final int offset = range.getStartOffset();
+ final LogicalPosition pos = editor.offsetToLogicalPosition(offset);
+ final Point point = editor.logicalPositionToXY(pos);
- @Override
- public boolean isObsolete() {
- return true;
- }
- }, XValuePlace.TOOLTIP);
+ new XValueHint(project, editor, point, ValueHintType.MOUSE_OVER_HINT, info, evaluator, session).invokeHint();
}
-
- @Override
- public void errorOccurred(@NotNull String errorMessage) {
- System.out.println(errorMessage);
+ finally {
+ token.finish();
}
- }, position);
- }
- }
- };
- editor.getSelectionModel().addSelectionListener(listener);
- Disposer.register(tree, new Disposable() {
- @Override
- public void dispose() {
- final FileEditor fileEditor = FileEditorManagerEx.getInstanceEx(project).getSelectedEditor(file);
- if (fileEditor instanceof PsiAwareTextEditorImpl) {
- ((PsiAwareTextEditorImpl)fileEditor).getEditor().getSelectionModel().removeSelectionListener(listener);
- }
+ }
+
+ @Override
+ public void errorOccurred(@NotNull String errorMessage) {
+ }
+ }, position);
}
- });
- }
+ }
+ };
+ ((SelectionModelImpl)editor.getSelectionModel()).addSelectionListener(listener, tree);
}
}