Using indexes to find packages
JetLightPackage does not depend on PSI elements any more
This commit is contained in:
@@ -205,12 +205,10 @@ public class JavaElementFinder extends PsiElementFinder implements JavaPsiFacade
|
||||
|
||||
FqName fqName = new FqName(qualifiedNameString);
|
||||
|
||||
final Collection<JetFile> psiFiles = collectProjectJetFiles(project, GlobalSearchScope.allScope(project));
|
||||
|
||||
for (JetFile psiFile : psiFiles) {
|
||||
if (QualifiedNamesUtil.isSubpackageOf(JetPsiUtil.getFQName(psiFile), fqName)) {
|
||||
return new JetLightPackage(psiManager, fqName, psiFile.getNamespaceHeader());
|
||||
}
|
||||
// allScope() because the contract says that the whole project
|
||||
GlobalSearchScope allScope = GlobalSearchScope.allScope(project);
|
||||
if (lightClassGenerationSupport.packageExists(fqName, allScope)) {
|
||||
return new JetLightPackage(psiManager, fqName, allScope);
|
||||
}
|
||||
|
||||
return null;
|
||||
@@ -228,7 +226,7 @@ public class JavaElementFinder extends PsiElementFinder implements JavaPsiFacade
|
||||
|
||||
final FqName subPackageFQN = QualifiedNamesUtil.plusOneSegment(new FqName(psiPackage.getQualifiedName()), jetRootNamespace);
|
||||
if (subPackageFQN != null) {
|
||||
answer.add(new JetLightPackage(psiManager, subPackageFQN, psiFile.getNamespaceHeader()));
|
||||
answer.add(new JetLightPackage(psiManager, subPackageFQN, scope));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ package org.jetbrains.jet.asJava;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiManager;
|
||||
import com.intellij.psi.impl.file.PsiPackageImpl;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
|
||||
/**
|
||||
@@ -26,22 +27,22 @@ import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
*/
|
||||
public class JetLightPackage extends PsiPackageImpl {
|
||||
|
||||
private final PsiElement namespaceElement;
|
||||
private final FqName fqName;
|
||||
private final GlobalSearchScope scope;
|
||||
|
||||
public JetLightPackage(PsiManager manager, FqName qualifiedName, PsiElement namespaceElement) {
|
||||
public JetLightPackage(PsiManager manager, FqName qualifiedName, GlobalSearchScope scope) {
|
||||
super(manager, qualifiedName.getFqName());
|
||||
this.fqName = qualifiedName;
|
||||
this.namespaceElement = namespaceElement;
|
||||
this.scope = scope;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PsiElement copy() {
|
||||
return new JetLightPackage(getManager(), fqName, namespaceElement);
|
||||
return new JetLightPackage(getManager(), fqName, scope);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isValid() {
|
||||
return namespaceElement.isValid();
|
||||
return LightClassGenerationSupport.getInstance(getProject()).packageExists(fqName, scope);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,4 +51,6 @@ public abstract class LightClassGenerationSupport {
|
||||
@NotNull FqName packageFqName,
|
||||
@NotNull GlobalSearchScope searchScope
|
||||
);
|
||||
|
||||
public abstract boolean packageExists(@NotNull FqName fqName, @NotNull GlobalSearchScope scope);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user