diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/JetLineMarkerProvider.java b/idea/src/org/jetbrains/jet/plugin/highlighter/JetLineMarkerProvider.java index 40e226740f2..27f41f6f6f5 100644 --- a/idea/src/org/jetbrains/jet/plugin/highlighter/JetLineMarkerProvider.java +++ b/idea/src/org/jetbrains/jet/plugin/highlighter/JetLineMarkerProvider.java @@ -66,50 +66,38 @@ public class JetLineMarkerProvider implements LineMarkerProvider { protected static final Icon OVERRIDDEN_MARK = AllIcons.Gutter.OverridenMethod; protected static final Icon IMPLEMENTED_MARK = AllIcons.Gutter.ImplementedMethod; - private static final Function SUBCLASSED_CLASS_TOOLTIP_ADAPTER = new Function() { - @Override - public String fun(@NotNull PsiElement element) { - PsiClass psiClass = getPsiClass(element); - return psiClass != null ? SUBCLASSED_CLASS.getTooltip().fun(psiClass) : null; - } - }; - - private static final GutterIconNavigationHandler SUBCLASSED_CLASS_NAVIGATION_HANDLER = new GutterIconNavigationHandler() { - @Override - public void navigate(@Nullable MouseEvent e, @Nullable PsiElement elt) { - if (elt == null) return; - PsiElement psiClass = getPsiClass(elt); - if (psiClass != null) { - SUBCLASSED_CLASS.getNavigationHandler().navigate(e, psiClass); - } - } - }; - private static final MarkerType SUBCLASSED_CLASS = new MarkerType( new NullableFunction() { @Override public String fun(@Nullable PsiElement element) { - if (!(element instanceof PsiClass)) return null; - return MarkerType.getSubclassedClassTooltip((PsiClass) element); + PsiClass psiClass = getPsiClass(element); + return psiClass != null ? MarkerType.getSubclassedClassTooltip(psiClass) : null; } }, + new LineMarkerNavigator() { @Override public void browse(@Nullable MouseEvent e, @Nullable PsiElement element) { - if (!(element instanceof PsiClass)) return; - MarkerType.navigateToSubclassedClass(e, (PsiClass) element); + PsiClass psiClass = getPsiClass(element); + if (psiClass != null) { + MarkerType.navigateToSubclassedClass(e, psiClass); + } } } ); @Nullable - private static PsiClass getPsiClass(@NotNull PsiElement element) { + private static PsiClass getPsiClass(@Nullable PsiElement element) { + if (element == null) return null; + if (element instanceof PsiClass) return (PsiClass) element; + if (!(element instanceof JetClass)) { element = element.getParent(); if (!(element instanceof JetClass)) { return null; } } + return LightClassUtil.getPsiClass((JetClass) element); } @@ -276,7 +264,7 @@ public class JetLineMarkerProvider implements LineMarkerProvider { PsiElement anchor = nameIdentifier != null ? nameIdentifier : element; Icon mark = isTrait ? IMPLEMENTED_MARK : OVERRIDDEN_MARK; result.add(new LineMarkerInfo(anchor, anchor.getTextOffset(), mark, Pass.UPDATE_OVERRIDEN_MARKERS, - SUBCLASSED_CLASS_TOOLTIP_ADAPTER, SUBCLASSED_CLASS_NAVIGATION_HANDLER)); + SUBCLASSED_CLASS.getTooltip(), SUBCLASSED_CLASS.getNavigationHandler())); } } }