From eae588abeaad5303a70e8c4764956a52af0b60d7 Mon Sep 17 00:00:00 2001 From: Leonid Startsev Date: Mon, 29 Aug 2022 17:24:48 +0200 Subject: [PATCH] Improve line numbers handling in serialization intrinsic Fix nullable serializers on top-level & method with incorrect receiver Improve handling of different runtime versions --- .../ir/SerializationJvmIrIntrinsicSupport.kt | 29 +++-- .../testData/codegen/Intrinsics.asm.ir.txt | 70 ++++++------ .../testData/codegen/Intrinsics.asm.txt | 108 +++++++++++------- .../testData/codegen/Intrinsics.kt | 2 + 4 files changed, 125 insertions(+), 84 deletions(-) diff --git a/plugins/kotlinx-serialization/kotlinx-serialization.backend/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializationJvmIrIntrinsicSupport.kt b/plugins/kotlinx-serialization/kotlinx-serialization.backend/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializationJvmIrIntrinsicSupport.kt index e7683332477..2b8f25f2982 100644 --- a/plugins/kotlinx-serialization/kotlinx-serialization.backend/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializationJvmIrIntrinsicSupport.kt +++ b/plugins/kotlinx-serialization/kotlinx-serialization.backend/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializationJvmIrIntrinsicSupport.kt @@ -14,6 +14,7 @@ import org.jetbrains.kotlin.backend.jvm.mapping.mapClass import org.jetbrains.kotlin.codegen.AsmUtil import org.jetbrains.kotlin.codegen.inline.ReifiedTypeInliner import org.jetbrains.kotlin.codegen.inline.newMethodNodeWithCorrectStackSize +import org.jetbrains.kotlin.config.ApiVersion import org.jetbrains.kotlin.descriptors.findClassAcrossModuleDependencies import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrFunction @@ -34,6 +35,7 @@ import org.jetbrains.kotlinx.serialization.compiler.backend.jvm.kSerializerArray import org.jetbrains.kotlinx.serialization.compiler.backend.jvm.kSerializerType import org.jetbrains.kotlinx.serialization.compiler.backend.jvm.stringArrayType import org.jetbrains.kotlinx.serialization.compiler.backend.jvm.stringType +import org.jetbrains.kotlinx.serialization.compiler.diagnostic.VersionReader import org.jetbrains.kotlinx.serialization.compiler.resolve.SerialEntityNames.ENUM_SERIALIZER_FACTORY_FUNC_NAME import org.jetbrains.kotlinx.serialization.compiler.resolve.SerialEntityNames.MARKED_ENUM_SERIALIZER_FACTORY_FUNC_NAME import org.jetbrains.kotlinx.serialization.compiler.resolve.SerializersClassIds.contextSerializerId @@ -57,8 +59,7 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex object Simple : IntrinsicType(stubCallDescriptor) class WithModule(val storedIndex: Int) : - IntrinsicType(stubCallDescriptorWithModule) { - } + IntrinsicType(stubCallDescriptorWithModule) } companion object { @@ -68,7 +69,12 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex || method.typeParameters.size != 1 || method.valueParameters.isNotEmpty() ) return null - return ReifiedSerializerMethod(method.extensionReceiverParameter != null) + val receiver = method.extensionReceiverParameter + return if (receiver == null) + ReifiedSerializerMethod(withModule = false) + else if (receiver.type.classFqName?.asString() == "kotlinx.serialization.modules.SerializersModule") + ReifiedSerializerMethod(withModule = true) + else null } val serializersModuleType: Type = Type.getObjectType("kotlinx/serialization/modules/SerializersModule") @@ -95,7 +101,10 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex val storedIndex = frameMap.enterTemp(materialVal.type) mv.store(storedIndex, materialVal.type) IntrinsicType.WithModule(storedIndex) - } else IntrinsicType.Simple + } else { + codegen.markLineNumber(expression) + IntrinsicType.Simple + } SerializationJvmIrIntrinsicSupport(codegen.context).generateSerializerForType( argument, mv, @@ -124,8 +133,14 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex return module.findClassAcrossModuleDependencies(classId)?.let { jvmBackendContext.referenceClass(it) } } + private val currentVersion = VersionReader.getVersionsForCurrentModuleFromTrace(module, jvmBackendContext.state.bindingTrace) + ?.implementationVersion + override val runtimeHasEnumSerializerFactoryFunctions: Boolean - get() = false // TODO + get() = currentVersion != null && currentVersion > ApiVersion.parse("1.4.0")!! + + private val hasNewContextSerializerSignature: Boolean + get() = currentVersion != null && currentVersion >= ApiVersion.parse("1.2.0")!! private fun findTypeSerializerOrContext(argType: IrType): IrClassSymbol? = emptyGenerator.findTypeSerializerOrContextUnchecked(this, argType) @@ -243,8 +258,8 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex ) { genericArg -> assert(putReifyMarkerIfNeeded(genericArg, intrinsicType)) } - if (type.isMarkedNullable()) adapter.wrapStackValueIntoNullableSerializer() } + if (type.isMarkedNullable()) adapter.wrapStackValueIntoNullableSerializer() } } @@ -405,7 +420,7 @@ class SerializationJvmIrIntrinsicSupport(val jvmBackendContext: JvmBackendContex aconst(typeMapper.mapTypeCommon(kType, TypeMappingMode.GENERIC_ARGUMENT)) AsmUtil.wrapJavaClassIntoKClass(this) signature.append(AsmTypes.K_CLASS_TYPE.descriptor) - if (serializer.owner.classId == contextSerializerId && serializer.constructors.any { it.owner.valueParameters.size == 3 }) { // TODO: this isn't working with LAZY IR CLASS + if (serializer.owner.classId == contextSerializerId && hasNewContextSerializerSignature) { // append new additional arguments val fallbackDefaultSerializer = findTypeSerializer(this@SerializationJvmIrIntrinsicSupport, kType) if (fallbackDefaultSerializer != null && fallbackDefaultSerializer != serializer) { diff --git a/plugins/kotlinx-serialization/testData/codegen/Intrinsics.asm.ir.txt b/plugins/kotlinx-serialization/testData/codegen/Intrinsics.asm.ir.txt index 82faf5bdc64..123d9ab58c5 100644 --- a/plugins/kotlinx-serialization/testData/codegen/Intrinsics.asm.ir.txt +++ b/plugins/kotlinx-serialization/testData/codegen/Intrinsics.asm.ir.txt @@ -74,19 +74,19 @@ public final class IntrinsicsKt : java/lang/Object { public final static kotlinx.serialization.KSerializer listSer() public final static void test() { + LABEL (L0) + LINENUMBER (28) GETSTATIC (Simple, Companion, LSimple$Companion;) INVOKEVIRTUAL (Simple$Companion, serializer, ()Lkotlinx/serialization/KSerializer;) POP - LABEL (L0) + LABEL (L1) LINENUMBER (29) ICONST_0 ISTORE (0) - LABEL (L1) + LABEL (L2) + LINENUMBER (47) GETSTATIC (Simple, Companion, LSimple$Companion;) INVOKEVIRTUAL (Simple$Companion, serializer, ()Lkotlinx/serialization/KSerializer;) - LABEL (L2) - LINENUMBER (45) - NOP LABEL (L3) POP LABEL (L4) @@ -94,44 +94,40 @@ public final class IntrinsicsKt : java/lang/Object { ICONST_0 ISTORE (0) LABEL (L5) + LINENUMBER (48) GETSTATIC (Box, Companion, LBox$Companion;) GETSTATIC (Simple, Companion, LSimple$Companion;) INVOKEVIRTUAL (Simple$Companion, serializer, ()Lkotlinx/serialization/KSerializer;) INVOKEVIRTUAL (Box$Companion, serializer, (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;) LABEL (L6) - LINENUMBER (46) - NOP - LABEL (L7) POP - LABEL (L8) + LABEL (L7) LINENUMBER (31) ICONST_0 ISTORE (0) - LABEL (L9) + LABEL (L8) + LINENUMBER (49) GETSTATIC (Box, Companion, LBox$Companion;) GETSTATIC (Simple, Companion, LSimple$Companion;) INVOKEVIRTUAL (Simple$Companion, serializer, ()Lkotlinx/serialization/KSerializer;) INVOKEVIRTUAL (Box$Companion, serializer, (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;) - LABEL (L10) - LINENUMBER (47) - NOP - LABEL (L11) + LABEL (L9) POP - LABEL (L12) + LABEL (L10) LINENUMBER (32) ICONST_0 ISTORE (0) - LABEL (L13) + LABEL (L11) + LINENUMBER (50) NEW (kotlinx/serialization/internal/ArrayListSerializer) DUP GETSTATIC (Simple, Companion, LSimple$Companion;) INVOKEVIRTUAL (Simple$Companion, serializer, ()Lkotlinx/serialization/KSerializer;) INVOKESPECIAL (kotlinx/serialization/internal/ArrayListSerializer, , (Lkotlinx/serialization/KSerializer;)V) - LABEL (L14) - LINENUMBER (48) - NOP - LABEL (L15) + LABEL (L12) POP + LABEL (L13) + LINENUMBER (34) GETSTATIC (Box, Companion, LBox$Companion;) NEW (kotlinx/serialization/internal/ArrayListSerializer) DUP @@ -139,11 +135,12 @@ public final class IntrinsicsKt : java/lang/Object { INVOKESPECIAL (kotlinx/serialization/internal/ArrayListSerializer, , (Lkotlinx/serialization/KSerializer;)V) INVOKEVIRTUAL (Box$Companion, serializer, (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;) POP - LABEL (L16) + LABEL (L14) LINENUMBER (36) ICONST_0 ISTORE (0) - LABEL (L17) + LABEL (L15) + LINENUMBER (51) NEW (kotlinx/serialization/internal/ArrayListSerializer) DUP GETSTATIC (Box, Companion, LBox$Companion;) @@ -153,21 +150,23 @@ public final class IntrinsicsKt : java/lang/Object { INVOKESPECIAL (kotlinx/serialization/internal/ArrayListSerializer, , (Lkotlinx/serialization/KSerializer;)V) INVOKEVIRTUAL (Box$Companion, serializer, (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;) INVOKESPECIAL (kotlinx/serialization/internal/ArrayListSerializer, , (Lkotlinx/serialization/KSerializer;)V) - LABEL (L18) - LINENUMBER (49) - NOP - LABEL (L19) + LABEL (L16) POP + LABEL (L17) + LINENUMBER (38) GETSTATIC (kotlinx/serialization/internal/IntSerializer, INSTANCE, Lkotlinx/serialization/internal/IntSerializer;) POP + LABEL (L18) + LINENUMBER (40) GETSTATIC (SerializableObject, INSTANCE, LSerializableObject;) INVOKEVIRTUAL (SerializableObject, serializer, ()Lkotlinx/serialization/KSerializer;) POP - LABEL (L20) + LABEL (L19) LINENUMBER (42) ICONST_0 ISTORE (0) - LABEL (L21) + LABEL (L20) + LINENUMBER (52) NEW (kotlinx/serialization/internal/ArrayListSerializer) DUP NEW (kotlinx/serialization/internal/ArrayListSerializer) @@ -178,13 +177,16 @@ public final class IntrinsicsKt : java/lang/Object { INVOKESPECIAL (Box$$serializer, , (Lkotlinx/serialization/KSerializer;)V) INVOKESPECIAL (kotlinx/serialization/internal/ArrayListSerializer, , (Lkotlinx/serialization/KSerializer;)V) INVOKESPECIAL (kotlinx/serialization/internal/ArrayListSerializer, , (Lkotlinx/serialization/KSerializer;)V) - LABEL (L22) - LINENUMBER (50) - NOP - LABEL (L23) + LABEL (L21) POP - LABEL (L24) - LINENUMBER (43) + LABEL (L22) + LINENUMBER (44) + GETSTATIC (Simple, Companion, LSimple$Companion;) + INVOKEVIRTUAL (Simple$Companion, serializer, ()Lkotlinx/serialization/KSerializer;) + INVOKESTATIC (kotlinx/serialization/builtins/BuiltinSerializersKt, getNullable, (Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer;) + POP + LABEL (L23) + LINENUMBER (45) RETURN } } diff --git a/plugins/kotlinx-serialization/testData/codegen/Intrinsics.asm.txt b/plugins/kotlinx-serialization/testData/codegen/Intrinsics.asm.txt index 12dfb0a00a5..085f50fe441 100644 --- a/plugins/kotlinx-serialization/testData/codegen/Intrinsics.asm.txt +++ b/plugins/kotlinx-serialization/testData/codegen/Intrinsics.asm.txt @@ -76,55 +76,55 @@ public final class IntrinsicsKt : java/lang/Object { LDC (LSimple;) INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;)Lkotlin/reflect/KType;) LABEL (L2) - LINENUMBER (51) + LINENUMBER (53) INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;) ASTORE (1) LABEL (L3) ICONST_0 ISTORE (2) LABEL (L4) - LINENUMBER (52) + LINENUMBER (54) ALOAD (1) LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer) INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V) LABEL (L5) - LINENUMBER (51) + LINENUMBER (53) NOP LABEL (L6) LINENUMBER (29) ICONST_0 ISTORE (0) LABEL (L7) - LINENUMBER (53) + LINENUMBER (55) ICONST_0 ISTORE (1) LABEL (L8) LDC (LSimple;) INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;)Lkotlin/reflect/KType;) LABEL (L9) - LINENUMBER (54) + LINENUMBER (56) INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;) ASTORE (2) LABEL (L10) ICONST_0 ISTORE (3) LABEL (L11) - LINENUMBER (55) + LINENUMBER (57) ALOAD (2) LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer) INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V) LABEL (L12) - LINENUMBER (54) + LINENUMBER (56) NOP LABEL (L13) - LINENUMBER (53) + LINENUMBER (55) NOP LABEL (L14) LINENUMBER (30) ICONST_0 ISTORE (0) LABEL (L15) - LINENUMBER (56) + LINENUMBER (58) ICONST_0 ISTORE (1) LABEL (L16) @@ -135,29 +135,29 @@ public final class IntrinsicsKt : java/lang/Object { INVOKEVIRTUAL (kotlin/reflect/KTypeProjection$Companion, invariant, (Lkotlin/reflect/KType;)Lkotlin/reflect/KTypeProjection;) INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;Lkotlin/reflect/KTypeProjection;)Lkotlin/reflect/KType;) LABEL (L17) - LINENUMBER (57) + LINENUMBER (59) INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;) ASTORE (2) LABEL (L18) ICONST_0 ISTORE (3) LABEL (L19) - LINENUMBER (58) + LINENUMBER (60) ALOAD (2) LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer) INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V) LABEL (L20) - LINENUMBER (57) + LINENUMBER (59) NOP LABEL (L21) - LINENUMBER (56) + LINENUMBER (58) NOP LABEL (L22) LINENUMBER (31) ICONST_0 ISTORE (0) LABEL (L23) - LINENUMBER (59) + LINENUMBER (61) ICONST_0 ISTORE (1) LABEL (L24) @@ -168,29 +168,29 @@ public final class IntrinsicsKt : java/lang/Object { INVOKEVIRTUAL (kotlin/reflect/KTypeProjection$Companion, invariant, (Lkotlin/reflect/KType;)Lkotlin/reflect/KTypeProjection;) INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;Lkotlin/reflect/KTypeProjection;)Lkotlin/reflect/KType;) LABEL (L25) - LINENUMBER (60) + LINENUMBER (62) INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;) ASTORE (2) LABEL (L26) ICONST_0 ISTORE (3) LABEL (L27) - LINENUMBER (61) + LINENUMBER (63) ALOAD (2) LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer) INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V) LABEL (L28) - LINENUMBER (60) + LINENUMBER (62) NOP LABEL (L29) - LINENUMBER (59) + LINENUMBER (61) NOP LABEL (L30) LINENUMBER (32) ICONST_0 ISTORE (0) LABEL (L31) - LINENUMBER (62) + LINENUMBER (64) ICONST_0 ISTORE (1) LABEL (L32) @@ -201,22 +201,22 @@ public final class IntrinsicsKt : java/lang/Object { INVOKEVIRTUAL (kotlin/reflect/KTypeProjection$Companion, invariant, (Lkotlin/reflect/KType;)Lkotlin/reflect/KTypeProjection;) INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;Lkotlin/reflect/KTypeProjection;)Lkotlin/reflect/KType;) LABEL (L33) - LINENUMBER (63) + LINENUMBER (65) INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;) ASTORE (2) LABEL (L34) ICONST_0 ISTORE (3) LABEL (L35) - LINENUMBER (64) + LINENUMBER (66) ALOAD (2) LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer) INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V) LABEL (L36) - LINENUMBER (63) + LINENUMBER (65) NOP LABEL (L37) - LINENUMBER (62) + LINENUMBER (64) NOP LABEL (L38) LINENUMBER (34) @@ -234,26 +234,26 @@ public final class IntrinsicsKt : java/lang/Object { INVOKEVIRTUAL (kotlin/reflect/KTypeProjection$Companion, invariant, (Lkotlin/reflect/KType;)Lkotlin/reflect/KTypeProjection;) INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;Lkotlin/reflect/KTypeProjection;)Lkotlin/reflect/KType;) LABEL (L40) - LINENUMBER (65) + LINENUMBER (67) INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;) ASTORE (1) LABEL (L41) ICONST_0 ISTORE (2) LABEL (L42) - LINENUMBER (66) + LINENUMBER (68) ALOAD (1) LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer) INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V) LABEL (L43) - LINENUMBER (65) + LINENUMBER (67) NOP LABEL (L44) LINENUMBER (36) ICONST_0 ISTORE (0) LABEL (L45) - LINENUMBER (67) + LINENUMBER (69) ICONST_0 ISTORE (1) LABEL (L46) @@ -272,22 +272,22 @@ public final class IntrinsicsKt : java/lang/Object { INVOKEVIRTUAL (kotlin/reflect/KTypeProjection$Companion, invariant, (Lkotlin/reflect/KType;)Lkotlin/reflect/KTypeProjection;) INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;Lkotlin/reflect/KTypeProjection;)Lkotlin/reflect/KType;) LABEL (L47) - LINENUMBER (68) + LINENUMBER (70) INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;) ASTORE (2) LABEL (L48) ICONST_0 ISTORE (3) LABEL (L49) - LINENUMBER (69) + LINENUMBER (71) ALOAD (2) LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer) INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V) LABEL (L50) - LINENUMBER (68) + LINENUMBER (70) NOP LABEL (L51) - LINENUMBER (67) + LINENUMBER (69) NOP LABEL (L52) LINENUMBER (38) @@ -297,19 +297,19 @@ public final class IntrinsicsKt : java/lang/Object { GETSTATIC (java/lang/Integer, TYPE, Ljava/lang/Class;) INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;)Lkotlin/reflect/KType;) LABEL (L54) - LINENUMBER (70) + LINENUMBER (72) INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;) ASTORE (1) LABEL (L55) ICONST_0 ISTORE (2) LABEL (L56) - LINENUMBER (71) + LINENUMBER (73) ALOAD (1) LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer) INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V) LABEL (L57) - LINENUMBER (70) + LINENUMBER (72) NOP LABEL (L58) LINENUMBER (40) @@ -319,26 +319,26 @@ public final class IntrinsicsKt : java/lang/Object { LDC (LSerializableObject;) INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;)Lkotlin/reflect/KType;) LABEL (L60) - LINENUMBER (72) + LINENUMBER (74) INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;) ASTORE (1) LABEL (L61) ICONST_0 ISTORE (2) LABEL (L62) - LINENUMBER (73) + LINENUMBER (75) ALOAD (1) LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer) INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V) LABEL (L63) - LINENUMBER (72) + LINENUMBER (74) NOP LABEL (L64) LINENUMBER (42) ICONST_0 ISTORE (0) LABEL (L65) - LINENUMBER (74) + LINENUMBER (76) ICONST_0 ISTORE (1) LABEL (L66) @@ -357,25 +357,47 @@ public final class IntrinsicsKt : java/lang/Object { INVOKEVIRTUAL (kotlin/reflect/KTypeProjection$Companion, invariant, (Lkotlin/reflect/KType;)Lkotlin/reflect/KTypeProjection;) INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Ljava/lang/Class;Lkotlin/reflect/KTypeProjection;)Lkotlin/reflect/KType;) LABEL (L67) - LINENUMBER (75) + LINENUMBER (77) INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;) ASTORE (2) LABEL (L68) ICONST_0 ISTORE (3) LABEL (L69) - LINENUMBER (76) + LINENUMBER (78) ALOAD (2) LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer) INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V) LABEL (L70) - LINENUMBER (75) + LINENUMBER (77) NOP LABEL (L71) - LINENUMBER (74) + LINENUMBER (76) NOP LABEL (L72) - LINENUMBER (43) + LINENUMBER (44) + ICONST_0 + ISTORE (0) + LABEL (L73) + LDC (LSimple;) + INVOKESTATIC (kotlin/jvm/internal/Reflection, nullableTypeOf, (Ljava/lang/Class;)Lkotlin/reflect/KType;) + LABEL (L74) + LINENUMBER (79) + INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;) + ASTORE (1) + LABEL (L75) + ICONST_0 + ISTORE (2) + LABEL (L76) + LINENUMBER (80) + ALOAD (1) + LDC (null cannot be cast to non-null type kotlinx.serialization.KSerializer) + INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V) + LABEL (L77) + LINENUMBER (79) + NOP + LABEL (L78) + LINENUMBER (45) RETURN } } diff --git a/plugins/kotlinx-serialization/testData/codegen/Intrinsics.kt b/plugins/kotlinx-serialization/testData/codegen/Intrinsics.kt index 80f9e52b551..a5069f94e72 100644 --- a/plugins/kotlinx-serialization/testData/codegen/Intrinsics.kt +++ b/plugins/kotlinx-serialization/testData/codegen/Intrinsics.kt @@ -40,4 +40,6 @@ fun test() { serializer() listSer>>() + + serializer() } \ No newline at end of file