1 package com
.intellij
.ide
.hierarchy
.call
;
3 import com
.intellij
.ide
.hierarchy
.CallHierarchyBrowserBase
;
4 import com
.intellij
.ide
.hierarchy
.HierarchyNodeDescriptor
;
5 import com
.intellij
.ide
.hierarchy
.HierarchyTreeStructure
;
6 import com
.intellij
.ide
.hierarchy
.JavaHierarchyUtil
;
7 import com
.intellij
.ide
.util
.treeView
.NodeDescriptor
;
8 import com
.intellij
.openapi
.actionSystem
.ActionGroup
;
9 import com
.intellij
.openapi
.actionSystem
.ActionManager
;
10 import com
.intellij
.openapi
.actionSystem
.ActionPlaces
;
11 import com
.intellij
.openapi
.actionSystem
.IdeActions
;
12 import com
.intellij
.openapi
.diagnostic
.Logger
;
13 import com
.intellij
.openapi
.project
.Project
;
14 import com
.intellij
.psi
.PsiElement
;
15 import com
.intellij
.psi
.PsiMethod
;
16 import com
.intellij
.ui
.PopupHandler
;
17 import org
.jetbrains
.annotations
.NotNull
;
20 import javax
.swing
.tree
.DefaultMutableTreeNode
;
21 import java
.util
.Comparator
;
24 public final class CallHierarchyBrowser
extends CallHierarchyBrowserBase
{
26 private static final Logger LOG
= Logger
.getInstance("#com.intellij.ide.hierarchy.call.CallHierarchyBrowser");
28 public CallHierarchyBrowser(final Project project
, final PsiMethod method
) {
29 super(project
, method
);
32 protected void createTrees(@NotNull final Map
<String
, JTree
> type2TreeMap
) {
33 ActionGroup group
= (ActionGroup
)ActionManager
.getInstance().getAction(IdeActions
.GROUP_CALL_HIERARCHY_POPUP
);
34 final JTree tree1
= createTree(false);
35 PopupHandler
.installPopupHandler(tree1
, group
, ActionPlaces
.CALL_HIERARCHY_VIEW_POPUP
, ActionManager
.getInstance());
36 final BaseOnThisMethodAction baseOnThisMethodAction
= new BaseOnThisMethodAction();
37 baseOnThisMethodAction
38 .registerCustomShortcutSet(ActionManager
.getInstance().getAction(IdeActions
.ACTION_CALL_HIERARCHY
).getShortcutSet(), tree1
);
39 type2TreeMap
.put(CALLEE_TYPE
, tree1
);
41 final JTree tree2
= createTree(false);
42 PopupHandler
.installPopupHandler(tree2
, group
, ActionPlaces
.CALL_HIERARCHY_VIEW_POPUP
, ActionManager
.getInstance());
43 baseOnThisMethodAction
44 .registerCustomShortcutSet(ActionManager
.getInstance().getAction(IdeActions
.ACTION_CALL_HIERARCHY
).getShortcutSet(), tree2
);
45 type2TreeMap
.put(CALLER_TYPE
, tree2
);
48 protected PsiElement
getElementFromDescriptor(@NotNull HierarchyNodeDescriptor descriptor
) {
49 if (descriptor
instanceof CallHierarchyNodeDescriptor
) {
50 CallHierarchyNodeDescriptor nodeDescriptor
= (CallHierarchyNodeDescriptor
)descriptor
;
51 return nodeDescriptor
.getEnclosingElement();
57 protected PsiElement
getOpenFileElementFromDescriptor(@NotNull HierarchyNodeDescriptor descriptor
) {
58 if (descriptor
instanceof CallHierarchyNodeDescriptor
) {
59 CallHierarchyNodeDescriptor nodeDescriptor
= (CallHierarchyNodeDescriptor
)descriptor
;
60 return nodeDescriptor
.getTargetElement();
65 protected PsiElement
getEnclosingElementFromNode(final DefaultMutableTreeNode node
) {
66 if (node
== null) return null;
67 final Object userObject
= node
.getUserObject();
68 if (!(userObject
instanceof CallHierarchyNodeDescriptor
)) return null;
69 return ((CallHierarchyNodeDescriptor
)userObject
).getEnclosingElement();
72 protected boolean isApplicableElement(@NotNull final PsiElement element
) {
73 return element
instanceof PsiMethod
;
76 protected HierarchyTreeStructure
createHierarchyTreeStructure(@NotNull final String typeName
, @NotNull final PsiElement psiElement
) {
77 if (CALLER_TYPE
.equals(typeName
)) {
78 return new CallerMethodsTreeStructure(myProject
, (PsiMethod
)psiElement
, getCurrentScopeType());
80 else if (CALLEE_TYPE
.equals(typeName
)) {
81 return new CalleeMethodsTreeStructure(myProject
, (PsiMethod
)psiElement
, getCurrentScopeType());
84 LOG
.error("unexpected type: " + typeName
);
89 protected Comparator
<NodeDescriptor
> getComparator() {
90 return JavaHierarchyUtil
.getComparator(myProject
);
93 public static final class BaseOnThisMethodAction
extends CallHierarchyBrowserBase
.BaseOnThisMethodAction
{