summaryrefslogtreecommitdiff
path: root/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/XValueHint.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/XValueHint.java')
-rw-r--r--platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/XValueHint.java45
1 files changed, 44 insertions, 1 deletions
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 ca78932701d2..37b641e1042e 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
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -20,15 +20,23 @@ import com.intellij.execution.console.LanguageConsoleImpl;
import com.intellij.execution.console.LanguageConsoleView;
import com.intellij.execution.impl.ConsoleViewImpl;
import com.intellij.execution.ui.ConsoleView;
+import com.intellij.openapi.Disposable;
+import com.intellij.openapi.actionSystem.ActionManager;
+import com.intellij.openapi.actionSystem.AnActionEvent;
+import com.intellij.openapi.actionSystem.ShortcutSet;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.fileEditor.FileDocumentManager;
+import com.intellij.openapi.keymap.KeymapUtil;
+import com.intellij.openapi.project.DumbAwareAction;
import com.intellij.openapi.project.Project;
+import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.vcs.changes.issueLinks.LinkMouseListenerBase;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.ui.SimpleColoredComponent;
import com.intellij.ui.SimpleColoredText;
+import com.intellij.ui.SimpleTextAttributes;
import com.intellij.util.Consumer;
import com.intellij.xdebugger.XDebugSession;
import com.intellij.xdebugger.XDebuggerUtil;
@@ -68,6 +76,8 @@ public class XValueHint extends AbstractValueHint {
private final String myExpression;
private final String myValueName;
private final @Nullable XSourcePosition myExpressionPosition;
+ private final ExpressionInfo myExpressionInfo;
+ private Disposable myDisposable;
public XValueHint(@NotNull Project project, @NotNull Editor editor, @NotNull Point point, @NotNull ValueHintType type,
@NotNull ExpressionInfo expressionInfo, @NotNull XDebuggerEvaluator evaluator,
@@ -78,6 +88,7 @@ public class XValueHint extends AbstractValueHint {
myDebugSession = session;
myExpression = XDebuggerEvaluateActionHandler.getExpressionText(expressionInfo, editor.getDocument());
myValueName = XDebuggerEvaluateActionHandler.getDisplayText(expressionInfo, editor.getDocument());
+ myExpressionInfo = expressionInfo;
VirtualFile file;
ConsoleView consoleView = ConsoleViewImpl.CONSOLE_VIEW_IN_EDITOR_VIEW.get(editor);
@@ -98,6 +109,33 @@ public class XValueHint extends AbstractValueHint {
}
@Override
+ protected boolean showHint(final JComponent component) {
+ boolean result = super.showHint(component);
+ if (result && getType() == ValueHintType.MOUSE_OVER_HINT) {
+ myDisposable = Disposer.newDisposable();
+ ShortcutSet shortcut = ActionManager.getInstance().getAction("ShowErrorDescription").getShortcutSet();
+ new DumbAwareAction() {
+ @Override
+ public void actionPerformed(@NotNull AnActionEvent e) {
+ hideHint();
+ final Point point = new Point(myPoint.x, myPoint.y + getEditor().getLineHeight());
+ new XValueHint(getProject(), getEditor(), point, ValueHintType.MOUSE_CLICK_HINT, myExpressionInfo, myEvaluator, myDebugSession).invokeHint();
+ }
+ }.registerCustomShortcutSet(shortcut, getEditor().getContentComponent(), myDisposable);
+ }
+ return result;
+ }
+
+ @Override
+ public void hideHint() {
+ super.hideHint();
+ if (myDisposable != null) {
+ Disposer.dispose(myDisposable);
+
+ }
+ }
+
+ @Override
protected void evaluateAndShowHint() {
myEvaluator.evaluate(myExpression, new XEvaluationCallbackBase() {
@Override
@@ -136,6 +174,11 @@ public class XValueHint extends AbstractValueHint {
showTree(result);
}
else {
+ if (getType() == ValueHintType.MOUSE_OVER_HINT) {
+ text.insert(0, "(" + KeymapUtil.getFirstKeyboardShortcutText("ShowErrorDescription") + ") ",
+ SimpleTextAttributes.GRAYED_ATTRIBUTES);
+ }
+
JComponent component = createExpandableHintComponent(text, new Runnable() {
@Override
public void run() {