This commit is contained in:
Konstantin Bulenkov
2011-12-29 18:38:44 +01:00
parent 72a6f0c030
commit 0ff8d6073a
6 changed files with 33 additions and 14 deletions
@@ -22,6 +22,7 @@ import com.intellij.util.PlatformIcons;
import javax.swing.*;
import java.util.Collection;
import java.util.Set;
/**
* @author Konstantin Bulenkov
@@ -31,8 +32,9 @@ public class JavaAnonymousClassTreeElement extends JavaClassTreeElement {
private String myName;
public JavaAnonymousClassTreeElement(PsiAnonymousClass aClass) {
super(aClass, false);
public JavaAnonymousClassTreeElement(PsiAnonymousClass aClass, Set<PsiClass> parents) {
super(aClass, false, parents);
//parents.add(aClass.getSuperClass());
}
@Override
@@ -62,6 +64,8 @@ public class JavaAnonymousClassTreeElement extends JavaClassTreeElement {
return "Anonymous";
}
@Override
public String getLocationString() {
return ((PsiAnonymousClass)getElement()).getBaseClassType().getClassName();
@@ -50,7 +50,7 @@ public class JavaAnonymousClassesNodeProvider implements FileStructureNodeProvid
if (elements != null && elements.length > 0) {
List<JavaAnonymousClassTreeElement> result = new ArrayList<JavaAnonymousClassTreeElement>(elements.length);
for (PsiElement element : elements) {
result.add(new JavaAnonymousClassTreeElement((PsiAnonymousClass)element));
result.add(new JavaAnonymousClassTreeElement((PsiAnonymousClass)element, ((JavaClassTreeElement)node).getParents()));
}
return result;
}
@@ -20,17 +20,18 @@ import com.intellij.psi.*;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.*;
/**
* @author Konstantin Bulenkov
*/
public class JavaClassTreeElement extends JavaClassTreeElementBase<PsiClass> {
public JavaClassTreeElement(PsiClass cls, boolean inherited) {
private final Set<PsiClass> myParents;
public JavaClassTreeElement(PsiClass cls, boolean inherited, Set<PsiClass> parents) {
super(inherited, cls);
myParents = parents;
myParents.add(cls);
}
@NotNull
@@ -53,8 +54,8 @@ public class JavaClassTreeElement extends JavaClassTreeElementBase<PsiClass> {
for (PsiElement child : members) {
if (!child.isValid()) continue;
if (child instanceof PsiClass) {
children.add(new JavaClassTreeElement((PsiClass)child, false));
if (child instanceof PsiClass && !myParents.contains((PsiClass)child)) {
children.add(new JavaClassTreeElement((PsiClass)child, false, myParents));
}
else if (child instanceof PsiField) {
children.add(new PsiFieldTreeElement((PsiField)child, false));
@@ -69,6 +70,10 @@ public class JavaClassTreeElement extends JavaClassTreeElementBase<PsiClass> {
return children;
}
public Set<PsiClass> getParents() {
return myParents;
}
public String getPresentableText() {
return getElement().getName();
}
@@ -24,6 +24,7 @@ import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
public class JavaFileTreeElement extends PsiTreeElementBase<PsiJavaFile> implements ItemPresentation {
public JavaFileTreeElement(PsiJavaFile file) {
@@ -39,7 +40,7 @@ public class JavaFileTreeElement extends PsiTreeElementBase<PsiJavaFile> impleme
PsiClass[] classes = getElement().getClasses();
ArrayList<StructureViewTreeElement> result = new ArrayList<StructureViewTreeElement>();
for (PsiClass aClass : classes) {
result.add(new JavaClassTreeElement(aClass, false));
result.add(new JavaClassTreeElement(aClass, false, new HashSet<PsiClass>()));
}
return result;
@@ -59,11 +59,18 @@ public class JavaInheritedMembersNodeProvider implements FileStructureNodeProvid
aClass.processDeclarations(new AddAllMembersProcessor(inherited, aClass), ResolveState.initial(), null, aClass);
inherited.removeAll(ownChildren);
if (aClass instanceof PsiAnonymousClass) {
final PsiElement element = ((PsiAnonymousClass)aClass).getBaseClassReference().resolve();
if (element instanceof PsiClass) {
ContainerUtil.addAll(inherited, ((PsiClass)element).getInnerClasses());
}
}
List<TreeElement> array = new ArrayList<TreeElement>();
for (PsiElement child : inherited) {
if (!child.isValid()) continue;
if (child instanceof PsiClass && !child.isEquivalentTo(aClass)) {
array.add(new JavaClassTreeElement((PsiClass)child, true));
final Set<PsiClass> parents = ((JavaClassTreeElement)node).getParents();
if (child instanceof PsiClass && !parents.contains(child)) {
array.add(new JavaClassTreeElement((PsiClass)child, true, parents));
}
else if (child instanceof PsiField) {
array.add(new PsiFieldTreeElement((PsiField)child, true));
@@ -29,7 +29,9 @@ import com.intellij.util.Function;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
public class PsiMethodTreeElement extends JavaClassTreeElementBase<PsiMethod> implements SortableTreeElement {
public PsiMethodTreeElement(PsiMethod method, boolean isInherited) {
@@ -56,7 +58,7 @@ public class PsiMethodTreeElement extends JavaClassTreeElementBase<PsiMethod> im
element.accept(new JavaRecursiveElementWalkingVisitor(){
@Override public void visitClass(PsiClass aClass) {
if (!(aClass instanceof PsiAnonymousClass) && !(aClass instanceof PsiTypeParameter)) {
result.add(new JavaClassTreeElement(aClass, isInherited()));
result.add(new JavaClassTreeElement(aClass, isInherited(), new HashSet<PsiClass>(Arrays.asList(aClass.getSupers()))));
}
}