Improve line numbers handling in serialization intrinsic

Fix nullable serializers on top-level & method with incorrect receiver

Improve handling of different runtime versions
This commit is contained in:
Leonid Startsev
2022-08-29 17:24:48 +02:00
committed by Space
parent aac9a06474
commit eae588abea
4 changed files with 125 additions and 84 deletions
@@ -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<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
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<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
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<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
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<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
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<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
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<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
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<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
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<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
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<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
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<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
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<T of kotlinx.serialization.internal.Platform_commonKt.cast>)
INVOKESTATIC (kotlin/jvm/internal/Intrinsics, checkNotNull, (Ljava/lang/Object;Ljava/lang/String;)V)
LABEL (L77)
LINENUMBER (79)
NOP
LABEL (L78)
LINENUMBER (45)
RETURN
}
}