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:
@@ -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,
|
||||
|
||||
-3
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user