diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/GeneratorHelpers.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/GeneratorHelpers.kt index 4f88c56a8c8..787a2597000 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/GeneratorHelpers.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/GeneratorHelpers.kt @@ -56,11 +56,16 @@ interface IrBuilderExtension { val BackendContext.localSymbolTable: SymbolTable + private fun IrClass.declareSimpleFunctionWithExternalOverrides(descriptor: FunctionDescriptor): IrSimpleFunction { + return compilerContext.localSymbolTable.declareSimpleFunction(startOffset, endOffset, SERIALIZABLE_PLUGIN_ORIGIN, descriptor).also {f -> + descriptor.overriddenDescriptors.mapTo(f.overriddenSymbols) { + compilerContext.externalSymbols.referenceSimpleFunction(it.original) + } + } + } + fun IrClass.contributeFunction(descriptor: FunctionDescriptor, fromStubs: Boolean = false, bodyGen: IrBlockBodyBuilder.(IrFunction) -> Unit) { - val f: IrSimpleFunction = if (!fromStubs) compilerContext.localSymbolTable.declareSimpleFunctionWithOverrides( - this.startOffset, - this.endOffset, - SERIALIZABLE_PLUGIN_ORIGIN, + val f: IrSimpleFunction = if (!fromStubs) declareSimpleFunctionWithExternalOverrides( descriptor ) else compilerContext.externalSymbols.referenceSimpleFunction(descriptor).owner f.parent = this