From 6c6f2ccacd8c115416636daf1131c09cfc65ca26 Mon Sep 17 00:00:00 2001 From: Leonid Startsev Date: Mon, 18 Dec 2023 19:04:30 +0100 Subject: [PATCH] Handle non-reified type parameters of function inside serializer() intrinsic to match an error message thrown from KType-based serializer(). Fixes https://github.com/Kotlin/kotlinx.serialization/issues/2528 --- .../ir/SerializationJvmIrIntrinsicSupport.kt | 47 +++--- .../testData/boxIr/intrinsicsNonReified.kt | 43 ++++++ .../codegen/IntrinsicsNonReified.asm.fir.txt | 86 +++++++++++ .../codegen/IntrinsicsNonReified.asm.ir.txt | 86 +++++++++++ .../codegen/IntrinsicsNonReified.asm.txt | 141 ++++++++++++++++++ .../testData/codegen/IntrinsicsNonReified.kt | 14 ++ ...mLikeInstructionsListingTestGenerated.java | 6 + ...mLikeInstructionsListingTestGenerated.java | 6 + ...tionFirLightTreeBlackBoxTestGenerated.java | 6 + ...mLikeInstructionsListingTestGenerated.java | 6 + .../SerializationIrBoxTestGenerated.java | 6 + 11 files changed, 429 insertions(+), 18 deletions(-) create mode 100644 plugins/kotlinx-serialization/testData/boxIr/intrinsicsNonReified.kt create mode 100644 plugins/kotlinx-serialization/testData/codegen/IntrinsicsNonReified.asm.fir.txt create mode 100644 plugins/kotlinx-serialization/testData/codegen/IntrinsicsNonReified.asm.ir.txt create mode 100644 plugins/kotlinx-serialization/testData/codegen/IntrinsicsNonReified.asm.txt create mode 100644 plugins/kotlinx-serialization/testData/codegen/IntrinsicsNonReified.kt 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 9e9b976924f..ef702a7ffa6 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 @@ -29,7 +29,6 @@ import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.load.kotlin.TypeMappingMode import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.resolve.jvm.AsmTypes -import org.jetbrains.kotlin.types.model.KotlinTypeMarker import org.jetbrains.kotlinx.serialization.compiler.backend.jvm.* import org.jetbrains.kotlinx.serialization.compiler.backend.jvm.annotationArrayType import org.jetbrains.kotlinx.serialization.compiler.backend.jvm.doubleAnnotationArrayType @@ -250,16 +249,34 @@ class SerializationJvmIrIntrinsicSupport( return false } - private fun generateThrowOnStarProjection(parentType: IrSimpleType, adapter: InstructionAdapter) { - val iaeName = "java/lang/IllegalArgumentException" - with(adapter) { - anew(Type.getObjectType(iaeName)) - dup() - aconst("Star projections in type arguments are not allowed, but had ${parentType.render()}") - invokespecial(iaeName, "", "(Ljava/lang/String;)V", false) - checkcast(Type.getObjectType("java/lang/Throwable")) - athrow() + private val iaeName = "java/lang/IllegalArgumentException" + + private fun InstructionAdapter.throwIae(message: String) { + anew(Type.getObjectType(iaeName)) + dup() + aconst(message) + invokespecial(iaeName, "", "(Ljava/lang/String;)V", false) + checkcast(Type.getObjectType("java/lang/Throwable")) + athrow() + } + + private fun IrTypeArgument.argumentTypeOrGenerateException(ownerType: IrSimpleType, adapter: InstructionAdapter): IrType? { + val argType = this.typeOrNull + if (argType == null) { + adapter.throwIae("Star projections in type arguments are not allowed, but had ${ownerType.render()}") + return null } + val classifier = argType.classifierOrNull + if (classifier is IrTypeParameterSymbol && !classifier.owner.isReified) { + val fullName = argType.render() // T of + val name = classifier.owner.name.asString() + val message = "Captured type parameter $fullName from generic non-reified function. " + + "Such functionality cannot be supported because $name is erased, either specify serializer explicitly or make " + + "calling function inline with reified $name." + adapter.throwIae(message) + return null + } + return argType } fun generateSerializerForType( @@ -278,10 +295,7 @@ class SerializationJvmIrIntrinsicSupport( val companionType = if (typeDescriptor.isSerializableObject) typeDescriptor else typeDescriptor.companionObject()!! support.instantiateObject(adapter, companionType.symbol) val args = (type as IrSimpleType).arguments.map { - it.typeOrNull ?: run { - generateThrowOnStarProjection(type, adapter) - return - } + it.argumentTypeOrGenerateException(type, adapter) ?: return } args.forEach { generateSerializerForType(it, adapter, intrinsicType) } val signature = kSerializerType.descriptor.repeat(args.size) @@ -337,10 +351,7 @@ class SerializationJvmIrIntrinsicSupport( } // serializer is not singleton object and shall be instantiated val typeArgumentsAsTypes = (kType as IrSimpleType).arguments.map { - it.typeOrNull ?: run { - generateThrowOnStarProjection(kType, iv) - return false - } + it.argumentTypeOrGenerateException(kType, iv) ?: return false } val argSerializers = typeArgumentsAsTypes.map { argType -> // check if any type argument is not serializable diff --git a/plugins/kotlinx-serialization/testData/boxIr/intrinsicsNonReified.kt b/plugins/kotlinx-serialization/testData/boxIr/intrinsicsNonReified.kt new file mode 100644 index 00000000000..187bfceb2b6 --- /dev/null +++ b/plugins/kotlinx-serialization/testData/boxIr/intrinsicsNonReified.kt @@ -0,0 +1,43 @@ +// TARGET_BACKEND: JVM_IR + +// WITH_STDLIB + +import kotlinx.serialization.* +import kotlinx.serialization.json.* +import kotlinx.serialization.internal.* +import kotlinx.serialization.descriptors.* +import kotlinx.serialization.modules.* +import java.lang.AssertionError +import java.lang.IllegalArgumentException + +import kotlinx.serialization.* +import kotlinx.serialization.json.* +import kotlinx.serialization.modules.* +import kotlin.reflect.typeOf + +@Serializable +class Box(val t: T) + +inline fun inner() = serializer() + +fun outer() = inner>() + +fun checkBlock(name: String, block:() -> Unit) { + try { + block() + } catch (e: IllegalArgumentException) { + if (!e.message!!.contains("Captured type parameter T of .IntrinsicsNonReifiedKt.outer from generic non-reified function.")) throw e + return + } + throw AssertionError("Expected exception to be thrown in block $name") +} + +fun box(): String { + checkBlock("string") { + outer() + } + checkBlock("list string") { + outer>() + } + return "OK" +} diff --git a/plugins/kotlinx-serialization/testData/codegen/IntrinsicsNonReified.asm.fir.txt b/plugins/kotlinx-serialization/testData/codegen/IntrinsicsNonReified.asm.fir.txt new file mode 100644 index 00000000000..1bf48b85a45 --- /dev/null +++ b/plugins/kotlinx-serialization/testData/codegen/IntrinsicsNonReified.asm.fir.txt @@ -0,0 +1,86 @@ +public final class Box$$serializer : java/lang/Object, kotlinx/serialization/internal/GeneratedSerializer { + private final kotlinx.serialization.descriptors.SerialDescriptor descriptor + + private final kotlinx.serialization.KSerializer typeSerial0 + + private void () + + public void (kotlinx.serialization.KSerializer typeSerial0) + + public final kotlinx.serialization.KSerializer[] childSerializers() + + public final Box deserialize(kotlinx.serialization.encoding.Decoder decoder) + + public java.lang.Object deserialize(kotlinx.serialization.encoding.Decoder decoder) + + public final kotlinx.serialization.descriptors.SerialDescriptor getDescriptor() + + private final kotlinx.serialization.KSerializer getTypeSerial0() + + public final void serialize(kotlinx.serialization.encoding.Encoder encoder, Box value) + + public void serialize(kotlinx.serialization.encoding.Encoder encoder, java.lang.Object value) + + public final kotlinx.serialization.KSerializer[] typeParametersSerializers() +} + +public final class Box$Companion : java/lang/Object { + private void () + + public void (kotlin.jvm.internal.DefaultConstructorMarker $constructor_marker) + + public final kotlinx.serialization.KSerializer serializer(kotlinx.serialization.KSerializer typeSerial0) +} + +public final class Box : java/lang/Object { + private final static kotlinx.serialization.descriptors.SerialDescriptor $cachedDescriptor + + public final static Box$Companion Companion + + private final java.lang.Object t + + static void () + + public void (java.lang.Object t) + + public void (int seen0, java.lang.Object t, kotlinx.serialization.internal.SerializationConstructorMarker serializationConstructorMarker) + + public final java.lang.Object getT() + + public final static void write$Self$main(Box self, kotlinx.serialization.encoding.CompositeEncoder output, kotlinx.serialization.descriptors.SerialDescriptor serialDesc, kotlinx.serialization.KSerializer typeSerial0) +} + +public final class IntrinsicsNonReifiedKt : java/lang/Object { + public final static kotlinx.serialization.KSerializer inner() { + ICONST_0 + ISTORE (0) + LABEL (L0) + LINENUMBER (12) + BIPUSH (6) + LDC (T) + INVOKESTATIC (kotlin/jvm/internal/Intrinsics, reifiedOperationMarker, (ILjava/lang/String;)V) + ACONST_NULL + LDC (kotlinx.serialization.serializer.simple) + INVOKESTATIC (kotlin/jvm/internal/MagicApiIntrinsics, voidMagicApiCall, (Ljava/lang/Object;)V) + INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;) + ARETURN + LABEL (L1) + } + + public final static kotlinx.serialization.KSerializer outer() { + LABEL (L0) + LINENUMBER (14) + ICONST_0 + ISTORE (0) + LABEL (L1) + LINENUMBER (16) + GETSTATIC (Box, Companion, LBox$Companion;) + NEW (java/lang/IllegalArgumentException) + DUP + LDC (Captured type parameter T of .IntrinsicsNonReifiedKt.outer from generic non-reified function. Such functionality cannot be supported because T is erased, either specify serializer explicitly or make calling function inline with reified T.) + INVOKESPECIAL (java/lang/IllegalArgumentException, , (Ljava/lang/String;)V) + CHECKCAST (java/lang/Throwable) + ATHROW + LABEL (L2) + } +} diff --git a/plugins/kotlinx-serialization/testData/codegen/IntrinsicsNonReified.asm.ir.txt b/plugins/kotlinx-serialization/testData/codegen/IntrinsicsNonReified.asm.ir.txt new file mode 100644 index 00000000000..f689f9820a5 --- /dev/null +++ b/plugins/kotlinx-serialization/testData/codegen/IntrinsicsNonReified.asm.ir.txt @@ -0,0 +1,86 @@ +public final class Box$$serializer : java/lang/Object, kotlinx/serialization/internal/GeneratedSerializer { + private final kotlinx.serialization.internal.PluginGeneratedSerialDescriptor descriptor + + private final kotlinx.serialization.KSerializer typeSerial0 + + private void () + + public void (kotlinx.serialization.KSerializer typeSerial0) + + public kotlinx.serialization.KSerializer[] childSerializers() + + public Box deserialize(kotlinx.serialization.encoding.Decoder decoder) + + public java.lang.Object deserialize(kotlinx.serialization.encoding.Decoder decoder) + + public kotlinx.serialization.descriptors.SerialDescriptor getDescriptor() + + private final kotlinx.serialization.KSerializer getTypeSerial0() + + public void serialize(kotlinx.serialization.encoding.Encoder encoder, Box value) + + public void serialize(kotlinx.serialization.encoding.Encoder encoder, java.lang.Object value) + + public kotlinx.serialization.KSerializer[] typeParametersSerializers() +} + +public final class Box$Companion : java/lang/Object { + private void () + + public void (kotlin.jvm.internal.DefaultConstructorMarker $constructor_marker) + + public final kotlinx.serialization.KSerializer serializer(kotlinx.serialization.KSerializer typeSerial0) +} + +public final class Box : java/lang/Object { + private final static kotlinx.serialization.descriptors.SerialDescriptor $cachedDescriptor + + public final static Box$Companion Companion + + private final java.lang.Object t + + static void () + + public void (java.lang.Object t) + + public void (int seen1, java.lang.Object t, kotlinx.serialization.internal.SerializationConstructorMarker serializationConstructorMarker) + + public final java.lang.Object getT() + + public final static void write$Self$main(Box self, kotlinx.serialization.encoding.CompositeEncoder output, kotlinx.serialization.descriptors.SerialDescriptor serialDesc, kotlinx.serialization.KSerializer typeSerial0) +} + +public final class IntrinsicsNonReifiedKt : java/lang/Object { + public final static kotlinx.serialization.KSerializer inner() { + ICONST_0 + ISTORE (0) + LABEL (L0) + LINENUMBER (12) + BIPUSH (6) + LDC (T) + INVOKESTATIC (kotlin/jvm/internal/Intrinsics, reifiedOperationMarker, (ILjava/lang/String;)V) + ACONST_NULL + LDC (kotlinx.serialization.serializer.simple) + INVOKESTATIC (kotlin/jvm/internal/MagicApiIntrinsics, voidMagicApiCall, (Ljava/lang/Object;)V) + INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;) + ARETURN + LABEL (L1) + } + + public final static kotlinx.serialization.KSerializer outer() { + LABEL (L0) + LINENUMBER (14) + ICONST_0 + ISTORE (0) + LABEL (L1) + LINENUMBER (16) + GETSTATIC (Box, Companion, LBox$Companion;) + NEW (java/lang/IllegalArgumentException) + DUP + LDC (Captured type parameter T of .IntrinsicsNonReifiedKt.outer from generic non-reified function. Such functionality cannot be supported because T is erased, either specify serializer explicitly or make calling function inline with reified T.) + INVOKESPECIAL (java/lang/IllegalArgumentException, , (Ljava/lang/String;)V) + CHECKCAST (java/lang/Throwable) + ATHROW + LABEL (L2) + } +} diff --git a/plugins/kotlinx-serialization/testData/codegen/IntrinsicsNonReified.asm.txt b/plugins/kotlinx-serialization/testData/codegen/IntrinsicsNonReified.asm.txt new file mode 100644 index 00000000000..b593c65c271 --- /dev/null +++ b/plugins/kotlinx-serialization/testData/codegen/IntrinsicsNonReified.asm.txt @@ -0,0 +1,141 @@ +public final class Box$$serializer : java/lang/Object, kotlinx/serialization/internal/GeneratedSerializer { + private final kotlinx.serialization.descriptors.SerialDescriptor $$serialDesc + + private kotlinx.serialization.KSerializer typeSerial0 + + private void () + + public void (kotlinx.serialization.KSerializer typeSerial0) + + public kotlinx.serialization.KSerializer[] childSerializers() + + public Box deserialize(kotlinx.serialization.encoding.Decoder decoder) + + public java.lang.Object deserialize(kotlinx.serialization.encoding.Decoder p0) + + public kotlinx.serialization.descriptors.SerialDescriptor getDescriptor() + + public void serialize(kotlinx.serialization.encoding.Encoder encoder, Box value) + + public void serialize(kotlinx.serialization.encoding.Encoder p0, java.lang.Object p1) + + public kotlinx.serialization.KSerializer[] typeParametersSerializers() +} + +public final class Box$Companion : java/lang/Object { + private void () + + public void (kotlin.jvm.internal.DefaultConstructorMarker $constructor_marker) + + public final kotlinx.serialization.KSerializer serializer(kotlinx.serialization.KSerializer typeSerial0) +} + +public final class Box : java/lang/Object { + private final static kotlinx.serialization.descriptors.SerialDescriptor $cachedDescriptor + + public final static Box$Companion Companion + + private final java.lang.Object t + + static void () + + public void (java.lang.Object t) + + public void (int seen1, java.lang.Object t, kotlinx.serialization.internal.SerializationConstructorMarker serializationConstructorMarker) + + public final java.lang.Object getT() + + public final static void write$Self$main(Box self, kotlinx.serialization.encoding.CompositeEncoder output, kotlinx.serialization.descriptors.SerialDescriptor serialDesc, kotlinx.serialization.KSerializer typeSerial0) +} + +public final class IntrinsicsNonReifiedKt : java/lang/Object { + public final static kotlinx.serialization.KSerializer inner() { + LDC (0) + ISTORE (0) + LABEL (L0) + LINENUMBER (12) + ICONST_0 + ISTORE (1) + LABEL (L1) + BIPUSH (6) + LDC (T) + INVOKESTATIC (kotlin/jvm/internal/Intrinsics, reifiedOperationMarker, (ILjava/lang/String;)V) + ACONST_NULL + LABEL (L2) + LINENUMBER (16) + INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;) + ASTORE (2) + LABEL (L3) + ICONST_0 + ISTORE (3) + LABEL (L4) + LINENUMBER (17) + 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) + ALOAD (2) + CHECKCAST (kotlinx/serialization/KSerializer) + LABEL (L5) + LINENUMBER (16) + NOP + LABEL (L6) + LINENUMBER (12) + ARETURN + LABEL (L7) + } + + public final static kotlinx.serialization.KSerializer outer() { + LABEL (L0) + LINENUMBER (14) + ICONST_0 + ISTORE (0) + LABEL (L1) + LINENUMBER (18) + ICONST_0 + ISTORE (1) + LABEL (L2) + LDC (LBox;) + GETSTATIC (kotlin/reflect/KTypeProjection, Companion, Lkotlin/reflect/KTypeProjection$Companion;) + NEW (kotlin/jvm/internal/FunctionReferenceImpl) + DUP + ICONST_0 + LDC (LIntrinsicsNonReifiedKt;) + LDC (outer) + LDC (outer()Lkotlinx/serialization/KSerializer;) + ICONST_1 + INVOKESPECIAL (kotlin/jvm/internal/FunctionReferenceImpl, , (ILjava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V) + LDC (T) + GETSTATIC (kotlin/reflect/KVariance, INVARIANT, Lkotlin/reflect/KVariance;) + ICONST_0 + INVOKESTATIC (kotlin/jvm/internal/Reflection, typeParameter, (Ljava/lang/Object;Ljava/lang/String;Lkotlin/reflect/KVariance;Z)Lkotlin/reflect/KTypeParameter;) + DUP + LDC (Ljava/lang/Object;) + INVOKESTATIC (kotlin/jvm/internal/Reflection, nullableTypeOf, (Ljava/lang/Class;)Lkotlin/reflect/KType;) + INVOKESTATIC (kotlin/jvm/internal/Reflection, setUpperBounds, (Lkotlin/reflect/KTypeParameter;Lkotlin/reflect/KType;)V) + INVOKESTATIC (kotlin/jvm/internal/Reflection, typeOf, (Lkotlin/reflect/KClassifier;)Lkotlin/reflect/KType;) + 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 (L3) + LINENUMBER (19) + INVOKESTATIC (kotlinx/serialization/SerializersKt, serializer, (Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer;) + ASTORE (2) + LABEL (L4) + ICONST_0 + ISTORE (3) + LABEL (L5) + LINENUMBER (20) + 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) + ALOAD (2) + LABEL (L6) + LINENUMBER (19) + NOP + LABEL (L7) + LINENUMBER (18) + NOP + LABEL (L8) + LINENUMBER (14) + ARETURN + } +} diff --git a/plugins/kotlinx-serialization/testData/codegen/IntrinsicsNonReified.kt b/plugins/kotlinx-serialization/testData/codegen/IntrinsicsNonReified.kt new file mode 100644 index 00000000000..9409ada4553 --- /dev/null +++ b/plugins/kotlinx-serialization/testData/codegen/IntrinsicsNonReified.kt @@ -0,0 +1,14 @@ +// CURIOUS_ABOUT: inner, outer +// WITH_STDLIB + +import kotlinx.serialization.* +import kotlinx.serialization.json.* +import kotlinx.serialization.modules.* +import kotlin.reflect.typeOf + +@Serializable +class Box(val t: T) + +inline fun inner() = serializer() + +fun outer() = inner>() diff --git a/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationAsmLikeInstructionsListingTestGenerated.java b/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationAsmLikeInstructionsListingTestGenerated.java index 4ceac029024..8361bd7e976 100644 --- a/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationAsmLikeInstructionsListingTestGenerated.java +++ b/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationAsmLikeInstructionsListingTestGenerated.java @@ -43,6 +43,12 @@ public class SerializationAsmLikeInstructionsListingTestGenerated extends Abstra runTest("plugins/kotlinx-serialization/testData/codegen/IntrinsicsAdvanced.kt"); } + @Test + @TestMetadata("IntrinsicsNonReified.kt") + public void testIntrinsicsNonReified() throws Exception { + runTest("plugins/kotlinx-serialization/testData/codegen/IntrinsicsNonReified.kt"); + } + @Test @TestMetadata("Sealed.kt") public void testSealed() throws Exception { diff --git a/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirLightTreeAsmLikeInstructionsListingTestGenerated.java b/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirLightTreeAsmLikeInstructionsListingTestGenerated.java index 4639d5fb9a9..d786e3bbea4 100644 --- a/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirLightTreeAsmLikeInstructionsListingTestGenerated.java +++ b/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirLightTreeAsmLikeInstructionsListingTestGenerated.java @@ -43,6 +43,12 @@ public class SerializationFirLightTreeAsmLikeInstructionsListingTestGenerated ex runTest("plugins/kotlinx-serialization/testData/codegen/IntrinsicsAdvanced.kt"); } + @Test + @TestMetadata("IntrinsicsNonReified.kt") + public void testIntrinsicsNonReified() throws Exception { + runTest("plugins/kotlinx-serialization/testData/codegen/IntrinsicsNonReified.kt"); + } + @Test @TestMetadata("Sealed.kt") public void testSealed() throws Exception { diff --git a/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirLightTreeBlackBoxTestGenerated.java b/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirLightTreeBlackBoxTestGenerated.java index d56913877f4..52365eca79f 100644 --- a/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirLightTreeBlackBoxTestGenerated.java +++ b/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirLightTreeBlackBoxTestGenerated.java @@ -165,6 +165,12 @@ public class SerializationFirLightTreeBlackBoxTestGenerated extends AbstractSeri runTest("plugins/kotlinx-serialization/testData/boxIr/intrinsicsBox.kt"); } + @Test + @TestMetadata("intrinsicsNonReified.kt") + public void testIntrinsicsNonReified() throws Exception { + runTest("plugins/kotlinx-serialization/testData/boxIr/intrinsicsNonReified.kt"); + } + @Test @TestMetadata("intrinsicsNullable.kt") public void testIntrinsicsNullable() throws Exception { diff --git a/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationIrAsmLikeInstructionsListingTestGenerated.java b/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationIrAsmLikeInstructionsListingTestGenerated.java index 345fcbefa2d..c859ec9a06a 100644 --- a/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationIrAsmLikeInstructionsListingTestGenerated.java +++ b/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationIrAsmLikeInstructionsListingTestGenerated.java @@ -43,6 +43,12 @@ public class SerializationIrAsmLikeInstructionsListingTestGenerated extends Abst runTest("plugins/kotlinx-serialization/testData/codegen/IntrinsicsAdvanced.kt"); } + @Test + @TestMetadata("IntrinsicsNonReified.kt") + public void testIntrinsicsNonReified() throws Exception { + runTest("plugins/kotlinx-serialization/testData/codegen/IntrinsicsNonReified.kt"); + } + @Test @TestMetadata("Sealed.kt") public void testSealed() throws Exception { diff --git a/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationIrBoxTestGenerated.java b/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationIrBoxTestGenerated.java index 326378ac386..17857bf039e 100644 --- a/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationIrBoxTestGenerated.java +++ b/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationIrBoxTestGenerated.java @@ -163,6 +163,12 @@ public class SerializationIrBoxTestGenerated extends AbstractSerializationIrBoxT runTest("plugins/kotlinx-serialization/testData/boxIr/intrinsicsBox.kt"); } + @Test + @TestMetadata("intrinsicsNonReified.kt") + public void testIntrinsicsNonReified() throws Exception { + runTest("plugins/kotlinx-serialization/testData/boxIr/intrinsicsNonReified.kt"); + } + @Test @TestMetadata("intrinsicsNullable.kt") public void testIntrinsicsNullable() throws Exception {