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 054b752915b..ccfcd93a394 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 @@ -76,6 +76,7 @@ class SerializerForEnumsGenerator( return irInvoke( null, ctor, irString(serialName), + irInt(serializableDescriptor.enumEntries().size), typeHint = ctor.descriptor.returnType.toIrType() ) } 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 6002aa69cb3..69929e2be98 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 @@ -110,7 +110,7 @@ open class SerializerIrGenerator(val irClass: IrClass, final override val compil val serialClassDescImplCtor = compilerContext.symbolTable.referenceConstructor(serialDescImplConstructor) return irInvoke( null, serialClassDescImplCtor, - irString(serialName), if (isGeneratedSerializer) correctThis else irNull() + irString(serialName), if (isGeneratedSerializer) correctThis else irNull(), irInt(serializableProperties.size) ) } diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/js/SerializerForEnumsTranslator.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/js/SerializerForEnumsTranslator.kt index 18c9df30325..58af96c4108 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/js/SerializerForEnumsTranslator.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/js/SerializerForEnumsTranslator.kt @@ -53,7 +53,7 @@ class SerializerForEnumsTranslator( val ctor = serialDescForEnums.unsubstitutedPrimaryConstructor!! return JsNew( context.getInnerReference(ctor), - listOf(JsStringLiteral(serialName)) + listOf(JsStringLiteral(serialName), JsIntLiteral(serializableDescriptor.enumEntries().size)) ) } diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/js/SerializerJsTranslator.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/js/SerializerJsTranslator.kt index 6442a8c7b00..b58942b8afa 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/js/SerializerJsTranslator.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/js/SerializerJsTranslator.kt @@ -83,7 +83,7 @@ open class SerializerJsTranslator( val serialDescImplConstructor = baseSerialDescImplClass.unsubstitutedPrimaryConstructor!! return JsNew( context.getInnerReference(serialDescImplConstructor), - listOf(JsStringLiteral(serialName), if (isGeneratedSerializer) correctThis else JsNullLiteral()) + listOf(JsStringLiteral(serialName), if (isGeneratedSerializer) correctThis else JsNullLiteral(), JsIntLiteral(serializableProperties.size)) ) } diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/jvm/SerializerCodegenImpl.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/jvm/SerializerCodegenImpl.kt index 56f966a8d65..353e0c4b290 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/jvm/SerializerCodegenImpl.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/jvm/SerializerCodegenImpl.kt @@ -110,7 +110,8 @@ open class SerializerCodegenImpl( } else { load(0, serializerAsmType) } - invokespecial(descImplType.internalName, "", "(Ljava/lang/String;${generatedSerializerType.descriptor})V", false) + aconst(serializableProperties.size) + invokespecial(descImplType.internalName, "", "(Ljava/lang/String;${generatedSerializerType.descriptor}I)V", false) } protected open fun ExpressionCodegen.addElementsContentToDescriptor(descriptorVar: Int) = with(v) { diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/jvm/SerializerForEnumsCodegen.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/jvm/SerializerForEnumsCodegen.kt index 3dff6372cab..04af0fa80ed 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/jvm/SerializerForEnumsCodegen.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/jvm/SerializerForEnumsCodegen.kt @@ -46,7 +46,8 @@ class SerializerForEnumsCodegen( anew(descriptorForEnumsType) dup() aconst(serialName) - invokespecial(descriptorForEnumsType.internalName, "", "(Ljava/lang/String;)V", false) + aconst(serializableDescriptor.enumEntries().size) + invokespecial(descriptorForEnumsType.internalName, "", "(Ljava/lang/String;I)V", false) checkcast(descImplType) } diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/codegen/Basic.txt b/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/codegen/Basic.txt index 3ab0a27403b..48aad25beb7 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/codegen/Basic.txt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/codegen/Basic.txt @@ -17,7 +17,8 @@ public final class ListOfUsers$$serializer : java/lang/Object, kotlinx/serializa LDC (ListOfUsers) GETSTATIC (INSTANCE, LListOfUsers$$serializer;) CHECKCAST - INVOKESPECIAL (kotlinx/serialization/internal/SerialClassDescImpl, , (Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;)V) + LDC (1) + INVOKESPECIAL (kotlinx/serialization/internal/SerialClassDescImpl, , (Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;I)V) ASTORE (0) ALOAD (0) LDC (list) @@ -317,7 +318,8 @@ public final class OptionalUser$$serializer : java/lang/Object, kotlinx/serializ LDC (OptionalUser) GETSTATIC (INSTANCE, LOptionalUser$$serializer;) CHECKCAST - INVOKESPECIAL (kotlinx/serialization/internal/SerialClassDescImpl, , (Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;)V) + LDC (1) + INVOKESPECIAL (kotlinx/serialization/internal/SerialClassDescImpl, , (Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;I)V) ASTORE (0) ALOAD (0) LDC (user) @@ -659,7 +661,8 @@ public final class User$$serializer : java/lang/Object, kotlinx/serialization/in LDC (User) GETSTATIC (INSTANCE, LUser$$serializer;) CHECKCAST - INVOKESPECIAL (kotlinx/serialization/internal/SerialClassDescImpl, , (Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;)V) + LDC (2) + INVOKESPECIAL (kotlinx/serialization/internal/SerialClassDescImpl, , (Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;I)V) ASTORE (0) ALOAD (0) LDC (firstName)