Simpler workaround for infinite recursion when obtaining Java sub packages.
This commit is contained in:
-33
@@ -101,37 +101,4 @@ public class JavaPsiFacadeKotlinHacks {
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public PsiPackage[] getSubPackages(@NotNull PsiPackage psiPackage) {
|
||||
GlobalSearchScope scope = GlobalSearchScope.allScope(psiPackage.getProject());
|
||||
|
||||
LinkedHashSet<PsiPackage> result = new LinkedHashSet<PsiPackage>();
|
||||
for (PsiElementFinder finder : extensionPsiElementFinders) {
|
||||
PsiPackage[] packages = finder.getSubPackages(psiPackage, scope);
|
||||
ContainerUtil.addAll(result, packages);
|
||||
}
|
||||
ContainerUtil.addAll(result, getDefaultSubPackages(psiPackage, scope));
|
||||
|
||||
return result.toArray(new PsiPackage[result.size()]);
|
||||
}
|
||||
|
||||
private static PsiPackage[] getDefaultSubPackages(@NotNull PsiPackage psiPackage, @NotNull GlobalSearchScope scope) {
|
||||
Map<String, PsiPackage> packagesMap = new HashMap<String, PsiPackage>();
|
||||
String qualifiedName = psiPackage.getQualifiedName();
|
||||
for (PsiDirectory dir : psiPackage.getDirectories(scope)) {
|
||||
PsiDirectory[] subDirs = dir.getSubdirectories();
|
||||
for (PsiDirectory subDir : subDirs) {
|
||||
PsiPackage aPackage = JavaDirectoryService.getInstance().getPackage(subDir);
|
||||
if (aPackage != null) {
|
||||
String subQualifiedName = aPackage.getQualifiedName();
|
||||
if (subQualifiedName.startsWith(qualifiedName) && !packagesMap.containsKey(subQualifiedName)) {
|
||||
packagesMap.put(aPackage.getQualifiedName(), aPackage);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
packagesMap.remove(qualifiedName); // avoid SOE caused by returning a package as a subpackage of itself
|
||||
return packagesMap.values().toArray(new PsiPackage[packagesMap.size()]);
|
||||
}
|
||||
}
|
||||
|
||||
+1
-3
@@ -18,7 +18,6 @@ package org.jetbrains.jet.lang.resolve.java.structure.impl;
|
||||
|
||||
import com.intellij.psi.PsiPackage;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.lang.resolve.java.JavaPsiFacadeKotlinHacks;
|
||||
import org.jetbrains.jet.lang.resolve.java.structure.JavaClass;
|
||||
import org.jetbrains.jet.lang.resolve.java.structure.JavaPackage;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
@@ -42,8 +41,7 @@ public class JavaPackageImpl extends JavaElementImpl<PsiPackage> implements Java
|
||||
@Override
|
||||
@NotNull
|
||||
public Collection<JavaPackage> getSubPackages() {
|
||||
PsiPackage psiPackage = getPsi();
|
||||
return packages(new JavaPsiFacadeKotlinHacks(psiPackage.getProject()).getSubPackages(psiPackage));
|
||||
return packages(getPsi().getSubPackages());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user