Refactor DeserializedPackageFragment and subclasses

Push loadResource and loadResourceSure down to KotlinJavascriptPackageFragment,
as it's no longer needed in BuiltInsPackageFragment
This commit is contained in:
Alexander Udalov
2016-11-16 12:12:19 +03:00
parent 19520bf29c
commit c0b5fd193a
5 changed files with 13 additions and 13 deletions
@@ -40,7 +40,7 @@ class JvmBuiltInsPackageFragmentProvider(
private val fragments = storageManager.createMemoizedFunctionWithNullableValues<FqName, PackageFragmentDescriptor> { fqName ->
finder.findBuiltInsData(fqName)?.let { inputStream ->
BuiltInsPackageFragment(fqName, storageManager, moduleDescriptor) { path -> inputStream }.apply {
BuiltInsPackageFragment(fqName, storageManager, moduleDescriptor, inputStream).apply {
components = this@JvmBuiltInsPackageFragmentProvider.components
}
}
@@ -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()) {
@@ -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)
@@ -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")
}
@@ -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")
}