[KLIB] Provide required API for IC invalidation

This commit is contained in:
Roman Artemev
2021-08-20 16:33:36 +03:00
committed by TeamCityServer
parent 4ad2572085
commit 76690c081a
5 changed files with 20 additions and 2 deletions
@@ -142,6 +142,13 @@ abstract class BasicIrModuleDeserializer(
override fun deserializeReachableDeclarations() {
moduleDeserializationState.deserializeReachableDeclarations()
}
override fun signatureDeserializerForFile(fileName: String): IdSignatureDeserializer {
val fileDeserializer = fileToDeserializerMap.entries.find { it.key.fileEntry.name == fileName }?.value
?: error("No file deserializer for $fileName")
return fileDeserializer.symbolDeserializer.signatureDeserializer
}
}
private class ModuleDeserializationState(val linker: KotlinIrLinker, val moduleDeserializer: BasicIrModuleDeserializer) {
@@ -92,6 +92,8 @@ abstract class IrModuleDeserializer(val moduleDescriptor: ModuleDescriptor, val
open fun fileDeserializers(): Collection<IrFileDeserializer> = error("Unsupported")
val compatibilityMode: CompatibilityMode get() = CompatibilityMode(libraryAbiVersion)
open fun signatureDeserializerForFile(fileName: String): IdSignatureDeserializer = error("Unsupported")
}
// Used to resolve built in symbols like `kotlin.ir.internal.*` or `kotlin.FunctionN`
@@ -231,6 +233,10 @@ class IrModuleDeserializerWithBuiltIns(
override fun postProcess() {
delegate.postProcess()
}
override fun signatureDeserializerForFile(fileName: String): IdSignatureDeserializer {
return delegate.signatureDeserializerForFile(fileName)
}
}
open class CurrentModuleDeserializer(
@@ -103,7 +103,7 @@ class IrSymbolDeserializer(
}
}
private val signatureDeserializer = IdSignatureDeserializer(fileReader, fileSymbol)
val signatureDeserializer = IdSignatureDeserializer(fileReader, fileSymbol)
fun deserializeIdSignature(index: Int): IdSignature {
return signatureDeserializer.deserializeIdSignature(index)
@@ -323,6 +323,11 @@ abstract class KotlinIrLinker(
fun deserializeHeadersWithInlineBodies(moduleDescriptor: ModuleDescriptor, kotlinLibrary: KotlinLibrary): IrModuleFragment =
deserializeIrModuleHeader(moduleDescriptor, kotlinLibrary, DeserializationStrategy.WITH_INLINE_BODIES)
@Suppress("UNUSED_PARAMETER")
fun deserializeDirtyFiles(moduleDescriptor: ModuleDescriptor, kotlinLibrary: KotlinLibrary, dirtyFiles: Collection<String>): IrModuleFragment {
return deserializeFullModule(moduleDescriptor, kotlinLibrary)
}
}
enum class DeserializationStrategy(
@@ -96,7 +96,7 @@ private val CompilerConfiguration.expectActualLinker: Boolean
class KotlinFileSerializedData(val metadata: ByteArray, val irData: SerializedIrFile)
private fun IrMessageLogger?.toResolverLogger(): Logger {
fun IrMessageLogger?.toResolverLogger(): Logger {
if (this == null) return DummyLogger
return object : Logger {