From c881347110b449671c4e533b28059f82811b6330 Mon Sep 17 00:00:00 2001 From: Leonid Startsev Date: Tue, 1 Sep 2020 23:13:54 +0300 Subject: [PATCH] Use correct return type for constructor call when creating EnumDescriptor Previous one was converted using obsolete API, which caused unbound symbols to appear. #KT-41321 Fixed --- .../compiler/backend/ir/SerializerForEnumsGenerator.kt | 10 +++++----- .../compiler/backend/ir/SerializerIrGenerator.kt | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializerForEnumsGenerator.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializerForEnumsGenerator.kt index dfa7745a657..5015364709f 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializerForEnumsGenerator.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializerForEnumsGenerator.kt @@ -74,18 +74,18 @@ class SerializerForEnumsGenerator( +irReturn(getValueByOrdinal) } + override val serialDescImplClass: ClassDescriptor = serializerDescriptor + .getClassFromInternalSerializationPackage(SerialEntityNames.SERIAL_DESCRIPTOR_FOR_ENUM) + override fun IrBlockBodyBuilder.instantiateNewDescriptor( serialDescImplClass: ClassDescriptor, correctThis: IrExpression ): IrExpression { - val serialDescForEnums = serializerDescriptor - .getClassFromInternalSerializationPackage(SerialEntityNames.SERIAL_DESCRIPTOR_FOR_ENUM) - val ctor = compilerContext.referenceConstructors(serialDescForEnums.fqNameSafe).single { it.owner.isPrimary } + val ctor = compilerContext.referenceConstructors(serialDescImplClass.fqNameSafe).single { it.owner.isPrimary } return irInvoke( null, ctor, irString(serialName), - irInt(serializableDescriptor.enumEntries().size), - typeHint = ctor.descriptor.returnType.toIrType() + irInt(serializableDescriptor.enumEntries().size) ) } diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializerIrGenerator.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializerIrGenerator.kt index b203eeb8855..9e500c36ac5 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializerIrGenerator.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializerIrGenerator.kt @@ -51,11 +51,11 @@ open class SerializerIrGenerator(val irClass: IrClass, final override val compil protected val irAnySerialDescProperty = anySerialDescProperty?.let { compilerContext.symbolTable.referenceProperty(it) } - override fun generateSerialDesc() { - val desc: PropertyDescriptor = generatedSerialDescPropertyDescriptor ?: return - val serialDescImplClass = serializerDescriptor + protected open val serialDescImplClass: ClassDescriptor = serializerDescriptor .getClassFromInternalSerializationPackage(SERIAL_DESCRIPTOR_CLASS_IMPL) + override fun generateSerialDesc() { + val desc: PropertyDescriptor = generatedSerialDescPropertyDescriptor ?: return val addFuncS = serialDescImplClass.referenceMethod(CallingConventions.addElement) val thisAsReceiverParameter = irClass.thisReceiver!!