[klibs] Refactored BasicIrModuleDeserializer

This commit is contained in:
Igor Chevdar
2022-04-25 14:20:21 +05:00
committed by Space
parent 31eedebec6
commit f62e4e7b97
@@ -32,9 +32,9 @@ abstract class BasicIrModuleDeserializer(
private val fileToDeserializerMap = mutableMapOf<IrFile, IrFileDeserializer>() private val fileToDeserializerMap = mutableMapOf<IrFile, IrFileDeserializer>()
private val moduleDeserializationState = ModuleDeserializationState(linker, this) private val moduleDeserializationState = ModuleDeserializationState()
val moduleReversedFileIndex = mutableMapOf<IdSignature, FileDeserializationState>() protected val moduleReversedFileIndex = mutableMapOf<IdSignature, FileDeserializationState>()
override val moduleDependencies by lazy { override val moduleDependencies by lazy {
moduleDescriptor.allDependencyModules moduleDescriptor.allDependencyModules
@@ -166,18 +166,17 @@ abstract class BasicIrModuleDeserializer(
} }
override val kind get() = IrModuleDeserializerKind.DESERIALIZED override val kind get() = IrModuleDeserializerKind.DESERIALIZED
}
private class ModuleDeserializationState(val linker: KotlinIrLinker, val moduleDeserializer: BasicIrModuleDeserializer) { private inner class ModuleDeserializationState {
private val filesWithPendingTopLevels = mutableSetOf<FileDeserializationState>() private val filesWithPendingTopLevels = mutableSetOf<FileDeserializationState>()
fun enqueueFile(fileDeserializationState: FileDeserializationState) { fun enqueueFile(fileDeserializationState: FileDeserializationState) {
filesWithPendingTopLevels.add(fileDeserializationState) filesWithPendingTopLevels.add(fileDeserializationState)
linker.modulesWithReachableTopLevels.add(moduleDeserializer) linker.modulesWithReachableTopLevels.add(this@BasicIrModuleDeserializer)
} }
fun addIdSignature(key: IdSignature) { fun addIdSignature(key: IdSignature) {
val fileLocalDeserializationState = moduleDeserializer.moduleReversedFileIndex[key] ?: error("No file found for key $key") val fileLocalDeserializationState = moduleReversedFileIndex[key] ?: error("No file found for key $key")
fileLocalDeserializationState.addIdSignature(key) fileLocalDeserializationState.addIdSignature(key)
enqueueFile(fileLocalDeserializationState) enqueueFile(fileLocalDeserializationState)
@@ -194,7 +193,8 @@ private class ModuleDeserializationState(val linker: KotlinIrLinker, val moduleD
} }
} }
override fun toString(): String = moduleDeserializer.klib.toString() override fun toString(): String = klib.toString()
}
} }
fun IrModuleDeserializer.findModuleDeserializerForTopLevelId(idSignature: IdSignature): IrModuleDeserializer? { fun IrModuleDeserializer.findModuleDeserializerForTopLevelId(idSignature: IdSignature): IrModuleDeserializer? {