Pass actual serializable properties count in the generated code

to SerialClassDescImpl.
This is needed to optimize space allocation.
This commit is contained in:
Leonid Startsev
2020-01-17 20:12:31 +03:00
parent 9558538d15
commit db4273d677
7 changed files with 14 additions and 8 deletions
@@ -76,6 +76,7 @@ class SerializerForEnumsGenerator(
return irInvoke( return irInvoke(
null, ctor, null, ctor,
irString(serialName), irString(serialName),
irInt(serializableDescriptor.enumEntries().size),
typeHint = ctor.descriptor.returnType.toIrType() typeHint = ctor.descriptor.returnType.toIrType()
) )
} }
@@ -110,7 +110,7 @@ open class SerializerIrGenerator(val irClass: IrClass, final override val compil
val serialClassDescImplCtor = compilerContext.symbolTable.referenceConstructor(serialDescImplConstructor) val serialClassDescImplCtor = compilerContext.symbolTable.referenceConstructor(serialDescImplConstructor)
return irInvoke( return irInvoke(
null, serialClassDescImplCtor, null, serialClassDescImplCtor,
irString(serialName), if (isGeneratedSerializer) correctThis else irNull() irString(serialName), if (isGeneratedSerializer) correctThis else irNull(), irInt(serializableProperties.size)
) )
} }
@@ -53,7 +53,7 @@ class SerializerForEnumsTranslator(
val ctor = serialDescForEnums.unsubstitutedPrimaryConstructor!! val ctor = serialDescForEnums.unsubstitutedPrimaryConstructor!!
return JsNew( return JsNew(
context.getInnerReference(ctor), context.getInnerReference(ctor),
listOf(JsStringLiteral(serialName)) listOf(JsStringLiteral(serialName), JsIntLiteral(serializableDescriptor.enumEntries().size))
) )
} }
@@ -83,7 +83,7 @@ open class SerializerJsTranslator(
val serialDescImplConstructor = baseSerialDescImplClass.unsubstitutedPrimaryConstructor!! val serialDescImplConstructor = baseSerialDescImplClass.unsubstitutedPrimaryConstructor!!
return JsNew( return JsNew(
context.getInnerReference(serialDescImplConstructor), context.getInnerReference(serialDescImplConstructor),
listOf(JsStringLiteral(serialName), if (isGeneratedSerializer) correctThis else JsNullLiteral()) listOf(JsStringLiteral(serialName), if (isGeneratedSerializer) correctThis else JsNullLiteral(), JsIntLiteral(serializableProperties.size))
) )
} }
@@ -110,7 +110,8 @@ open class SerializerCodegenImpl(
} else { } else {
load(0, serializerAsmType) load(0, serializerAsmType)
} }
invokespecial(descImplType.internalName, "<init>", "(Ljava/lang/String;${generatedSerializerType.descriptor})V", false) aconst(serializableProperties.size)
invokespecial(descImplType.internalName, "<init>", "(Ljava/lang/String;${generatedSerializerType.descriptor}I)V", false)
} }
protected open fun ExpressionCodegen.addElementsContentToDescriptor(descriptorVar: Int) = with(v) { protected open fun ExpressionCodegen.addElementsContentToDescriptor(descriptorVar: Int) = with(v) {
@@ -46,7 +46,8 @@ class SerializerForEnumsCodegen(
anew(descriptorForEnumsType) anew(descriptorForEnumsType)
dup() dup()
aconst(serialName) aconst(serialName)
invokespecial(descriptorForEnumsType.internalName, "<init>", "(Ljava/lang/String;)V", false) aconst(serializableDescriptor.enumEntries().size)
invokespecial(descriptorForEnumsType.internalName, "<init>", "(Ljava/lang/String;I)V", false)
checkcast(descImplType) checkcast(descImplType)
} }
@@ -17,7 +17,8 @@ public final class ListOfUsers$$serializer : java/lang/Object, kotlinx/serializa
LDC (ListOfUsers) LDC (ListOfUsers)
GETSTATIC (INSTANCE, LListOfUsers$$serializer;) GETSTATIC (INSTANCE, LListOfUsers$$serializer;)
CHECKCAST CHECKCAST
INVOKESPECIAL (kotlinx/serialization/internal/SerialClassDescImpl, <init>, (Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;)V) LDC (1)
INVOKESPECIAL (kotlinx/serialization/internal/SerialClassDescImpl, <init>, (Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;I)V)
ASTORE (0) ASTORE (0)
ALOAD (0) ALOAD (0)
LDC (list) LDC (list)
@@ -317,7 +318,8 @@ public final class OptionalUser$$serializer : java/lang/Object, kotlinx/serializ
LDC (OptionalUser) LDC (OptionalUser)
GETSTATIC (INSTANCE, LOptionalUser$$serializer;) GETSTATIC (INSTANCE, LOptionalUser$$serializer;)
CHECKCAST CHECKCAST
INVOKESPECIAL (kotlinx/serialization/internal/SerialClassDescImpl, <init>, (Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;)V) LDC (1)
INVOKESPECIAL (kotlinx/serialization/internal/SerialClassDescImpl, <init>, (Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;I)V)
ASTORE (0) ASTORE (0)
ALOAD (0) ALOAD (0)
LDC (user) LDC (user)
@@ -659,7 +661,8 @@ public final class User$$serializer : java/lang/Object, kotlinx/serialization/in
LDC (User) LDC (User)
GETSTATIC (INSTANCE, LUser$$serializer;) GETSTATIC (INSTANCE, LUser$$serializer;)
CHECKCAST CHECKCAST
INVOKESPECIAL (kotlinx/serialization/internal/SerialClassDescImpl, <init>, (Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;)V) LDC (2)
INVOKESPECIAL (kotlinx/serialization/internal/SerialClassDescImpl, <init>, (Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;I)V)
ASTORE (0) ASTORE (0)
ALOAD (0) ALOAD (0)
LDC (firstName) LDC (firstName)