aboutsummaryrefslogtreecommitdiffstats
path: root/sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallHierarchyBrowser.java
diff options
context:
space:
mode:
Diffstat (limited to 'sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallHierarchyBrowser.java')
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallHierarchyBrowser.java76
1 files changed, 76 insertions, 0 deletions
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallHierarchyBrowser.java b/sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallHierarchyBrowser.java
new file mode 100644
index 00000000000..5960f1241c3
--- /dev/null
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/hierarchy/SdCallHierarchyBrowser.java
@@ -0,0 +1,76 @@
+package org.intellij.sdk.language.hierarchy;
+
+import com.intellij.ide.hierarchy.CallHierarchyBrowserBase;
+import com.intellij.ide.hierarchy.HierarchyNodeDescriptor;
+import com.intellij.ide.hierarchy.HierarchyTreeStructure;
+import com.intellij.ide.util.treeView.NodeDescriptor;
+import com.intellij.openapi.actionSystem.ActionGroup;
+import com.intellij.openapi.actionSystem.ActionManager;
+import com.intellij.openapi.actionSystem.ActionPlaces;
+import com.intellij.openapi.actionSystem.IdeActions;
+import com.intellij.openapi.project.Project;
+import com.intellij.psi.PsiElement;
+import com.intellij.ui.PopupHandler;
+import com.intellij.util.ObjectUtils;
+import org.intellij.sdk.language.psi.SdFunctionDefinition;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.Comparator;
+import java.util.Map;
+
+import javax.swing.JTree;
+
+public class SdCallHierarchyBrowser extends CallHierarchyBrowserBase {
+
+ public SdCallHierarchyBrowser(@NotNull Project project,
+ @NotNull PsiElement macro) {
+ super(project, macro);
+ }
+
+ @Nullable
+ @Override
+ protected PsiElement getElementFromDescriptor(@NotNull HierarchyNodeDescriptor descriptor) {
+ return ObjectUtils.tryCast(descriptor.getPsiElement(), PsiElement.class);
+ }
+
+ @Override
+ protected void createTrees(@NotNull Map<? super String, ? super JTree> type2TreeMap) {
+ ActionGroup group = (ActionGroup) ActionManager.getInstance().getAction(IdeActions.GROUP_CALL_HIERARCHY_POPUP);
+ type2TreeMap.put(getCallerType(), createHierarchyTree(group));
+ type2TreeMap.put(getCalleeType(), createHierarchyTree(group));
+ }
+
+ private JTree createHierarchyTree(ActionGroup group) {
+ final JTree tree = createTree(false);
+ PopupHandler.installPopupMenu(tree, group, ActionPlaces.CALL_HIERARCHY_VIEW_POPUP);
+ return tree;
+ }
+
+ @Override
+ protected boolean isApplicableElement(@NotNull PsiElement element) {
+ return element instanceof SdFunctionDefinition;
+ }
+
+
+ @Nullable
+ @Override
+ protected HierarchyTreeStructure createHierarchyTreeStructure(@NotNull String typeName, @NotNull PsiElement psiElement) {
+ if (getCallerType().equals(typeName)) {
+ return new SdCallerTreeStructure(myProject, psiElement, getCurrentScopeType());
+ }
+ else if (getCalleeType().equals(typeName)) {
+ return new SdCalleeTreeStructure(myProject, psiElement, getCurrentScopeType());
+ }
+ else {
+ return null;
+ }
+ }
+
+ @Nullable
+ @Override
+ protected Comparator<NodeDescriptor<?>> getComparator() {
+ return SdHierarchyUtil.getComparator(myProject);
+ }
+
+}