a better SOE fix discovered (since 29/12/2011)

This commit is contained in:
Gregory.Shrago
2017-10-04 03:02:08 +03:00
parent bb32a6b110
commit f8729fa9be
7 changed files with 57 additions and 57 deletions

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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();
}
}

View File

@@ -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;

View File

@@ -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;
}
}

View File

@@ -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()));
}
}
});