diff options
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.java | 45 |
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() { |