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 extends PsiElement> elements, String start, final String pattern) {
+ return composeText(elements, start, pattern, "");
+ }
+
+ public static String composeText(@NotNull Iterable extends PsiElement> 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;
}
}