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) { for (builtInPackage in JvmBuiltIns(storageManager).builtInPackagesImportedByDefault) {
addAllClassifiersFromScope(builtinPackageFragment.getMemberScope()) addAllClassifiersFromScope(builtInPackage.memberScope)
} }
} }
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.builtins; package org.jetbrains.kotlin.builtins;
import kotlin.collections.CollectionsKt;
import kotlin.jvm.functions.Function0; import kotlin.jvm.functions.Function0;
import kotlin.jvm.functions.Function1; import kotlin.jvm.functions.Function1;
import org.jetbrains.annotations.NotNull; 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.AdditionalClassPartsProvider;
import org.jetbrains.kotlin.descriptors.deserialization.ClassDescriptorFactory; import org.jetbrains.kotlin.descriptors.deserialization.ClassDescriptorFactory;
import org.jetbrains.kotlin.descriptors.deserialization.PlatformDependentDeclarationFilter; 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.ModuleDescriptorImpl;
import org.jetbrains.kotlin.descriptors.impl.PackageFragmentDescriptorImpl;
import org.jetbrains.kotlin.incremental.components.NoLookupLocation; import org.jetbrains.kotlin.incremental.components.NoLookupLocation;
import org.jetbrains.kotlin.name.ClassId; import org.jetbrains.kotlin.name.ClassId;
import org.jetbrains.kotlin.name.FqName; 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.name.Name;
import org.jetbrains.kotlin.resolve.DescriptorUtils; import org.jetbrains.kotlin.resolve.DescriptorUtils;
import org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilsKt; 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.resolve.scopes.MemberScope;
import org.jetbrains.kotlin.storage.MemoizedFunctionToNotNull; import org.jetbrains.kotlin.storage.MemoizedFunctionToNotNull;
import org.jetbrains.kotlin.storage.NotNullLazyValue; import org.jetbrains.kotlin.storage.NotNullLazyValue;
@@ -65,7 +61,7 @@ public abstract class KotlinBuiltIns {
private ModuleDescriptorImpl builtInsModule; private ModuleDescriptorImpl builtInsModule;
private final NotNullLazyValue<Primitives> primitives; private final NotNullLazyValue<Primitives> primitives;
private final NotNullLazyValue<PackageFragments> packageFragments; private final NotNullLazyValue<Collection<PackageViewDescriptor>> builtInPackagesImportedByDefault;
private final MemoizedFunctionToNotNull<Name, ClassDescriptor> builtInClassesByName; private final MemoizedFunctionToNotNull<Name, ClassDescriptor> builtInClassesByName;
@@ -77,20 +73,15 @@ public abstract class KotlinBuiltIns {
protected KotlinBuiltIns(@NotNull StorageManager storageManager) { protected KotlinBuiltIns(@NotNull StorageManager storageManager) {
this.storageManager = storageManager; this.storageManager = storageManager;
this.packageFragments = storageManager.createLazyValue(new Function0<PackageFragments>() { this.builtInPackagesImportedByDefault = storageManager.createLazyValue(new Function0<Collection<PackageViewDescriptor>>() {
@Override @Override
public PackageFragments invoke() { public Collection<PackageViewDescriptor> invoke() {
PackageFragmentProvider provider = builtInsModule.getPackageFragmentProvider(); return Arrays.asList(
builtInsModule.getPackage(BUILT_INS_PACKAGE_FQ_NAME),
Map<FqName, PackageFragmentDescriptor> nameToFragment = new LinkedHashMap<FqName, PackageFragmentDescriptor>(); builtInsModule.getPackage(COLLECTIONS_PACKAGE_FQ_NAME),
createPackage(provider, nameToFragment, BUILT_INS_PACKAGE_FQ_NAME); builtInsModule.getPackage(RANGES_PACKAGE_FQ_NAME),
createPackage(provider, null, COROUTINES_PACKAGE_FQ_NAME_RELEASE); builtInsModule.getPackage(ANNOTATION_PACKAGE_FQ_NAME)
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);
} }
}); });
@@ -168,42 +159,6 @@ public abstract class KotlinBuiltIns {
return Collections.<ClassDescriptorFactory>singletonList(new BuiltInFictitiousFunctionClassFactory(storageManager, builtInsModule)); 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 @NotNull
protected StorageManager getStorageManager() { protected StorageManager getStorageManager() {
return storageManager; 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 static class FqNames {
public final FqNameUnsafe any = fqNameUnsafe("Any"); public final FqNameUnsafe any = fqNameUnsafe("Any");
public final FqNameUnsafe nothing = fqNameUnsafe("Nothing"); public final FqNameUnsafe nothing = fqNameUnsafe("Nothing");
@@ -366,8 +313,8 @@ public abstract class KotlinBuiltIns {
} }
@NotNull @NotNull
public Set<PackageFragmentDescriptor> getBuiltInsPackageFragmentsImportedByDefault() { public Collection<PackageViewDescriptor> getBuiltInPackagesImportedByDefault() {
return packageFragments.invoke().allImportedByDefaultBuiltInsPackageFragments; 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 //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 // we need only nested classes because top-level built-ins are all added through default imports
for (builtinPackage in resolutionFacade.moduleDescriptor.builtIns.builtInsPackageFragmentsImportedByDefault) { for (builtInPackage in resolutionFacade.moduleDescriptor.builtIns.builtInPackagesImportedByDefault) {
collectClassesFromScope(builtinPackage.getMemberScope()) { collectClassesFromScope(builtInPackage.memberScope) {
if (it.containingDeclaration is ClassDescriptor) { if (it.containingDeclaration is ClassDescriptor) {
classifierDescriptorCollector(it) classifierDescriptorCollector(it)
} }