diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/BasicIrModuleDeserializer.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/BasicIrModuleDeserializer.kt index f59ad2f01f3..6ec5694a76e 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/BasicIrModuleDeserializer.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/BasicIrModuleDeserializer.kt @@ -151,6 +151,8 @@ abstract class BasicIrModuleDeserializer( return fileDeserializer.symbolDeserializer.signatureDeserializer } + + override val origin get() = IrModuleOrigin.DESERIALIZED } private class ModuleDeserializationState(val linker: KotlinIrLinker, val moduleDeserializer: BasicIrModuleDeserializer) { diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IncrementalCompilationSupport.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IncrementalCompilationSupport.kt index d3a7c7af75f..5fd95739db6 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IncrementalCompilationSupport.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IncrementalCompilationSupport.kt @@ -162,8 +162,8 @@ class CurrentModuleWithICDeserializer( get() = delegate.moduleFragment override val moduleDependencies: Collection get() = delegate.moduleDependencies - override val isCurrent: Boolean - get() = delegate.isCurrent + override val origin: IrModuleOrigin + get() = delegate.origin override fun fileDeserializers(): Collection { return delegate.fileDeserializers() diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrModuleDeserializer.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrModuleDeserializer.kt index cda6e395834..85f28bfd114 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrModuleDeserializer.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrModuleDeserializer.kt @@ -51,6 +51,10 @@ class CompatibilityMode(val abiVersion: KotlinAbiVersion) { } } +enum class IrModuleOrigin { + CURRENT, DESERIALIZED, SYNTHETIC +} + abstract class IrModuleDeserializer(private val _moduleDescriptor: ModuleDescriptor?, val libraryAbiVersion: KotlinAbiVersion) { abstract operator fun contains(idSig: IdSignature): Boolean abstract fun deserializeIrSymbol(idSig: IdSignature, symbolKind: BinarySymbolData.SymbolKind): IrSymbol @@ -90,7 +94,7 @@ abstract class IrModuleDeserializer(private val _moduleDescriptor: ModuleDescrip open val strategyResolver: (String) -> DeserializationStrategy = { DeserializationStrategy.ONLY_DECLARATION_HEADERS } - open val isCurrent = false + abstract val origin: IrModuleOrigin open fun fileDeserializers(): Collection = error("Unsupported") @@ -227,7 +231,7 @@ class IrModuleDeserializerWithBuiltIns( override val moduleFragment: IrModuleFragment get() = delegate.moduleFragment override val moduleDependencies: Collection get() = delegate.moduleDependencies - override val isCurrent get() = delegate.isCurrent + override val origin get() = delegate.origin override fun fileDeserializers(): Collection { return delegate.fileDeserializers() @@ -254,5 +258,5 @@ open class CurrentModuleDeserializer( override fun declareIrSymbol(symbol: IrSymbol) {} - override val isCurrent = true + override val origin get() = IrModuleOrigin.CURRENT } diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/KotlinIrLinker.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/KotlinIrLinker.kt index bf8f08fa4bb..b99affb10bd 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/KotlinIrLinker.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/KotlinIrLinker.kt @@ -75,6 +75,8 @@ abstract class KotlinIrLinker( override val moduleFragment: IrModuleFragment get() = TODO("Not yet implemented") override val moduleDependencies: Collection get() = emptyList() + override val origin: IrModuleOrigin + get() = TODO("Not yet implemented") } } else { throw SignatureIdNotFoundInModuleWithDependencies( diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/linkerissues/UserVisibleIrModulesSupport.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/linkerissues/UserVisibleIrModulesSupport.kt index 96e771526ad..e254b3f957e 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/linkerissues/UserVisibleIrModulesSupport.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/linkerissues/UserVisibleIrModulesSupport.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.backend.common.serialization.linkerissues import org.jetbrains.kotlin.backend.common.serialization.IrModuleDeserializer +import org.jetbrains.kotlin.backend.common.serialization.IrModuleOrigin import org.jetbrains.kotlin.konan.file.File import org.jetbrains.kotlin.library.KotlinLibrary import org.jetbrains.kotlin.library.uniqueName @@ -199,7 +200,7 @@ open class UserVisibleIrModulesSupport(externalDependenciesLoader: ExternalDepen } protected val IrModuleDeserializer.kotlinLibrary: KotlinLibrary? - get() = klib as? KotlinLibrary + get() = if (origin == IrModuleOrigin.DESERIALIZED) klib as? KotlinLibrary else null val moduleIdComparator: Comparator = Comparator { a, b -> when { diff --git a/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/ir/backend/jvm/serialization/JvmIrLinker.kt b/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/ir/backend/jvm/serialization/JvmIrLinker.kt index 2040e6b02f6..e7769625308 100644 --- a/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/ir/backend/jvm/serialization/JvmIrLinker.kt +++ b/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/ir/backend/jvm/serialization/JvmIrLinker.kt @@ -163,5 +163,6 @@ class JvmIrLinker( override val moduleFragment: IrModuleFragment = IrModuleFragmentImpl(moduleDescriptor, builtIns, emptyList()) override val moduleDependencies: Collection = dependencies + override val origin get() = IrModuleOrigin.SYNTHETIC } } diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanIrlinker.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanIrlinker.kt index 2fcfb9f40d5..03a9d0eb9f0 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanIrlinker.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanIrlinker.kt @@ -610,6 +610,8 @@ internal class KonanIrLinker( override val moduleFragment: IrModuleFragment = KonanIrModuleFragmentImpl(moduleDescriptor, builtIns) override val moduleDependencies: Collection = listOfNotNull(forwardDeclarationDeserializer) + + override val origin get() = IrModuleOrigin.DESERIALIZED } inner class KonanCachedLibraryModuleDeserializer( @@ -842,6 +844,8 @@ internal class KonanIrLinker( } } } + + override val origin get() = IrModuleOrigin.DESERIALIZED } private inner class KonanForwardDeclarationModuleDeserializer(moduleDescriptor: ModuleDescriptor) : IrModuleDeserializer(moduleDescriptor, KotlinAbiVersion.CURRENT) { @@ -892,6 +896,8 @@ internal class KonanIrLinker( override val moduleFragment: IrModuleFragment = KonanIrModuleFragmentImpl(moduleDescriptor, builtIns) override val moduleDependencies: Collection = emptyList() + + override val origin get() = IrModuleOrigin.SYNTHETIC } private val String.isForwardDeclarationModuleName: Boolean get() = this == ""