From 9cafce49a568afe6a48d76e0c6f5a5e651bbc0fd Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Tue, 9 Jun 2015 14:10:28 +0300 Subject: [PATCH] tooltips with hints --- .../daemon/impl/GutterIconTooltipHelper.java | 6 ++++- .../codeInsight/daemon/impl/MarkerType.java | 24 +++++++++++++++---- .../navigation/JavaGotoSuperTest.java | 4 +++- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/GutterIconTooltipHelper.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/GutterIconTooltipHelper.java index aad7e3982b1a..de09c0840340 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/GutterIconTooltipHelper.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/GutterIconTooltipHelper.java @@ -41,6 +41,10 @@ public class GutterIconTooltipHelper { } public static String composeText(@NotNull Iterable elements, String start, final String pattern) { + return composeText(elements, start, pattern, ""); + } + + public static String composeText(@NotNull Iterable elements, String start, final String pattern, String postfix) { @NonNls StringBuilder result = new StringBuilder(); result.append(""); result.append(start); @@ -69,7 +73,7 @@ public class GutterIconTooltipHelper { sep = "
"; result.append(name); } - + result.append(postfix); result.append(""); return result.toString(); } diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/MarkerType.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/MarkerType.java index 9d9aa57af7db..6001bd4ffe21 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/MarkerType.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/MarkerType.java @@ -24,7 +24,11 @@ import com.intellij.codeInsight.daemon.DaemonBundle; import com.intellij.codeInsight.daemon.GutterIconNavigationHandler; import com.intellij.codeInsight.navigation.ListBackgroundUpdaterTask; import com.intellij.ide.util.*; +import com.intellij.openapi.actionSystem.ActionManager; +import com.intellij.openapi.actionSystem.IdeActions; +import com.intellij.openapi.actionSystem.Shortcut; import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.keymap.KeymapUtil; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.project.DumbService; @@ -37,7 +41,10 @@ import com.intellij.psi.search.searches.ClassInheritorsSearch; import com.intellij.psi.search.searches.FunctionalExpressionSearch; import com.intellij.psi.search.searches.OverridingMethodsSearch; import com.intellij.psi.util.PsiUtil; -import com.intellij.util.*; +import com.intellij.util.ArrayUtil; +import com.intellij.util.CommonProcessors; +import com.intellij.util.Function; +import com.intellij.util.NullableFunction; import gnu.trove.THashSet; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -109,7 +116,16 @@ public class MarkerType { else{ key = sameSignature ? "method.overrides" : "method.overrides.in"; } - return GutterIconTooltipHelper.composeText(superMethods, "", DaemonBundle.message(key)); + return composeText(superMethods, "", DaemonBundle.message(key), "GotoSuperMethod"); + } + + private static String composeText(PsiElement[] methods, String start, String pattern, String actionId) { + Shortcut[] shortcuts = ActionManager.getInstance().getAction(actionId).getShortcutSet().getShortcuts(); + Shortcut shortcut = ArrayUtil.getFirstElement(shortcuts); + String postfix = "
Click"; + if (shortcut != null) postfix += " or press " + KeymapUtil.getShortcutText(shortcut); + postfix += " to navigate
"; + return GutterIconTooltipHelper.composeText(Arrays.asList(methods), start, pattern, postfix); } public static void navigateToOverridingMethod(MouseEvent e, PsiMethod method, boolean acceptSelf) { @@ -182,7 +198,7 @@ public class MarkerType { String start = isAbstract ? DaemonBundle.message("method.is.implemented.header") : DaemonBundle.message("method.is.overriden.header"); @NonNls String pattern = "    {1}"; - return GutterIconTooltipHelper.composeText(overridings, start, pattern); + return composeText(overridings, start, pattern, IdeActions.ACTION_GOTO_IMPLEMENTATION); } public static void navigateToOverriddenMethod(MouseEvent e, final PsiMethod method) { @@ -274,7 +290,7 @@ public class MarkerType { ? DaemonBundle.message("interface.is.implemented.by.header") : DaemonBundle.message("class.is.subclassed.by.header"); @NonNls String pattern = "    {0}"; - return GutterIconTooltipHelper.composeText(subclasses, start, pattern); + return composeText(subclasses, start, pattern, IdeActions.ACTION_GOTO_IMPLEMENTATION); } public static void navigateToSubclassedClass(MouseEvent e, final PsiClass aClass) { diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/navigation/JavaGotoSuperTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/navigation/JavaGotoSuperTest.java index 7aff6e06c455..5adce674ae4f 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/navigation/JavaGotoSuperTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/navigation/JavaGotoSuperTest.java @@ -36,7 +36,9 @@ public class JavaGotoSuperTest extends LightDaemonAnalyzerTestCase { List markers = DaemonCodeAnalyzerImpl.getLineMarkers(document, getProject()); for (LineMarkerInfo info : markers) { if (info.endOffset >= offset && info.startOffset <= offset) { - assertEquals("Overrides method in I", info.getLineMarkerTooltip()); + assertEquals( + "Overrides method in I
Click or press Ctrl+U to navigate
", + info.getLineMarkerTooltip()); return; } }