package com.jetbrains.lang.dart.ide.hierarchy.method;
import com.intellij.ide.hierarchy.HierarchyBrowser;
import com.intellij.ide.hierarchy.HierarchyProvider;
import com.intellij.ide.hierarchy.MethodHierarchyBrowserBase;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.psi.PsiElement;
import com.intellij.psi.util.PsiTreeUtil;
import com.jetbrains.lang.dart.ide.hierarchy.DartHierarchyUtil;
import com.jetbrains.lang.dart.psi.DartClass;
import com.jetbrains.lang.dart.psi.DartGetterDeclaration;
import com.jetbrains.lang.dart.psi.DartMethodDeclaration;
import com.jetbrains.lang.dart.psi.DartSetterDeclaration;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class DartMethodHierarchyProvider implements HierarchyProvider {
@Nullable
@Override
public PsiElement getTarget(@NotNull DataContext dataContext) {
PsiElement element = DartHierarchyUtil.getResolvedElementAtCursor(dataContext);
if ((element instanceof DartMethodDeclaration ||
element instanceof DartGetterDeclaration ||
element instanceof DartSetterDeclaration) &&
PsiTreeUtil.getParentOfType(element, DartClass.class) != null) {
return element;
}
return null;
}
@NotNull
@Override
public HierarchyBrowser createHierarchyBrowser(PsiElement target) {
return new DartMethodHierarchyBrowser(target.getProject(), target);
}
@Override
public void browserActivated(@NotNull HierarchyBrowser hierarchyBrowser) {
((DartMethodHierarchyBrowser)hierarchyBrowser).changeView(MethodHierarchyBrowserBase.METHOD_TYPE);
}
}