mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-15 11:53:49 +07:00
a better SOE fix discovered (since 29/12/2011)
This commit is contained in:
@@ -21,7 +21,6 @@ import com.intellij.psi.PsiClass;
|
||||
import com.intellij.util.PlatformIcons;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author Konstantin Bulenkov
|
||||
@@ -32,9 +31,8 @@ public class JavaAnonymousClassTreeElement extends JavaClassTreeElement {
|
||||
private String myName;
|
||||
private String myBaseName;
|
||||
|
||||
public JavaAnonymousClassTreeElement(PsiAnonymousClass aClass, Set<PsiClass> parents) {
|
||||
super(aClass, false, parents);
|
||||
//parents.add(aClass.getSuperClass());
|
||||
public JavaAnonymousClassTreeElement(PsiAnonymousClass aClass) {
|
||||
super(aClass, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -27,10 +27,8 @@ import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.util.PropertyOwner;
|
||||
import com.intellij.openapi.util.SystemInfo;
|
||||
import com.intellij.psi.PsiAnonymousClass;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.util.PlatformIcons;
|
||||
import com.intellij.util.containers.hash.HashSet;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -56,7 +54,7 @@ public class JavaAnonymousClassesNodeProvider implements FileStructureNodeProvid
|
||||
if (elements.length > 0) {
|
||||
List<JavaAnonymousClassTreeElement> result = new ArrayList<>(elements.length);
|
||||
for (PsiElement element : elements) {
|
||||
result.add(new JavaAnonymousClassTreeElement((PsiAnonymousClass)element, new HashSet<>()));
|
||||
result.add(new JavaAnonymousClassTreeElement((PsiAnonymousClass)element));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -27,12 +27,15 @@ import java.util.*;
|
||||
* @author Konstantin Bulenkov
|
||||
*/
|
||||
public class JavaClassTreeElement extends JavaClassTreeElementBase<PsiClass> {
|
||||
private final Set<PsiClass> myParents;
|
||||
|
||||
public JavaClassTreeElement(PsiClass cls, boolean inherited, Set<PsiClass> parents) {
|
||||
public JavaClassTreeElement(PsiClass cls, boolean inherited) {
|
||||
super(inherited, cls);
|
||||
myParents = parents;
|
||||
myParents.add(cls);
|
||||
}
|
||||
|
||||
/** @noinspection unused*/
|
||||
@Deprecated
|
||||
public JavaClassTreeElement(PsiClass cls, boolean inherited, Set<PsiClass> parents) {
|
||||
this(cls, inherited);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -48,12 +51,10 @@ public class JavaClassTreeElement extends JavaClassTreeElementBase<PsiClass> {
|
||||
LinkedHashSet<PsiElement> members = getOwnChildren(aClass);
|
||||
List<StructureViewTreeElement> children = new ArrayList<>(members.size());
|
||||
|
||||
//aClass.processDeclarations(new AddAllMembersProcessor(inherited, aClass), ResolveState.initial(), null, aClass);
|
||||
|
||||
for (PsiElement child : members) {
|
||||
if (!child.isValid()) continue;
|
||||
if (child instanceof PsiClass && !myParents.contains((PsiClass)child)) {
|
||||
children.add(new JavaClassTreeElement((PsiClass)child, false, myParents));
|
||||
if (child instanceof PsiClass) {
|
||||
children.add(new JavaClassTreeElement((PsiClass)child, false));
|
||||
}
|
||||
else if (child instanceof PsiField) {
|
||||
children.add(new PsiFieldTreeElement((PsiField)child, false));
|
||||
@@ -87,17 +88,15 @@ public class JavaClassTreeElement extends JavaClassTreeElementBase<PsiClass> {
|
||||
}
|
||||
}
|
||||
|
||||
public Set<PsiClass> getParents() {
|
||||
return myParents;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPresentableText() {
|
||||
return getElement().getName();
|
||||
PsiClass o = getElement();
|
||||
return o == null ? "" : o.getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPublic() {
|
||||
return getElement().getParent() instanceof PsiFile || super.isPublic();
|
||||
PsiClass o = getElement();
|
||||
return o != null && o.getParent() instanceof PsiFile || super.isPublic();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,7 +25,6 @@ import org.jetbrains.annotations.NotNull;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
|
||||
public class JavaFileTreeElement extends PsiTreeElementBase<PsiClassOwner> implements ItemPresentation {
|
||||
public JavaFileTreeElement(PsiClassOwner file) {
|
||||
@@ -46,7 +45,7 @@ public class JavaFileTreeElement extends PsiTreeElementBase<PsiClassOwner> imple
|
||||
PsiClass[] classes = element.getClasses();
|
||||
ArrayList<StructureViewTreeElement> result = new ArrayList<>();
|
||||
for (PsiClass aClass : classes) {
|
||||
result.add(new JavaClassTreeElement(aClass, false, new HashSet<>()));
|
||||
result.add(new JavaClassTreeElement(aClass, false));
|
||||
}
|
||||
return result;
|
||||
|
||||
|
||||
@@ -31,40 +31,39 @@ public class JavaInheritedMembersNodeProvider extends InheritedMembersNodeProvid
|
||||
@NotNull
|
||||
@Override
|
||||
public Collection<TreeElement> provideNodes(@NotNull TreeElement node) {
|
||||
if (node instanceof JavaClassTreeElement) {
|
||||
final PsiClass aClass = ((JavaClassTreeElement)node).getElement();
|
||||
if (aClass == null) return Collections.emptyList();
|
||||
if (!(node instanceof JavaClassTreeElement)) return Collections.emptyList();
|
||||
|
||||
Collection<PsiElement> inherited = new LinkedHashSet<>();
|
||||
Collection<PsiElement> ownChildren = JavaClassTreeElement.getOwnChildren(aClass);
|
||||
JavaClassTreeElement classNode = (JavaClassTreeElement)node;
|
||||
final PsiClass aClass = classNode.getElement();
|
||||
if (aClass == null) return Collections.emptyList();
|
||||
|
||||
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());
|
||||
}
|
||||
Collection<PsiElement> inherited = new LinkedHashSet<>();
|
||||
Collection<PsiElement> ownChildren = JavaClassTreeElement.getOwnChildren(aClass);
|
||||
|
||||
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<>();
|
||||
for (PsiElement child : inherited) {
|
||||
if (!child.isValid()) continue;
|
||||
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));
|
||||
}
|
||||
else if (child instanceof PsiMethod) {
|
||||
array.add(new PsiMethodTreeElement((PsiMethod)child, true));
|
||||
}
|
||||
else if (child instanceof PsiClassInitializer) {
|
||||
array.add(new ClassInitializerTreeElement((PsiClassInitializer)child));
|
||||
}
|
||||
}
|
||||
return array;
|
||||
}
|
||||
return Collections.emptyList();
|
||||
List<TreeElement> array = new ArrayList<>();
|
||||
for (PsiElement child : inherited) {
|
||||
if (!child.isValid()) continue;
|
||||
if (child instanceof PsiClass) {
|
||||
array.add(new JavaClassTreeElement((PsiClass)child, true));
|
||||
}
|
||||
else if (child instanceof PsiField) {
|
||||
array.add(new PsiFieldTreeElement((PsiField)child, true));
|
||||
}
|
||||
else if (child instanceof PsiMethod) {
|
||||
array.add(new PsiMethodTreeElement((PsiMethod)child, true));
|
||||
}
|
||||
else if (child instanceof PsiClassInitializer) {
|
||||
array.add(new ClassInitializerTreeElement((PsiClassInitializer)child));
|
||||
}
|
||||
}
|
||||
return array;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,11 +28,13 @@ import com.intellij.psi.*;
|
||||
import com.intellij.psi.search.searches.SuperMethodsSearch;
|
||||
import com.intellij.psi.util.MethodSignatureBackedByPsiMethod;
|
||||
import com.intellij.psi.util.PsiFormatUtil;
|
||||
import com.intellij.util.Function;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import static com.intellij.psi.util.PsiFormatUtilBase.*;
|
||||
|
||||
@@ -65,7 +67,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(), new HashSet<>(Arrays.asList(aClass.getSupers()))));
|
||||
result.add(new JavaClassTreeElement(aClass, isInherited()));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user