Dropping package facades:

- light classes: do not generate light class for package facade
- drop package facades as multifile classes compilation mode support
- get rid of some additional package facade fqName usages
- update tests for light classes
This commit is contained in:
Dmitry Petrov
2015-10-15 18:13:04 +03:00
parent e7fb7483c5
commit 149e70aa07
42 changed files with 60 additions and 373 deletions
@@ -120,10 +120,6 @@ public class JavaElementFinder extends PsiElementFinder implements KotlinFinderM
answer.addAll(lightClassGenerationSupport.getFacadeClasses(qualifiedName, scope));
if (PackageClassUtils.isPackageClassFqName(qualifiedName)) {
answer.addAll(lightClassGenerationSupport.getPackageClasses(qualifiedName.parent(), scope));
}
return sortByClasspath(answer, scope).toArray(new PsiClass[answer.size()]);
}
@@ -171,7 +167,6 @@ public class JavaElementFinder extends PsiElementFinder implements KotlinFinderM
Collection<JetClassOrObject> declarations = lightClassGenerationSupport.findClassOrObjectDeclarationsInPackage(packageFQN, scope);
Set<String> answer = Sets.newHashSet();
answer.add(PackageClassUtils.getPackageClassName(packageFQN));
answer.addAll(lightClassGenerationSupport.getFacadeNames(packageFQN, scope));
for (JetClassOrObject declaration : declarations) {
@@ -224,7 +219,6 @@ public class JavaElementFinder extends PsiElementFinder implements KotlinFinderM
List<PsiClass> answer = new SmartList<PsiClass>();
FqName packageFQN = new FqName(psiPackage.getQualifiedName());
answer.addAll(lightClassGenerationSupport.getPackageClasses(packageFQN, scope));
answer.addAll(lightClassGenerationSupport.getFacadeClassesInPackage(packageFQN, scope));
Collection<JetClassOrObject> declarations = lightClassGenerationSupport.findClassOrObjectDeclarationsInPackage(packageFQN, scope);
@@ -435,7 +435,6 @@ public class KotlinJavaFileStubProvider<T extends WithFileStubAndExtraDiagnostic
/*disableInline=*/false,
/*disableOptimization=*/false,
/*useTypeTableInSerializer=*/false,
/*packageFacadesAsMultifileClasses=*/false,
forExtraDiagnostics
);
KotlinCodegenFacade.prepareForCompilation(state);
@@ -30,7 +30,6 @@ import com.intellij.psi.util.PsiModificationTracker
import com.intellij.util.containers.SLRUCache
import org.jetbrains.annotations.NonNls
import org.jetbrains.kotlin.idea.KotlinLanguage
import org.jetbrains.kotlin.load.kotlin.PackageClassUtils
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.JetClassOrObject
import org.jetbrains.kotlin.psi.JetFile
@@ -237,23 +236,6 @@ public class KotlinLightClassForFacade private constructor(
}
companion object Factory {
public fun createForPackageFacade(
manager: PsiManager,
packageFqName: FqName,
searchScope: GlobalSearchScope,
files: Collection<JetFile> // this is redundant, but computing it multiple times is costly
): KotlinLightClassForFacade? {
if (files.any { LightClassUtil.belongsToKotlinBuiltIns(it) }) {
return null
}
assert(files.isNotEmpty()) { "No files for package $packageFqName" }
val packageClassFqName = PackageClassUtils.getPackageClassFqName(packageFqName)
val lightClassDataCache = PackageFacadeStubCache.getInstance(manager.project).get(packageFqName, searchScope)
return KotlinLightClassForFacade(manager, packageClassFqName, searchScope, lightClassDataCache, files, true)
}
public fun createForFacade(
manager: PsiManager,
facadeClassFqName: FqName,
@@ -70,9 +70,6 @@ public abstract class LightClassGenerationSupport {
@Nullable
public abstract PsiClass getPsiClass(@NotNull JetClassOrObject classOrObject);
@NotNull
public abstract Collection<PsiClass> getPackageClasses(@NotNull FqName packageFqName, @NotNull GlobalSearchScope scope);
@Nullable
public abstract ClassDescriptor resolveClassToDescriptor(@NotNull JetClassOrObject classOrObject);
@@ -50,7 +50,6 @@ public class StubClassBuilder extends AbstractClassBuilder {
private final StubElement parent;
private StubBuildingVisitor v;
private final Stack<StubElement> parentStack;
private boolean isPackageClass = false;
public StubClassBuilder(@NotNull Stack<StubElement> parentStack) {
this.parentStack = parentStack;
@@ -79,18 +78,7 @@ public class StubClassBuilder extends AbstractClassBuilder {
super.defineClass(origin, version, access, name, signature, superName, interfaces);
if (origin instanceof JetFile) {
FqName packageName = ((JetFile) origin).getPackageFqName();
String packageClassName = PackageClassUtils.getPackageClassName(packageName);
if (name.equals(packageClassName) || name.endsWith("/" + packageClassName)) {
isPackageClass = true;
}
}
if (!isPackageClass) {
parentStack.push(v.getResult());
}
parentStack.push(v.getResult());
((StubBase) v.getResult()).putUserData(ClsWrapperStubPsiFactory.ORIGIN_ELEMENT, origin);
}
@@ -149,10 +137,8 @@ public class StubClassBuilder extends AbstractClassBuilder {
@Override
public void done() {
if (!isPackageClass) {
StubElement pop = parentStack.pop();
assert pop == v.getResult();
}
StubElement pop = parentStack.pop();
assert pop == v.getResult();
super.done();
}
}