From b43e5a5e7dcb9cc04515f2ab24fccf02b0bac9cb Mon Sep 17 00:00:00 2001 From: Leonid Startsev Date: Tue, 1 Jun 2021 16:14:40 +0300 Subject: [PATCH] fixup! Fix tests and review notes --- .../compiler/backend/ir/GeneratorHelpers.kt | 11 +-- .../testData/codegen/Sealed.ir.txt | 70 +++++++++---------- .../testData/codegen/Sealed.txt | 38 +++++----- 3 files changed, 61 insertions(+), 58 deletions(-) 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 d5499459b90..bee6b3a280e 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 @@ -938,10 +938,8 @@ interface IrBuilderExtension { var args: List var typeArgs: List val thisIrType = kType.toIrType() - val hasNewCtxSerCtor = - serializerClassOriginal.classId == contextSerializerId && compilerContext.referenceConstructors(serializerClass.fqNameSafe) - .any { it.owner.valueParameters.size == 3 } var needToCopyAnnotations = false + when (serializerClassOriginal.classId) { polymorphicSerializerId -> { needToCopyAnnotations = true @@ -952,6 +950,10 @@ interface IrBuilderExtension { args = listOf(classReference(kType)) typeArgs = listOf(thisIrType) + val hasNewCtxSerCtor = + serializerClassOriginal.classId == contextSerializerId && compilerContext.referenceConstructors(serializerClass.fqNameSafe) + .any { it.owner.valueParameters.size == 3 } + if (hasNewCtxSerCtor) { // new signature of context serializer args = args + mutableListOf().apply { @@ -1115,7 +1117,8 @@ interface IrBuilderExtension { private fun IrConstructor.lastArgumentIsAnnotationArray(): Boolean { val lastArgType = valueParameters.lastOrNull()?.type - return (lastArgType != null && (lastArgType as? IrSimpleType)?.arguments?.firstOrNull()?.typeOrNull?.classFqName?.toString() == "kotlin.Annotation") + if (lastArgType == null || !lastArgType.isArray()) return false + return ((lastArgType as? IrSimpleType)?.arguments?.firstOrNull()?.typeOrNull?.classFqName?.toString() == "kotlin.Annotation") } private fun IrBuilderWithScope.wrapperClassReference(classType: KotlinType): IrClassReference { diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/codegen/Sealed.ir.txt b/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/codegen/Sealed.ir.txt index 8357841871f..500076c5d44 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/codegen/Sealed.ir.txt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/codegen/Sealed.ir.txt @@ -9,7 +9,7 @@ public final class Container$$serializer : java/lang/Object, kotlinx/serializati INVOKESPECIAL (Container$$serializer, , ()V) PUTSTATIC (INSTANCE, LContainer$$serializer;) LABEL (L0) - LINENUMBER (12) + LINENUMBER (13) NEW DUP LDC (Container) @@ -26,13 +26,13 @@ public final class Container$$serializer : java/lang/Object, kotlinx/serializati CHECKCAST PUTSTATIC (descriptor, Lkotlinx/serialization/descriptors/SerialDescriptor;) LABEL (L1) - LINENUMBER (13) + LINENUMBER (14) RETURN } private void () { LABEL (L0) - LINENUMBER (12) + LINENUMBER (13) ALOAD (0) INVOKESPECIAL (java/lang/Object, , ()V) RETURN @@ -41,7 +41,7 @@ public final class Container$$serializer : java/lang/Object, kotlinx/serializati public kotlinx.serialization.KSerializer[] childSerializers() { LABEL (L0) - LINENUMBER (12) + LINENUMBER (13) ICONST_1 ANEWARRAY ASTORE (1) @@ -61,7 +61,7 @@ public final class Container$$serializer : java/lang/Object, kotlinx/serializati LDC (decoder) INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNullParameter, (Ljava/lang/Object;Ljava/lang/String;)V) LABEL (L1) - LINENUMBER (12) + LINENUMBER (13) ALOAD (0) INVOKEVIRTUAL (Container$$serializer, getDescriptor, ()Lkotlinx/serialization/descriptors/SerialDescriptor;) ASTORE (2) @@ -145,7 +145,7 @@ public final class Container$$serializer : java/lang/Object, kotlinx/serializati public java.lang.Object deserialize(kotlinx.serialization.encoding.Decoder decoder) { LABEL (L0) - LINENUMBER (12) + LINENUMBER (13) ALOAD (0) ALOAD (1) INVOKEVIRTUAL (Container$$serializer, deserialize, (Lkotlinx/serialization/encoding/Decoder;)LContainer;) @@ -165,7 +165,7 @@ public final class Container$$serializer : java/lang/Object, kotlinx/serializati public final class Container$Companion : java/lang/Object { private void () { LABEL (L0) - LINENUMBER (12) + LINENUMBER (13) ALOAD (0) INVOKESPECIAL (java/lang/Object, , ()V) RETURN @@ -182,7 +182,7 @@ public final class Container$Companion : java/lang/Object { public final kotlinx.serialization.KSerializer serializer() { LABEL (L0) - LINENUMBER (12) + LINENUMBER (13) GETSTATIC (INSTANCE, LContainer$$serializer;) CHECKCAST ARETURN @@ -210,11 +210,11 @@ public final class Container : java/lang/Object { LDC (r) INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNullParameter, (Ljava/lang/Object;Ljava/lang/String;)V) LABEL (L1) - LINENUMBER (12) + LINENUMBER (13) ALOAD (0) INVOKESPECIAL (java/lang/Object, , ()V) LABEL (L2) - LINENUMBER (13) + LINENUMBER (14) ALOAD (0) ALOAD (1) PUTFIELD (r, LResult;) @@ -224,7 +224,7 @@ public final class Container : java/lang/Object { public void (int seen1, Result r, kotlinx.serialization.internal.SerializationConstructorMarker serializationConstructorMarker) { LABEL (L0) - LINENUMBER (12) + LINENUMBER (13) ICONST_1 ICONST_1 ILOAD (1) @@ -259,7 +259,7 @@ public final class Container : java/lang/Object { LDC (serialDesc) INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNullParameter, (Ljava/lang/Object;Ljava/lang/String;)V) LABEL (L1) - LINENUMBER (12) + LINENUMBER (13) ALOAD (1) ALOAD (2) ICONST_0 @@ -296,7 +296,7 @@ final class Result$Companion$$cachedSerializer$delegate$2 : kotlin/jvm/internal/ public final kotlinx.serialization.KSerializer invoke() { LABEL (L0) - LINENUMBER (6) + LINENUMBER (7) NEW DUP LDC (Result) @@ -342,7 +342,7 @@ final class Result$Companion$$cachedSerializer$delegate$2 : kotlin/jvm/internal/ public java.lang.Object invoke() { LABEL (L0) - LINENUMBER (6) + LINENUMBER (7) ALOAD (0) INVOKEVIRTUAL (Result$Companion$$cachedSerializer$delegate$2, invoke, ()Lkotlinx/serialization/KSerializer;) ARETURN @@ -353,7 +353,7 @@ final class Result$Companion$$cachedSerializer$delegate$2 : kotlin/jvm/internal/ public final class Result$Companion : java/lang/Object { private void () { LABEL (L0) - LINENUMBER (6) + LINENUMBER (7) ALOAD (0) INVOKESPECIAL (java/lang/Object, , ()V) RETURN @@ -370,7 +370,7 @@ public final class Result$Companion : java/lang/Object { public final kotlinx.serialization.KSerializer serializer() { LABEL (L0) - LINENUMBER (6) + LINENUMBER (7) INVOKESTATIC (Result, access$get$cachedSerializer$delegate$cp, ()Lkotlin/Lazy;) INVOKEINTERFACE (kotlin/Lazy, getValue, ()Ljava/lang/Object;) CHECKCAST @@ -401,7 +401,7 @@ final class Result$Err$$cachedSerializer$delegate$2 : kotlin/jvm/internal/Lambda public final kotlinx.serialization.KSerializer invoke() { LABEL (L0) - LINENUMBER (9) + LINENUMBER (10) NEW DUP LDC (Result.Err) @@ -414,7 +414,7 @@ final class Result$Err$$cachedSerializer$delegate$2 : kotlin/jvm/internal/Lambda public java.lang.Object invoke() { LABEL (L0) - LINENUMBER (9) + LINENUMBER (10) ALOAD (0) INVOKEVIRTUAL (Result$Err$$cachedSerializer$delegate$2, invoke, ()Lkotlinx/serialization/KSerializer;) ARETURN @@ -433,7 +433,7 @@ public final class Result$Err : Result { INVOKESPECIAL (Result$Err, , ()V) PUTSTATIC (INSTANCE, LResult$Err;) LABEL (L0) - LINENUMBER (9) + LINENUMBER (10) GETSTATIC (PUBLICATION, Lkotlin/LazyThreadSafetyMode;) GETSTATIC (INSTANCE, LResult$Err$$cachedSerializer$delegate$2;) CHECKCAST @@ -444,7 +444,7 @@ public final class Result$Err : Result { private void () { LABEL (L0) - LINENUMBER (9) + LINENUMBER (10) ALOAD (0) ACONST_NULL INVOKESPECIAL (Result, , (Lkotlin/jvm/internal/DefaultConstructorMarker;)V) @@ -454,7 +454,7 @@ public final class Result$Err : Result { public final kotlinx.serialization.KSerializer serializer() { LABEL (L0) - LINENUMBER (9) + LINENUMBER (10) GETSTATIC ($cachedSerializer$delegate, Lkotlin/Lazy;) INVOKEINTERFACE (kotlin/Lazy, getValue, ()Ljava/lang/Object;) CHECKCAST @@ -474,7 +474,7 @@ public final class Result$OK$$serializer : java/lang/Object, kotlinx/serializati INVOKESPECIAL (Result$OK$$serializer, , ()V) PUTSTATIC (INSTANCE, LResult$OK$$serializer;) LABEL (L0) - LINENUMBER (8) + LINENUMBER (9) NEW DUP LDC (Result.OK) @@ -495,7 +495,7 @@ public final class Result$OK$$serializer : java/lang/Object, kotlinx/serializati private void () { LABEL (L0) - LINENUMBER (8) + LINENUMBER (9) ALOAD (0) INVOKESPECIAL (java/lang/Object, , ()V) RETURN @@ -504,7 +504,7 @@ public final class Result$OK$$serializer : java/lang/Object, kotlinx/serializati public kotlinx.serialization.KSerializer[] childSerializers() { LABEL (L0) - LINENUMBER (8) + LINENUMBER (9) ICONST_1 ANEWARRAY ASTORE (1) @@ -524,7 +524,7 @@ public final class Result$OK$$serializer : java/lang/Object, kotlinx/serializati LDC (decoder) INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNullParameter, (Ljava/lang/Object;Ljava/lang/String;)V) LABEL (L1) - LINENUMBER (8) + LINENUMBER (9) ALOAD (0) INVOKEVIRTUAL (Result$OK$$serializer, getDescriptor, ()Lkotlinx/serialization/descriptors/SerialDescriptor;) ASTORE (2) @@ -599,7 +599,7 @@ public final class Result$OK$$serializer : java/lang/Object, kotlinx/serializati public java.lang.Object deserialize(kotlinx.serialization.encoding.Decoder decoder) { LABEL (L0) - LINENUMBER (8) + LINENUMBER (9) ALOAD (0) ALOAD (1) INVOKEVIRTUAL (Result$OK$$serializer, deserialize, (Lkotlinx/serialization/encoding/Decoder;)LResult$OK;) @@ -619,7 +619,7 @@ public final class Result$OK$$serializer : java/lang/Object, kotlinx/serializati public final class Result$OK$Companion : java/lang/Object { private void () { LABEL (L0) - LINENUMBER (8) + LINENUMBER (9) ALOAD (0) INVOKESPECIAL (java/lang/Object, , ()V) RETURN @@ -636,7 +636,7 @@ public final class Result$OK$Companion : java/lang/Object { public final kotlinx.serialization.KSerializer serializer() { LABEL (L0) - LINENUMBER (8) + LINENUMBER (9) GETSTATIC (INSTANCE, LResult$OK$$serializer;) CHECKCAST ARETURN @@ -664,7 +664,7 @@ public final class Result$OK : Result { LDC (s) INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNullParameter, (Ljava/lang/Object;Ljava/lang/String;)V) LABEL (L1) - LINENUMBER (8) + LINENUMBER (9) ALOAD (0) ACONST_NULL INVOKESPECIAL (Result, , (Lkotlin/jvm/internal/DefaultConstructorMarker;)V) @@ -677,7 +677,7 @@ public final class Result$OK : Result { public void (int seen1, java.lang.String s, kotlinx.serialization.internal.SerializationConstructorMarker serializationConstructorMarker) { LABEL (L0) - LINENUMBER (8) + LINENUMBER (9) ICONST_1 ICONST_1 ILOAD (1) @@ -714,7 +714,7 @@ public final class Result$OK : Result { LDC (serialDesc) INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNullParameter, (Ljava/lang/Object;Ljava/lang/String;)V) LABEL (L1) - LINENUMBER (8) + LINENUMBER (9) ALOAD (0) CHECKCAST ALOAD (1) @@ -743,7 +743,7 @@ public abstract class Result : java/lang/Object { INVOKESPECIAL (Result$Companion, , (Lkotlin/jvm/internal/DefaultConstructorMarker;)V) PUTSTATIC (Companion, LResult$Companion;) LABEL (L0) - LINENUMBER (6) + LINENUMBER (7) GETSTATIC (PUBLICATION, Lkotlin/LazyThreadSafetyMode;) GETSTATIC (INSTANCE, LResult$Companion$$cachedSerializer$delegate$2;) CHECKCAST @@ -754,18 +754,18 @@ public abstract class Result : java/lang/Object { private void () { LABEL (L0) - LINENUMBER (6) + LINENUMBER (7) ALOAD (0) INVOKESPECIAL (java/lang/Object, , ()V) LABEL (L1) - LINENUMBER (7) + LINENUMBER (8) RETURN LABEL (L2) } public void (int seen1, kotlinx.serialization.internal.SerializationConstructorMarker serializationConstructorMarker) { LABEL (L0) - LINENUMBER (6) + LINENUMBER (7) ALOAD (0) INVOKESPECIAL (java/lang/Object, , ()V) RETURN diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/codegen/Sealed.txt b/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/codegen/Sealed.txt index 10c919ade27..a7b4761fc27 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/codegen/Sealed.txt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/codegen/Sealed.txt @@ -5,7 +5,7 @@ public final class Container$$serializer : java/lang/Object, kotlinx/serializati static void () { LABEL (L0) - LINENUMBER (13) + LINENUMBER (14) NEW DUP INVOKESPECIAL (Container$$serializer, , ()V) @@ -31,7 +31,7 @@ public final class Container$$serializer : java/lang/Object, kotlinx/serializati private void () { LABEL (L0) - LINENUMBER (13) + LINENUMBER (14) ALOAD (0) INVOKESPECIAL (java/lang/Object, , ()V) RETURN @@ -219,7 +219,7 @@ public final class Container$$serializer : java/lang/Object, kotlinx/serializati public java.lang.Object deserialize(kotlinx.serialization.encoding.Decoder p0) { LABEL (L0) - LINENUMBER (13) + LINENUMBER (14) ALOAD (0) ALOAD (1) INVOKEVIRTUAL (Container$$serializer, deserialize, (Lkotlinx/serialization/encoding/Decoder;)LContainer;) @@ -238,7 +238,7 @@ public final class Container$$serializer : java/lang/Object, kotlinx/serializati public final class Container$Companion : java/lang/Object { private void () { LABEL (L0) - LINENUMBER (13) + LINENUMBER (14) ALOAD (0) INVOKESPECIAL (java/lang/Object, , ()V) RETURN @@ -247,7 +247,7 @@ public final class Container$Companion : java/lang/Object { public void (kotlin.jvm.internal.DefaultConstructorMarker $constructor_marker) { LABEL (L0) - LINENUMBER (13) + LINENUMBER (14) ALOAD (0) INVOKESPECIAL (Container$Companion, , ()V) RETURN @@ -283,7 +283,7 @@ public final class Container : java/lang/Object { LDC (r) INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNullParameter, (Ljava/lang/Object;Ljava/lang/String;)V) LABEL (L1) - LINENUMBER (13) + LINENUMBER (14) ALOAD (0) INVOKESPECIAL (java/lang/Object, , ()V) ALOAD (0) @@ -455,7 +455,7 @@ public final class Result$Companion : java/lang/Object { private void () { LABEL (L0) - LINENUMBER (7) + LINENUMBER (8) ALOAD (0) INVOKESPECIAL (java/lang/Object, , ()V) RETURN @@ -464,7 +464,7 @@ public final class Result$Companion : java/lang/Object { public void (kotlin.jvm.internal.DefaultConstructorMarker $constructor_marker) { LABEL (L0) - LINENUMBER (7) + LINENUMBER (8) ALOAD (0) INVOKESPECIAL (Result$Companion, , ()V) RETURN @@ -528,7 +528,7 @@ public final class Result$Err : Result { static void () { LABEL (L0) - LINENUMBER (9) + LINENUMBER (10) NEW DUP INVOKESPECIAL (Result$Err, , ()V) @@ -545,11 +545,11 @@ public final class Result$Err : Result { private void () { LABEL (L0) - LINENUMBER (9) + LINENUMBER (10) ALOAD (0) ACONST_NULL LABEL (L1) - LINENUMBER (9) + LINENUMBER (10) INVOKESPECIAL (Result, , (Lkotlin/jvm/internal/DefaultConstructorMarker;)V) RETURN LABEL (L2) @@ -572,7 +572,7 @@ public final class Result$OK$$serializer : java/lang/Object, kotlinx/serializati static void () { LABEL (L0) - LINENUMBER (8) + LINENUMBER (9) NEW DUP INVOKESPECIAL (Result$OK$$serializer, , ()V) @@ -598,7 +598,7 @@ public final class Result$OK$$serializer : java/lang/Object, kotlinx/serializati private void () { LABEL (L0) - LINENUMBER (8) + LINENUMBER (9) ALOAD (0) INVOKESPECIAL (java/lang/Object, , ()V) RETURN @@ -685,7 +685,7 @@ public final class Result$OK$$serializer : java/lang/Object, kotlinx/serializati public java.lang.Object deserialize(kotlinx.serialization.encoding.Decoder p0) { LABEL (L0) - LINENUMBER (8) + LINENUMBER (9) ALOAD (0) ALOAD (1) INVOKEVIRTUAL (Result$OK$$serializer, deserialize, (Lkotlinx/serialization/encoding/Decoder;)LResult$OK;) @@ -704,7 +704,7 @@ public final class Result$OK$$serializer : java/lang/Object, kotlinx/serializati public final class Result$OK$Companion : java/lang/Object { private void () { LABEL (L0) - LINENUMBER (8) + LINENUMBER (9) ALOAD (0) INVOKESPECIAL (java/lang/Object, , ()V) RETURN @@ -713,7 +713,7 @@ public final class Result$OK$Companion : java/lang/Object { public void (kotlin.jvm.internal.DefaultConstructorMarker $constructor_marker) { LABEL (L0) - LINENUMBER (8) + LINENUMBER (9) ALOAD (0) INVOKESPECIAL (Result$OK$Companion, , ()V) RETURN @@ -749,7 +749,7 @@ public final class Result$OK : Result { LDC (s) INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNullParameter, (Ljava/lang/Object;Ljava/lang/String;)V) LABEL (L1) - LINENUMBER (8) + LINENUMBER (9) ALOAD (0) ACONST_NULL INVOKESPECIAL (Result, , (Lkotlin/jvm/internal/DefaultConstructorMarker;)V) @@ -827,7 +827,7 @@ public abstract class Result : java/lang/Object { private void () { LABEL (L0) - LINENUMBER (7) + LINENUMBER (8) ALOAD (0) INVOKESPECIAL (java/lang/Object, , ()V) RETURN @@ -836,7 +836,7 @@ public abstract class Result : java/lang/Object { public void (kotlin.jvm.internal.DefaultConstructorMarker $constructor_marker) { LABEL (L0) - LINENUMBER (7) + LINENUMBER (8) ALOAD (0) INVOKESPECIAL (Result, , ()V) RETURN