Drop unneeded synthetic package fragment construction from KotlinBuiltIns

Instead use package views of builtInsModule
This commit is contained in:
Alexander Udalov
2019-01-03 19:18:38 +01:00
parent e19c6ce23c
commit f2bf0dc236
3 changed files with 15 additions and 68 deletions
@@ -32,8 +32,8 @@ object JvmPlatform : TargetPlatform("JVM") {
}
}
for (builtinPackageFragment in JvmBuiltIns(storageManager).builtInsPackageFragmentsImportedByDefault) {
addAllClassifiersFromScope(builtinPackageFragment.getMemberScope())
for (builtInPackage in JvmBuiltIns(storageManager).builtInPackagesImportedByDefault) {
addAllClassifiersFromScope(builtInPackage.memberScope)
}
}
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.builtins;
import kotlin.collections.CollectionsKt;
import kotlin.jvm.functions.Function0;
import kotlin.jvm.functions.Function1;
import org.jetbrains.annotations.NotNull;
@@ -17,9 +16,7 @@ import org.jetbrains.kotlin.descriptors.annotations.Annotations;
import org.jetbrains.kotlin.descriptors.deserialization.AdditionalClassPartsProvider;
import org.jetbrains.kotlin.descriptors.deserialization.ClassDescriptorFactory;
import org.jetbrains.kotlin.descriptors.deserialization.PlatformDependentDeclarationFilter;
import org.jetbrains.kotlin.descriptors.impl.EmptyPackageFragmentDescriptor;
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl;
import org.jetbrains.kotlin.descriptors.impl.PackageFragmentDescriptorImpl;
import org.jetbrains.kotlin.incremental.components.NoLookupLocation;
import org.jetbrains.kotlin.name.ClassId;
import org.jetbrains.kotlin.name.FqName;
@@ -27,7 +24,6 @@ import org.jetbrains.kotlin.name.FqNameUnsafe;
import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.resolve.DescriptorUtils;
import org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilsKt;
import org.jetbrains.kotlin.resolve.scopes.ChainedMemberScope;
import org.jetbrains.kotlin.resolve.scopes.MemberScope;
import org.jetbrains.kotlin.storage.MemoizedFunctionToNotNull;
import org.jetbrains.kotlin.storage.NotNullLazyValue;
@@ -65,7 +61,7 @@ public abstract class KotlinBuiltIns {
private ModuleDescriptorImpl builtInsModule;
private final NotNullLazyValue<Primitives> primitives;
private final NotNullLazyValue<PackageFragments> packageFragments;
private final NotNullLazyValue<Collection<PackageViewDescriptor>> builtInPackagesImportedByDefault;
private final MemoizedFunctionToNotNull<Name, ClassDescriptor> builtInClassesByName;
@@ -77,20 +73,15 @@ public abstract class KotlinBuiltIns {
protected KotlinBuiltIns(@NotNull StorageManager storageManager) {
this.storageManager = storageManager;
this.packageFragments = storageManager.createLazyValue(new Function0<PackageFragments>() {
this.builtInPackagesImportedByDefault = storageManager.createLazyValue(new Function0<Collection<PackageViewDescriptor>>() {
@Override
public PackageFragments invoke() {
PackageFragmentProvider provider = builtInsModule.getPackageFragmentProvider();
Map<FqName, PackageFragmentDescriptor> nameToFragment = new LinkedHashMap<FqName, PackageFragmentDescriptor>();
createPackage(provider, nameToFragment, BUILT_INS_PACKAGE_FQ_NAME);
createPackage(provider, null, COROUTINES_PACKAGE_FQ_NAME_RELEASE);
createPackage(provider, nameToFragment, COLLECTIONS_PACKAGE_FQ_NAME);
createPackage(provider, nameToFragment, RANGES_PACKAGE_FQ_NAME);
createPackage(provider, nameToFragment, ANNOTATION_PACKAGE_FQ_NAME);
Set<PackageFragmentDescriptor> allImportedByDefault = new LinkedHashSet<PackageFragmentDescriptor>(nameToFragment.values());
return new PackageFragments(allImportedByDefault);
public Collection<PackageViewDescriptor> invoke() {
return Arrays.asList(
builtInsModule.getPackage(BUILT_INS_PACKAGE_FQ_NAME),
builtInsModule.getPackage(COLLECTIONS_PACKAGE_FQ_NAME),
builtInsModule.getPackage(RANGES_PACKAGE_FQ_NAME),
builtInsModule.getPackage(ANNOTATION_PACKAGE_FQ_NAME)
);
}
});
@@ -168,42 +159,6 @@ public abstract class KotlinBuiltIns {
return Collections.<ClassDescriptorFactory>singletonList(new BuiltInFictitiousFunctionClassFactory(storageManager, builtInsModule));
}
@NotNull
private PackageFragmentDescriptor createPackage(
@NotNull PackageFragmentProvider fragmentProvider,
@Nullable Map<FqName, PackageFragmentDescriptor> packageNameToPackageFragment,
@NotNull final FqName packageFqName
) {
final List<PackageFragmentDescriptor> packageFragments = fragmentProvider.getPackageFragments(packageFqName);
PackageFragmentDescriptor result =
packageFragments.isEmpty()
? new EmptyPackageFragmentDescriptor(builtInsModule, packageFqName)
: packageFragments.size() == 1
? packageFragments.iterator().next()
: new PackageFragmentDescriptorImpl(builtInsModule, packageFqName) {
@NotNull
@Override
public MemberScope getMemberScope() {
return new ChainedMemberScope(
"built-in package " + packageFqName,
CollectionsKt.map(
packageFragments,
new Function1<PackageFragmentDescriptor, MemberScope>() {
@Override
public MemberScope invoke(PackageFragmentDescriptor descriptor) {
return descriptor.getMemberScope();
}
}
)
);
}
};
if (packageNameToPackageFragment != null) packageNameToPackageFragment.put(packageFqName, result);
return result;
}
@NotNull
protected StorageManager getStorageManager() {
return storageManager;
@@ -225,14 +180,6 @@ public abstract class KotlinBuiltIns {
}
}
private static class PackageFragments {
public final Set<PackageFragmentDescriptor> allImportedByDefaultBuiltInsPackageFragments;
private PackageFragments(@NotNull Set<PackageFragmentDescriptor> allImportedByDefaultBuiltInsPackageFragments) {
this.allImportedByDefaultBuiltInsPackageFragments = allImportedByDefaultBuiltInsPackageFragments;
}
}
public static class FqNames {
public final FqNameUnsafe any = fqNameUnsafe("Any");
public final FqNameUnsafe nothing = fqNameUnsafe("Nothing");
@@ -366,8 +313,8 @@ public abstract class KotlinBuiltIns {
}
@NotNull
public Set<PackageFragmentDescriptor> getBuiltInsPackageFragmentsImportedByDefault() {
return packageFragments.invoke().allImportedByDefaultBuiltInsPackageFragments;
public Collection<PackageViewDescriptor> getBuiltInPackagesImportedByDefault() {
return builtInPackagesImportedByDefault.invoke();
}
/**
@@ -50,8 +50,8 @@ class AllClassesCompletion(private val parameters: CompletionParameters,
//TODO: this is a temporary solution until we have built-ins in indices
// we need only nested classes because top-level built-ins are all added through default imports
for (builtinPackage in resolutionFacade.moduleDescriptor.builtIns.builtInsPackageFragmentsImportedByDefault) {
collectClassesFromScope(builtinPackage.getMemberScope()) {
for (builtInPackage in resolutionFacade.moduleDescriptor.builtIns.builtInPackagesImportedByDefault) {
collectClassesFromScope(builtInPackage.memberScope) {
if (it.containingDeclaration is ClassDescriptor) {
classifierDescriptorCollector(it)
}