From c0b5fd193ab998cd7a607a6b0c8b8acc6caf9c2c Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 16 Nov 2016 12:12:19 +0300 Subject: [PATCH] Refactor DeserializedPackageFragment and subclasses Push loadResource and loadResourceSure down to KotlinJavascriptPackageFragment, as it's no longer needed in BuiltInsPackageFragment --- .../kotlin/builtins/JvmBuiltInsPackageFragmentProvider.kt | 2 +- .../jetbrains/kotlin/builtins/BuiltInsPackageFragment.kt | 6 +++--- .../kotlin/builtins/builtInsPackageFragmentProvider.kt | 4 +++- .../deserialization/DeserializedPackageFragment.kt | 7 +------ .../serialization/js/KotlinJavascriptPackageFragment.kt | 7 +++++-- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/builtins/JvmBuiltInsPackageFragmentProvider.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/builtins/JvmBuiltInsPackageFragmentProvider.kt index 5af76cbcff3..aad3cb1d8e3 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/builtins/JvmBuiltInsPackageFragmentProvider.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/builtins/JvmBuiltInsPackageFragmentProvider.kt @@ -40,7 +40,7 @@ class JvmBuiltInsPackageFragmentProvider( private val fragments = storageManager.createMemoizedFunctionWithNullableValues { fqName -> finder.findBuiltInsData(fqName)?.let { inputStream -> - BuiltInsPackageFragment(fqName, storageManager, moduleDescriptor) { path -> inputStream }.apply { + BuiltInsPackageFragment(fqName, storageManager, moduleDescriptor, inputStream).apply { components = this@JvmBuiltInsPackageFragmentProvider.components } } diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsPackageFragment.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsPackageFragment.kt index c728d098cbc..cdcaa447cc8 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsPackageFragment.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsPackageFragment.kt @@ -29,9 +29,9 @@ class BuiltInsPackageFragment( fqName: FqName, storageManager: StorageManager, module: ModuleDescriptor, - loadResource: (path: String) -> InputStream? -) : DeserializedPackageFragment(fqName, storageManager, module, loadResource) { - private val proto = loadResourceSure(BuiltInSerializerProtocol.getBuiltInsFilePath(fqName)).use { stream -> + inputStream: InputStream +) : DeserializedPackageFragment(fqName, storageManager, module) { + private val proto = inputStream.use { stream -> val version = BuiltInsBinaryVersion.readFrom(stream) if (!version.isCompatible()) { diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/builtInsPackageFragmentProvider.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/builtInsPackageFragmentProvider.kt index eb6bda5b9b2..50a98273175 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/builtInsPackageFragmentProvider.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/builtInsPackageFragmentProvider.kt @@ -35,7 +35,9 @@ fun createBuiltInPackageFragmentProvider( loadResource: (String) -> InputStream? ): PackageFragmentProvider { val packageFragments = packageFqNames.map { fqName -> - BuiltInsPackageFragment(fqName, storageManager, module, loadResource) + val resourcePath = BuiltInSerializerProtocol.getBuiltInsFilePath(fqName) + val inputStream = loadResource(resourcePath) ?: throw IllegalStateException("Resource not found in classpath: $resourcePath") + BuiltInsPackageFragment(fqName, storageManager, module, inputStream) } val provider = PackageFragmentProviderImpl(packageFragments) diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/DeserializedPackageFragment.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/DeserializedPackageFragment.kt index 646936bbe15..d5511462266 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/DeserializedPackageFragment.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/DeserializedPackageFragment.kt @@ -23,14 +23,12 @@ import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPackageMemberScope import org.jetbrains.kotlin.storage.StorageManager import org.jetbrains.kotlin.storage.getValue -import java.io.InputStream import javax.inject.Inject abstract class DeserializedPackageFragment( fqName: FqName, protected val storageManager: StorageManager, - module: ModuleDescriptor, - private val loadResource: (path: String) -> InputStream? + module: ModuleDescriptor ) : PackageFragmentDescriptorImpl(module, fqName) { // component dependency cycle @set:Inject @@ -49,7 +47,4 @@ abstract class DeserializedPackageFragment( internal fun hasTopLevelClass(name: Name): Boolean { return name in getMemberScope().classNames } - - protected fun loadResourceSure(path: String): InputStream = - loadResource(path) ?: throw IllegalStateException("Resource not found in classpath: $path") } diff --git a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptPackageFragment.kt b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptPackageFragment.kt index 2c59d4f2dc7..6b91f33eef8 100644 --- a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptPackageFragment.kt +++ b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptPackageFragment.kt @@ -30,8 +30,8 @@ class KotlinJavascriptPackageFragment( fqName: FqName, storageManager: StorageManager, module: ModuleDescriptor, - loadResource: (path: String) -> InputStream? -) : DeserializedPackageFragment(fqName, storageManager, module, loadResource) { + private val loadResource: (path: String) -> InputStream? +) : DeserializedPackageFragment(fqName, storageManager, module) { private val nameResolver = loadResourceSure(KotlinJavascriptSerializedResourcePaths.getStringTableFilePath(fqName)).use { stream -> NameResolverImpl.read(stream) @@ -53,4 +53,7 @@ class KotlinJavascriptPackageFragment( val classesProto = JsProtoBuf.Classes.parseFrom(classesStream, JsSerializerProtocol.extensionRegistry) classesProto.classNameList?.map { id -> nameResolver.getName(id) } ?: listOf() } + + private fun loadResourceSure(path: String): InputStream = + loadResource(path) ?: throw IllegalStateException("Resource not found in classpath: $path") }