Refactor DeserializedPackageFragment and subclasses
Push loadResource and loadResourceSure down to KotlinJavascriptPackageFragment, as it's no longer needed in BuiltInsPackageFragment
This commit is contained in:
+1
-1
@@ -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()) {
|
||||
|
||||
+3
-1
@@ -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)
|
||||
|
||||
|
||||
+1
-6
@@ -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")
|
||||
}
|
||||
|
||||
+5
-2
@@ -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")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user