diff --git a/compiler/ir/backend.jvm/entrypoint/src/org/jetbrains/kotlin/backend/jvm/JvmGeneratorExtensionsImpl.kt b/compiler/ir/backend.jvm/entrypoint/src/org/jetbrains/kotlin/backend/jvm/JvmGeneratorExtensionsImpl.kt index cc92c7d59d0..090c544750f 100644 --- a/compiler/ir/backend.jvm/entrypoint/src/org/jetbrains/kotlin/backend/jvm/JvmGeneratorExtensionsImpl.kt +++ b/compiler/ir/backend.jvm/entrypoint/src/org/jetbrains/kotlin/backend/jvm/JvmGeneratorExtensionsImpl.kt @@ -118,7 +118,9 @@ open class JvmGeneratorExtensionsImpl( allowErrorNodes: Boolean ): Boolean { val serializedIr = (irClass.source as? KotlinJvmBinarySourceElement)?.binaryClass?.classHeader?.serializedIr ?: return false - deserializeClassFromByteArray(serializedIr, stubGenerator, irClass, allowErrorNodes) + deserializeClassFromByteArray( + serializedIr, stubGenerator, irClass, JvmIrTypeSystemContext(stubGenerator.irBuiltIns), allowErrorNodes + ) irClass.transform(SingletonObjectJvmStaticTransformer(stubGenerator.irBuiltIns, cachedFields), null) return true } @@ -130,7 +132,9 @@ open class JvmGeneratorExtensionsImpl( allowErrorNodes: Boolean ): Boolean { val serializedIr = (irClass.source as? JvmPackagePartSource)?.knownJvmBinaryClass?.classHeader?.serializedIr ?: return false - deserializeIrFileFromByteArray(serializedIr, stubGenerator, irClass, allowErrorNodes) + deserializeIrFileFromByteArray( + serializedIr, stubGenerator, irClass, JvmIrTypeSystemContext(stubGenerator.irBuiltIns), allowErrorNodes + ) irClass.transform(SingletonObjectJvmStaticTransformer(stubGenerator.irBuiltIns, cachedFields), null) return true } diff --git a/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/backend/jvm/serialization/JvmIrSerializerSession.kt b/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/backend/jvm/serialization/JvmIrSerializerSession.kt index 0f47f13f8d9..1e562c059fd 100644 --- a/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/backend/jvm/serialization/JvmIrSerializerSession.kt +++ b/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/backend/jvm/serialization/JvmIrSerializerSession.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.backend.jvm.serialization +import org.jetbrains.kotlin.backend.common.serialization.CompatibilityMode import org.jetbrains.kotlin.backend.common.serialization.DeclarationTable import org.jetbrains.kotlin.backend.common.serialization.IrFileSerializer import org.jetbrains.kotlin.backend.jvm.serialization.proto.JvmIr @@ -21,7 +22,9 @@ class JvmIrSerializerSession( expectDescriptorToSymbol: MutableMap, externallyVisibleOnly: Boolean = true, skipExpects: Boolean = false, -) : IrFileSerializer(messageLogger, declarationTable, expectDescriptorToSymbol, externallyVisibleOnly, skipExpects) { +) : IrFileSerializer( + messageLogger, declarationTable, expectDescriptorToSymbol, CompatibilityMode.CURRENT, externallyVisibleOnly, skipExpects +) { // Usage protocol: construct an instance, call only one of `serializeIrFile()` and `serializeTopLevelClass()` only once. diff --git a/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/backend/jvm/serialization/deserializeLazyDeclarations.kt b/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/backend/jvm/serialization/deserializeLazyDeclarations.kt index 84e729eb382..ad3663096c0 100644 --- a/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/backend/jvm/serialization/deserializeLazyDeclarations.kt +++ b/compiler/ir/serialization.jvm/src/org/jetbrains/kotlin/backend/jvm/serialization/deserializeLazyDeclarations.kt @@ -22,6 +22,7 @@ import org.jetbrains.kotlin.ir.declarations.lazy.LazyIrFactory import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns import org.jetbrains.kotlin.ir.symbols.* import org.jetbrains.kotlin.ir.symbols.impl.IrFileSymbolImpl +import org.jetbrains.kotlin.ir.types.IrTypeSystemContext import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid @@ -31,6 +32,7 @@ fun deserializeClassFromByteArray( byteArray: ByteArray, stubGenerator: DeclarationStubGenerator, irClass: IrClass, + typeSystemContext: IrTypeSystemContext, allowErrorNodes: Boolean, ) { val irBuiltIns = stubGenerator.irBuiltIns @@ -73,19 +75,21 @@ fun deserializeClassFromByteArray( deserializeBodies = true, symbolDeserializer, DefaultFakeOverrideClassFilter, - makeSimpleFakeOverrideBuilder(symbolTable, irBuiltIns, symbolDeserializer) + makeSimpleFakeOverrideBuilder(symbolTable, typeSystemContext, symbolDeserializer), + compatibilityMode = CompatibilityMode.CURRENT, ) deserializer.deserializeIrClass(irProto.irClass) ExternalDependenciesGenerator(stubGenerator.symbolTable, listOf(stubGenerator)).generateUnboundSymbolsAsDependencies() - buildFakeOverridesForLocalClasses(stubGenerator.symbolTable, stubGenerator.irBuiltIns, symbolDeserializer, irClass) + buildFakeOverridesForLocalClasses(stubGenerator.symbolTable, typeSystemContext, symbolDeserializer, irClass) } fun deserializeIrFileFromByteArray( byteArray: ByteArray, stubGenerator: DeclarationStubGenerator, facadeClass: IrClass, + typeSystemContext: IrTypeSystemContext, allowErrorNodes: Boolean, ) { val irBuiltIns = stubGenerator.irBuiltIns @@ -121,7 +125,7 @@ fun deserializeIrFileFromByteArray( val lazyIrFactory = LazyIrFactory(irBuiltIns.irFactory) - val fakeOverrideBuilder = makeSimpleFakeOverrideBuilder(symbolTable, irBuiltIns, symbolDeserializer) + val fakeOverrideBuilder = makeSimpleFakeOverrideBuilder(symbolTable, typeSystemContext, symbolDeserializer) val deserializer = IrDeclarationDeserializer( irBuiltIns, symbolTable, lazyIrFactory, irLibraryFile, facadeClass, @@ -130,14 +134,15 @@ fun deserializeIrFileFromByteArray( deserializeBodies = true, symbolDeserializer, DefaultFakeOverrideClassFilter, - fakeOverrideBuilder + fakeOverrideBuilder, + compatibilityMode = CompatibilityMode.CURRENT, ) for (declarationProto in irProto.declarationList) { deserializer.deserializeDeclaration(declarationProto) } ExternalDependenciesGenerator(stubGenerator.symbolTable, listOf(stubGenerator)).generateUnboundSymbolsAsDependencies() - buildFakeOverridesForLocalClasses(stubGenerator.symbolTable, stubGenerator.irBuiltIns, symbolDeserializer, facadeClass) + buildFakeOverridesForLocalClasses(stubGenerator.symbolTable, typeSystemContext, symbolDeserializer, facadeClass) } private class IrLibraryFileFromAnnotation( @@ -195,7 +200,7 @@ private fun referencePublicSymbol( // TODO: implement properly fun makeSimpleFakeOverrideBuilder( symbolTable: SymbolTable, - irBuiltIns: IrBuiltIns, + typeSystemContext: IrTypeSystemContext, symbolDeserializer: IrSymbolDeserializer ): FakeOverrideBuilder { return FakeOverrideBuilder( @@ -210,18 +215,18 @@ fun makeSimpleFakeOverrideBuilder( }, symbolTable, JvmIrMangler, - irBuiltIns, + typeSystemContext, fakeOverrideDeclarationTable = PrePopulatedDeclarationTable(symbolDeserializer.deserializedSymbols) ) } private fun buildFakeOverridesForLocalClasses( symbolTable: SymbolTable, - irBuiltIns: IrBuiltIns, + typeSystemContext: IrTypeSystemContext, symbolDeserializer: IrSymbolDeserializer, toplevel: IrClass ) { - val builder = makeSimpleFakeOverrideBuilder(symbolTable, irBuiltIns, symbolDeserializer) + val builder = makeSimpleFakeOverrideBuilder(symbolTable, typeSystemContext, symbolDeserializer) toplevel.acceptChildrenVoid(object : IrElementVisitorVoid { override fun visitElement(element: IrElement) { element.acceptChildrenVoid(this) @@ -229,7 +234,7 @@ private fun buildFakeOverridesForLocalClasses( override fun visitClass(declaration: IrClass) { if (declaration.visibility == DescriptorVisibilities.LOCAL) { - builder.provideFakeOverrides(declaration) + builder.provideFakeOverrides(declaration, CompatibilityMode.CURRENT) } super.visitClass(declaration) }