mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-26 19:06:24 +07:00
scopes: Production, Tests, All available for subtypes hierarchy
This commit is contained in:
@@ -32,7 +32,6 @@ import com.intellij.ui.PopupHandler;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.tree.DefaultMutableTreeNode;
|
||||
import java.util.Comparator;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -77,13 +76,6 @@ public final class CallHierarchyBrowser extends CallHierarchyBrowserBase {
|
||||
return null;
|
||||
}
|
||||
|
||||
protected PsiElement getEnclosingElementFromNode(final DefaultMutableTreeNode node) {
|
||||
if (node == null) return null;
|
||||
final Object userObject = node.getUserObject();
|
||||
if (!(userObject instanceof CallHierarchyNodeDescriptor)) return null;
|
||||
return ((CallHierarchyNodeDescriptor)userObject).getEnclosingElement();
|
||||
}
|
||||
|
||||
protected boolean isApplicableElement(@NotNull final PsiElement element) {
|
||||
return element instanceof PsiMethod;
|
||||
}
|
||||
|
||||
@@ -19,8 +19,6 @@ import com.intellij.ide.hierarchy.HierarchyNodeDescriptor;
|
||||
import com.intellij.ide.hierarchy.HierarchyTreeStructure;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.search.LocalSearchScope;
|
||||
import com.intellij.psi.search.SearchScope;
|
||||
import com.intellij.psi.search.searches.MethodReferencesSearch;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
@@ -51,19 +49,8 @@ public final class CallerMethodsTreeStructure extends HierarchyTreeStructure {
|
||||
return ArrayUtil.EMPTY_OBJECT_ARRAY;
|
||||
}
|
||||
final PsiMethod method = (PsiMethod)enclosingElement;
|
||||
|
||||
SearchScope searchScope = GlobalSearchScope.allScope(myProject);
|
||||
if (CallHierarchyBrowser.SCOPE_CLASS.equals(myScopeType)) {
|
||||
final PsiMethod baseMethod = (PsiMethod)((CallHierarchyNodeDescriptor)getBaseDescriptor()).getTargetElement();
|
||||
final PsiClass containingClass = baseMethod.getContainingClass();
|
||||
searchScope = new LocalSearchScope(containingClass);
|
||||
}
|
||||
else if (CallHierarchyBrowser.SCOPE_PROJECT.equals(myScopeType)) {
|
||||
searchScope = GlobalSearchScope.projectProductionScope(myProject);
|
||||
}
|
||||
else if (CallHierarchyBrowser.SCOPE_TEST.equals(myScopeType)) {
|
||||
searchScope = GlobalSearchScope.projectTestScope(myProject);
|
||||
}
|
||||
final PsiMethod baseMethod = (PsiMethod)((CallHierarchyNodeDescriptor)getBaseDescriptor()).getTargetElement();
|
||||
final SearchScope searchScope = getSearchScope(myScopeType, baseMethod.getContainingClass());
|
||||
|
||||
final PsiClass originalClass = method.getContainingClass();
|
||||
assert originalClass != null;
|
||||
|
||||
+6
-3
@@ -29,13 +29,16 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class SubtypesHierarchyTreeStructure extends HierarchyTreeStructure {
|
||||
private final String myCurrentScopeType;
|
||||
|
||||
protected SubtypesHierarchyTreeStructure(final Project project, final HierarchyNodeDescriptor descriptor) {
|
||||
protected SubtypesHierarchyTreeStructure(final Project project, final HierarchyNodeDescriptor descriptor, String currentScopeType) {
|
||||
super(project, descriptor);
|
||||
myCurrentScopeType = currentScopeType;
|
||||
}
|
||||
|
||||
public SubtypesHierarchyTreeStructure(final Project project, final PsiClass psiClass) {
|
||||
public SubtypesHierarchyTreeStructure(Project project, PsiClass psiClass, String currentScopeType) {
|
||||
super(project, new TypeHierarchyNodeDescriptor(project, null, psiClass, true));
|
||||
myCurrentScopeType = currentScopeType;
|
||||
}
|
||||
|
||||
protected final Object[] buildChildren(final HierarchyNodeDescriptor descriptor) {
|
||||
@@ -45,7 +48,7 @@ public class SubtypesHierarchyTreeStructure extends HierarchyTreeStructure {
|
||||
}
|
||||
if (psiClass instanceof PsiAnonymousClass) return ArrayUtil.EMPTY_OBJECT_ARRAY;
|
||||
if (psiClass.hasModifierProperty(PsiModifier.FINAL)) return ArrayUtil.EMPTY_OBJECT_ARRAY;
|
||||
final List<PsiClass> classes = new ArrayList<PsiClass>(ClassInheritorsSearch.search(psiClass, psiClass.getUseScope(), false).findAll());
|
||||
final List<PsiClass> classes = new ArrayList<PsiClass>(ClassInheritorsSearch.search(psiClass, psiClass.getUseScope().intersectWith(getSearchScope(myCurrentScopeType, psiClass)), false).findAll());
|
||||
final HierarchyNodeDescriptor[] descriptors = new HierarchyNodeDescriptor[classes.size()];
|
||||
for (int i = 0; i < classes.size(); i++) {
|
||||
descriptors[i] = new TypeHierarchyNodeDescriptor(myProject, descriptor, classes.get(i), false);
|
||||
|
||||
@@ -20,12 +20,10 @@ import com.intellij.ide.hierarchy.HierarchyTreeStructure;
|
||||
import com.intellij.ide.hierarchy.JavaHierarchyUtil;
|
||||
import com.intellij.ide.hierarchy.TypeHierarchyBrowserBase;
|
||||
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.actionSystem.*;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.psi.PsiAnonymousClass;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiElement;
|
||||
@@ -73,6 +71,14 @@ public final class TypeHierarchyBrowser extends TypeHierarchyBrowserBase {
|
||||
trees.put(SUBTYPES_HIERARCHY_TYPE, tree3);
|
||||
}
|
||||
|
||||
protected void prependActions(DefaultActionGroup actionGroup) {
|
||||
super.prependActions(actionGroup);
|
||||
actionGroup.add(new ChangeScopeAction() {
|
||||
protected boolean isEnabled() {
|
||||
return !Comparing.strEqual(myCurrentViewType, SUPERTYPES_HIERARCHY_TYPE);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getContentDisplayName(@NotNull String typeName, @NotNull PsiElement element) {
|
||||
@@ -102,10 +108,10 @@ public final class TypeHierarchyBrowser extends TypeHierarchyBrowserBase {
|
||||
return new SupertypesHierarchyTreeStructure(myProject, (PsiClass)psiElement);
|
||||
}
|
||||
else if (SUBTYPES_HIERARCHY_TYPE.equals(typeName)) {
|
||||
return new SubtypesHierarchyTreeStructure(myProject, (PsiClass)psiElement);
|
||||
return new SubtypesHierarchyTreeStructure(myProject, (PsiClass)psiElement, getCurrentScopeType());
|
||||
}
|
||||
else if (TYPE_HIERARCHY_TYPE.equals(typeName)) {
|
||||
return new TypeHierarchyTreeStructure(myProject, (PsiClass)psiElement);
|
||||
return new TypeHierarchyTreeStructure(myProject, (PsiClass)psiElement, getCurrentScopeType());
|
||||
}
|
||||
else {
|
||||
LOG.error("unexpected type: " + typeName);
|
||||
|
||||
@@ -23,8 +23,8 @@ import java.util.ArrayList;
|
||||
|
||||
public final class TypeHierarchyTreeStructure extends SubtypesHierarchyTreeStructure {
|
||||
|
||||
public TypeHierarchyTreeStructure(final Project project, final PsiClass aClass) {
|
||||
super(project, buildHierarchyElement(project, aClass));
|
||||
public TypeHierarchyTreeStructure(final Project project, final PsiClass aClass, String currentScopeType) {
|
||||
super(project, buildHierarchyElement(project, aClass), currentScopeType);
|
||||
setBaseElement(myBaseDescriptor); //to set myRoot
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user