Refactoring: move tooltip provider and navigator from MarkerType

This commit is contained in:
Nikolay Krasko
2013-04-30 21:51:32 +04:00
parent 0e95581bca
commit fe124a9828
@@ -66,50 +66,38 @@ public class JetLineMarkerProvider implements LineMarkerProvider {
protected static final Icon OVERRIDDEN_MARK = AllIcons.Gutter.OverridenMethod; protected static final Icon OVERRIDDEN_MARK = AllIcons.Gutter.OverridenMethod;
protected static final Icon IMPLEMENTED_MARK = AllIcons.Gutter.ImplementedMethod; protected static final Icon IMPLEMENTED_MARK = AllIcons.Gutter.ImplementedMethod;
private static final Function<PsiElement, String> SUBCLASSED_CLASS_TOOLTIP_ADAPTER = new Function<PsiElement, String>() {
@Override
public String fun(@NotNull PsiElement element) {
PsiClass psiClass = getPsiClass(element);
return psiClass != null ? SUBCLASSED_CLASS.getTooltip().fun(psiClass) : null;
}
};
private static final GutterIconNavigationHandler<PsiElement> SUBCLASSED_CLASS_NAVIGATION_HANDLER = new GutterIconNavigationHandler<PsiElement>() {
@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( private static final MarkerType SUBCLASSED_CLASS = new MarkerType(
new NullableFunction<PsiElement, String>() { new NullableFunction<PsiElement, String>() {
@Override @Override
public String fun(@Nullable PsiElement element) { public String fun(@Nullable PsiElement element) {
if (!(element instanceof PsiClass)) return null; PsiClass psiClass = getPsiClass(element);
return MarkerType.getSubclassedClassTooltip((PsiClass) element); return psiClass != null ? MarkerType.getSubclassedClassTooltip(psiClass) : null;
} }
}, },
new LineMarkerNavigator() { new LineMarkerNavigator() {
@Override @Override
public void browse(@Nullable MouseEvent e, @Nullable PsiElement element) { public void browse(@Nullable MouseEvent e, @Nullable PsiElement element) {
if (!(element instanceof PsiClass)) return; PsiClass psiClass = getPsiClass(element);
MarkerType.navigateToSubclassedClass(e, (PsiClass) element); if (psiClass != null) {
MarkerType.navigateToSubclassedClass(e, psiClass);
}
} }
} }
); );
@Nullable @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)) { if (!(element instanceof JetClass)) {
element = element.getParent(); element = element.getParent();
if (!(element instanceof JetClass)) { if (!(element instanceof JetClass)) {
return null; return null;
} }
} }
return LightClassUtil.getPsiClass((JetClass) element); return LightClassUtil.getPsiClass((JetClass) element);
} }
@@ -276,7 +264,7 @@ public class JetLineMarkerProvider implements LineMarkerProvider {
PsiElement anchor = nameIdentifier != null ? nameIdentifier : element; PsiElement anchor = nameIdentifier != null ? nameIdentifier : element;
Icon mark = isTrait ? IMPLEMENTED_MARK : OVERRIDDEN_MARK; Icon mark = isTrait ? IMPLEMENTED_MARK : OVERRIDDEN_MARK;
result.add(new LineMarkerInfo<PsiElement>(anchor, anchor.getTextOffset(), mark, Pass.UPDATE_OVERRIDEN_MARKERS, result.add(new LineMarkerInfo<PsiElement>(anchor, anchor.getTextOffset(), mark, Pass.UPDATE_OVERRIDEN_MARKERS,
SUBCLASSED_CLASS_TOOLTIP_ADAPTER, SUBCLASSED_CLASS_NAVIGATION_HANDLER)); SUBCLASSED_CLASS.getTooltip(), SUBCLASSED_CLASS.getNavigationHandler()));
} }
} }
} }