Minor, refactor createBuiltInsPackageFragmentProvider

This commit is contained in:
Alexander Udalov
2017-06-05 12:34:57 +03:00
parent cbaa676c3d
commit 1728b77b2c
3 changed files with 45 additions and 43 deletions
@@ -16,8 +16,8 @@
package org.jetbrains.kotlin.serialization.builtins package org.jetbrains.kotlin.serialization.builtins
import org.jetbrains.kotlin.builtins.BuiltInsLoaderImpl
import org.jetbrains.kotlin.builtins.DefaultBuiltIns import org.jetbrains.kotlin.builtins.DefaultBuiltIns
import org.jetbrains.kotlin.builtins.createBuiltInPackageFragmentProvider
import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime
import org.jetbrains.kotlin.descriptors.deserialization.PlatformDependentDeclarationFilter import org.jetbrains.kotlin.descriptors.deserialization.PlatformDependentDeclarationFilter
import org.jetbrains.kotlin.jvm.compiler.LoadDescriptorUtil.TEST_PACKAGE_FQNAME import org.jetbrains.kotlin.jvm.compiler.LoadDescriptorUtil.TEST_PACKAGE_FQNAME
@@ -40,7 +40,7 @@ class BuiltInsSerializerTest : TestCaseWithTmpdir() {
val module = KotlinTestUtils.createEmptyModule("<module>", DefaultBuiltIns.Instance) val module = KotlinTestUtils.createEmptyModule("<module>", DefaultBuiltIns.Instance)
val packageFragmentProvider = createBuiltInPackageFragmentProvider( val packageFragmentProvider = BuiltInsLoaderImpl().createBuiltInPackageFragmentProvider(
LockBasedStorageManager(), module, setOf(TEST_PACKAGE_FQNAME), emptyList(), PlatformDependentDeclarationFilter.All LockBasedStorageManager(), module, setOf(TEST_PACKAGE_FQNAME), emptyList(), PlatformDependentDeclarationFilter.All
) { ) {
val file = File(tmpdir, it) val file = File(tmpdir, it)
@@ -21,6 +21,7 @@ import com.intellij.util.containers.ContainerUtil;
import kotlin.Unit; import kotlin.Unit;
import kotlin.collections.CollectionsKt; import kotlin.collections.CollectionsKt;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.builtins.BuiltInsLoaderImpl;
import org.jetbrains.kotlin.builtins.DefaultBuiltIns; import org.jetbrains.kotlin.builtins.DefaultBuiltIns;
import org.jetbrains.kotlin.builtins.KotlinBuiltIns; import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
import org.jetbrains.kotlin.builtins.functions.BuiltInFictitiousFunctionClassFactory; import org.jetbrains.kotlin.builtins.functions.BuiltInFictitiousFunctionClassFactory;
@@ -52,7 +53,6 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import static org.jetbrains.kotlin.builtins.BuiltInsPackageFragmentProviderKt.createBuiltInPackageFragmentProvider;
import static org.jetbrains.kotlin.builtins.KotlinBuiltIns.*; import static org.jetbrains.kotlin.builtins.KotlinBuiltIns.*;
public class LoadBuiltinsTest extends KotlinTestWithEnvironment { public class LoadBuiltinsTest extends KotlinTestWithEnvironment {
@@ -106,7 +106,7 @@ public class LoadBuiltinsTest extends KotlinTestWithEnvironment {
ModuleDescriptorImpl builtInsModule = ModuleDescriptorImpl builtInsModule =
new ModuleDescriptorImpl(KotlinBuiltIns.BUILTINS_MODULE_NAME, storageManager, DefaultBuiltIns.getInstance()); new ModuleDescriptorImpl(KotlinBuiltIns.BUILTINS_MODULE_NAME, storageManager, DefaultBuiltIns.getInstance());
PackageFragmentProvider packageFragmentProvider = createBuiltInPackageFragmentProvider( PackageFragmentProvider packageFragmentProvider = new BuiltInsLoaderImpl().createBuiltInPackageFragmentProvider(
storageManager, builtInsModule, BUILT_INS_PACKAGE_FQ_NAMES, storageManager, builtInsModule, BUILT_INS_PACKAGE_FQ_NAMES,
Collections.singletonList(new BuiltInFictitiousFunctionClassFactory(storageManager, builtInsModule)), Collections.singletonList(new BuiltInFictitiousFunctionClassFactory(storageManager, builtInsModule)),
PlatformDependentDeclarationFilter.All.INSTANCE, PlatformDependentDeclarationFilter.All.INSTANCE,
@@ -29,44 +29,46 @@ import org.jetbrains.kotlin.serialization.deserialization.*
import org.jetbrains.kotlin.storage.StorageManager import org.jetbrains.kotlin.storage.StorageManager
import java.io.InputStream import java.io.InputStream
fun createBuiltInPackageFragmentProvider( class BuiltInsLoaderImpl {
storageManager: StorageManager, fun createBuiltInPackageFragmentProvider(
module: ModuleDescriptor, storageManager: StorageManager,
packageFqNames: Set<FqName>, module: ModuleDescriptor,
classDescriptorFactories: Iterable<ClassDescriptorFactory>, packageFqNames: Set<FqName>,
platformDependentDeclarationFilter: PlatformDependentDeclarationFilter, classDescriptorFactories: Iterable<ClassDescriptorFactory>,
additionalClassPartsProvider: AdditionalClassPartsProvider = AdditionalClassPartsProvider.None, platformDependentDeclarationFilter: PlatformDependentDeclarationFilter,
loadResource: (String) -> InputStream? additionalClassPartsProvider: AdditionalClassPartsProvider = AdditionalClassPartsProvider.None,
): PackageFragmentProvider { loadResource: (String) -> InputStream?
val packageFragments = packageFqNames.map { fqName -> ): PackageFragmentProvider {
val resourcePath = BuiltInSerializerProtocol.getBuiltInsFilePath(fqName) val packageFragments = packageFqNames.map { fqName ->
val inputStream = loadResource(resourcePath) ?: throw IllegalStateException("Resource not found in classpath: $resourcePath") val resourcePath = BuiltInSerializerProtocol.getBuiltInsFilePath(fqName)
BuiltInsPackageFragmentImpl(fqName, storageManager, module, inputStream) val inputStream = loadResource(resourcePath) ?: throw IllegalStateException("Resource not found in classpath: $resourcePath")
BuiltInsPackageFragmentImpl(fqName, storageManager, module, inputStream)
}
val provider = PackageFragmentProviderImpl(packageFragments)
val notFoundClasses = NotFoundClasses(storageManager, module)
val components = DeserializationComponents(
storageManager,
module,
DeserializationConfiguration.Default,
DeserializedClassDataFinder(provider),
AnnotationAndConstantLoaderImpl(module, notFoundClasses, BuiltInSerializerProtocol),
provider,
LocalClassifierTypeSettings.Default,
ErrorReporter.DO_NOTHING,
LookupTracker.DO_NOTHING,
FlexibleTypeDeserializer.ThrowException,
classDescriptorFactories,
notFoundClasses,
additionalClassPartsProvider = additionalClassPartsProvider,
platformDependentDeclarationFilter = platformDependentDeclarationFilter
)
for (packageFragment in packageFragments) {
packageFragment.components = components
}
return provider
} }
val provider = PackageFragmentProviderImpl(packageFragments)
val notFoundClasses = NotFoundClasses(storageManager, module)
val components = DeserializationComponents(
storageManager,
module,
DeserializationConfiguration.Default,
DeserializedClassDataFinder(provider),
AnnotationAndConstantLoaderImpl(module, notFoundClasses, BuiltInSerializerProtocol),
provider,
LocalClassifierTypeSettings.Default,
ErrorReporter.DO_NOTHING,
LookupTracker.DO_NOTHING,
FlexibleTypeDeserializer.ThrowException,
classDescriptorFactories,
notFoundClasses,
additionalClassPartsProvider = additionalClassPartsProvider,
platformDependentDeclarationFilter = platformDependentDeclarationFilter
)
for (packageFragment in packageFragments) {
packageFragment.components = components
}
return provider
} }