mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
fix SOE
This commit is contained in:
+6
-2
@@ -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();
|
||||
|
||||
+1
-1
@@ -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;
|
||||
}
|
||||
|
||||
+12
-7
@@ -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();
|
||||
}
|
||||
|
||||
+2
-1
@@ -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;
|
||||
|
||||
|
||||
+9
-2
@@ -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));
|
||||
|
||||
+3
-1
@@ -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()))));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user