mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
More generic PyHierarchyNodeDescriptor instead of just PyTypeHierarchyNodeDescriptor
This commit is contained in:
+14
-9
@@ -25,6 +25,7 @@ import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.psi.NavigatablePsiElement;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.jetbrains.python.psi.PyClass;
|
||||
import com.jetbrains.python.psi.PyFunction;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.awt.*;
|
||||
@@ -35,14 +36,14 @@ import java.awt.*;
|
||||
* Date: Jul 31, 2009
|
||||
* Time: 6:26:37 PM
|
||||
*/
|
||||
public class PyTypeHierarchyNodeDescriptor extends HierarchyNodeDescriptor {
|
||||
|
||||
public PyTypeHierarchyNodeDescriptor(final NodeDescriptor parentDescriptor, @NotNull final PsiElement element, final boolean isBase) {
|
||||
public class PyHierarchyNodeDescriptor extends HierarchyNodeDescriptor {
|
||||
public PyHierarchyNodeDescriptor(final NodeDescriptor parentDescriptor, @NotNull final PsiElement element, final boolean isBase) {
|
||||
super(element.getProject(), parentDescriptor, element, isBase);
|
||||
}
|
||||
|
||||
public PyClass getClassElement() {
|
||||
return (PyClass)myElement;
|
||||
@NotNull
|
||||
public PsiElement getPsiElement() {
|
||||
return myElement;
|
||||
}
|
||||
|
||||
public boolean isValid() {
|
||||
@@ -71,10 +72,14 @@ public class PyTypeHierarchyNodeDescriptor extends HierarchyNodeDescriptor {
|
||||
|
||||
final ItemPresentation presentation = element.getPresentation();
|
||||
if (presentation != null) {
|
||||
final PyClass cl = getClassElement();
|
||||
myHighlightedText.getEnding().addText(cl.getName(), classNameAttributes);
|
||||
myHighlightedText.getEnding()
|
||||
.addText(" (" + cl.getContainingFile().getName() + ")", HierarchyNodeDescriptor.getPackageNameAttributes());
|
||||
if (element instanceof PyFunction) {
|
||||
final PyClass cls = ((PyFunction)element).getContainingClass();
|
||||
if (cls != null) {
|
||||
myHighlightedText.getEnding().addText(cls.getName() + ".");
|
||||
}
|
||||
}
|
||||
myHighlightedText.getEnding().addText(presentation.getPresentableText(), classNameAttributes);
|
||||
myHighlightedText.getEnding().addText(" " + presentation.getLocationString(), HierarchyNodeDescriptor.getPackageNameAttributes());
|
||||
}
|
||||
myName = myHighlightedText.getText();
|
||||
|
||||
@@ -52,10 +52,10 @@ public class PyTypeHierarchyBrowser extends TypeHierarchyBrowserBase {
|
||||
|
||||
@Nullable
|
||||
protected PsiElement getElementFromDescriptor(@NotNull HierarchyNodeDescriptor descriptor) {
|
||||
if (!(descriptor instanceof PyTypeHierarchyNodeDescriptor)) {
|
||||
if (!(descriptor instanceof PyHierarchyNodeDescriptor)) {
|
||||
return null;
|
||||
}
|
||||
return ((PyTypeHierarchyNodeDescriptor)descriptor).getClassElement();
|
||||
return ((PyHierarchyNodeDescriptor)descriptor).getPsiElement();
|
||||
}
|
||||
|
||||
protected void createTrees(@NotNull Map<String, JTree> trees) {
|
||||
|
||||
+11
-7
@@ -18,9 +18,10 @@ package com.jetbrains.python.hierarchy.treestructures;
|
||||
import com.intellij.ide.hierarchy.HierarchyNodeDescriptor;
|
||||
import com.intellij.ide.hierarchy.HierarchyTreeStructure;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.Query;
|
||||
import com.jetbrains.python.hierarchy.PyTypeHierarchyNodeDescriptor;
|
||||
import com.jetbrains.python.hierarchy.PyHierarchyNodeDescriptor;
|
||||
import com.jetbrains.python.psi.PyClass;
|
||||
import com.jetbrains.python.psi.search.PyClassInheritorsSearch;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -40,17 +41,20 @@ public class PySubTypesHierarchyTreeStructure extends HierarchyTreeStructure {
|
||||
}
|
||||
|
||||
public PySubTypesHierarchyTreeStructure(@NotNull final PyClass cl) {
|
||||
super(cl.getProject(), new PyTypeHierarchyNodeDescriptor(null, cl, true));
|
||||
super(cl.getProject(), new PyHierarchyNodeDescriptor(null, cl, true));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
protected Object[] buildChildren(@NotNull HierarchyNodeDescriptor descriptor) {
|
||||
final PyClass classElement = ((PyTypeHierarchyNodeDescriptor)descriptor).getClassElement();
|
||||
Query<PyClass> subClasses = PyClassInheritorsSearch.search(classElement, false);
|
||||
final List<PyHierarchyNodeDescriptor> res = new ArrayList<PyHierarchyNodeDescriptor>();
|
||||
final PsiElement element = ((PyHierarchyNodeDescriptor)descriptor).getPsiElement();
|
||||
if (element instanceof PyClass) {
|
||||
final PyClass cls = (PyClass)element;
|
||||
Query<PyClass> subClasses = PyClassInheritorsSearch.search(cls, false);
|
||||
for (PyClass subClass : subClasses) {
|
||||
res.add(new PyHierarchyNodeDescriptor(descriptor, subClass, false));
|
||||
}
|
||||
|
||||
List<PyTypeHierarchyNodeDescriptor> res = new ArrayList<PyTypeHierarchyNodeDescriptor>();
|
||||
for (PyClass cl : subClasses) {
|
||||
res.add(new PyTypeHierarchyNodeDescriptor(descriptor, cl, false));
|
||||
}
|
||||
|
||||
return ArrayUtil.toObjectArray(res);
|
||||
|
||||
+14
-11
@@ -17,8 +17,8 @@ package com.jetbrains.python.hierarchy.treestructures;
|
||||
|
||||
import com.intellij.ide.hierarchy.HierarchyNodeDescriptor;
|
||||
import com.intellij.ide.hierarchy.HierarchyTreeStructure;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.jetbrains.python.hierarchy.PyTypeHierarchyNodeDescriptor;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.jetbrains.python.hierarchy.PyHierarchyNodeDescriptor;
|
||||
import com.jetbrains.python.psi.PyClass;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -32,20 +32,23 @@ import java.util.List;
|
||||
* Time: 7:04:07 PM
|
||||
*/
|
||||
public class PySuperTypesHierarchyTreeStructure extends HierarchyTreeStructure {
|
||||
protected PySuperTypesHierarchyTreeStructure(final Project project, final HierarchyNodeDescriptor baseDescriptor) {
|
||||
super(project, baseDescriptor);
|
||||
}
|
||||
|
||||
public PySuperTypesHierarchyTreeStructure(@NotNull final PyClass cl) {
|
||||
super(cl.getProject(), new PyTypeHierarchyNodeDescriptor(null, cl, true));
|
||||
super(cl.getProject(), new PyHierarchyNodeDescriptor(null, cl, true));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
protected Object[] buildChildren(@NotNull HierarchyNodeDescriptor descriptor) {
|
||||
final PyClass[] superClasses = ((PyTypeHierarchyNodeDescriptor)descriptor).getClassElement().getSuperClasses();
|
||||
List<PyTypeHierarchyNodeDescriptor> res = new ArrayList<PyTypeHierarchyNodeDescriptor>();
|
||||
for (PyClass superClass : superClasses) {
|
||||
res.add(new PyTypeHierarchyNodeDescriptor(descriptor, superClass, false));
|
||||
final List<PyHierarchyNodeDescriptor> res = new ArrayList<PyHierarchyNodeDescriptor>();
|
||||
if (descriptor instanceof PyHierarchyNodeDescriptor) {
|
||||
final PyHierarchyNodeDescriptor pyDescriptor = (PyHierarchyNodeDescriptor)descriptor;
|
||||
final PsiElement element = pyDescriptor.getPsiElement();
|
||||
if (element instanceof PyClass) {
|
||||
final PyClass cls = (PyClass)element;
|
||||
final PyClass[] superClasses = cls.getSuperClasses();
|
||||
for (PyClass superClass : superClasses) {
|
||||
res.add(new PyHierarchyNodeDescriptor(descriptor, superClass, false));
|
||||
}
|
||||
}
|
||||
}
|
||||
return res.toArray();
|
||||
}
|
||||
|
||||
+11
-16
@@ -16,8 +16,7 @@
|
||||
package com.jetbrains.python.hierarchy.treestructures;
|
||||
|
||||
import com.intellij.ide.hierarchy.HierarchyNodeDescriptor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.jetbrains.python.hierarchy.PyTypeHierarchyNodeDescriptor;
|
||||
import com.jetbrains.python.hierarchy.PyHierarchyNodeDescriptor;
|
||||
import com.jetbrains.python.psi.PyClass;
|
||||
import com.jetbrains.python.psi.PyUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -28,30 +27,26 @@ import java.util.List;
|
||||
* @author Alexey.Ivanov
|
||||
*/
|
||||
public class PyTypeHierarchyTreeStructure extends PySubTypesHierarchyTreeStructure {
|
||||
private static PyTypeHierarchyNodeDescriptor buildHierarchyElement(@NotNull final PyClass cl) {
|
||||
PyTypeHierarchyNodeDescriptor descriptor = null;
|
||||
public PyTypeHierarchyTreeStructure(@NotNull final PyClass cl) {
|
||||
super(cl.getProject(), buildHierarchyElement(cl));
|
||||
setBaseElement(myBaseDescriptor);
|
||||
}
|
||||
|
||||
private static PyHierarchyNodeDescriptor buildHierarchyElement(@NotNull final PyClass cl) {
|
||||
PyHierarchyNodeDescriptor descriptor = null;
|
||||
List<PyClass> superClasses = PyUtil.getAllSuperClasses(cl);
|
||||
for (int i = superClasses.size() - 1; i >= 0; --i) {
|
||||
final PyClass superClass = superClasses.get(i);
|
||||
final PyTypeHierarchyNodeDescriptor newDescriptor = new PyTypeHierarchyNodeDescriptor(descriptor, superClass, false);
|
||||
final PyHierarchyNodeDescriptor newDescriptor = new PyHierarchyNodeDescriptor(descriptor, superClass, false);
|
||||
if (descriptor != null) {
|
||||
descriptor.setCachedChildren(new PyTypeHierarchyNodeDescriptor[]{newDescriptor});
|
||||
descriptor.setCachedChildren(new PyHierarchyNodeDescriptor[]{newDescriptor});
|
||||
}
|
||||
descriptor = newDescriptor;
|
||||
}
|
||||
final PyTypeHierarchyNodeDescriptor newDescriptor = new PyTypeHierarchyNodeDescriptor(descriptor, cl, true);
|
||||
final PyHierarchyNodeDescriptor newDescriptor = new PyHierarchyNodeDescriptor(descriptor, cl, true);
|
||||
if (descriptor != null) {
|
||||
descriptor.setCachedChildren(new HierarchyNodeDescriptor[]{newDescriptor});
|
||||
}
|
||||
return newDescriptor;
|
||||
}
|
||||
|
||||
protected PyTypeHierarchyTreeStructure(final Project project, final HierarchyNodeDescriptor baseDescriptor) {
|
||||
super(project, baseDescriptor);
|
||||
}
|
||||
|
||||
public PyTypeHierarchyTreeStructure(@NotNull final PyClass cl) {
|
||||
super(cl.getProject(), buildHierarchyElement(cl));
|
||||
setBaseElement(myBaseDescriptor);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user