diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/SerializationFirBlackBoxTestGenerated.java b/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/SerializationFirBlackBoxTestGenerated.java index 92f571b93fe..6e142c36425 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/SerializationFirBlackBoxTestGenerated.java +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/SerializationFirBlackBoxTestGenerated.java @@ -55,6 +55,12 @@ public class SerializationFirBlackBoxTestGenerated extends AbstractSerialization runTest("plugins/kotlin-serialization/kotlin-serialization-compiler/testData/firMembers/enums.kt"); } + @Test + @TestMetadata("inlineClasses.kt") + public void testInlineClasses() throws Exception { + runTest("plugins/kotlin-serialization/kotlin-serialization-compiler/testData/firMembers/inlineClasses.kt"); + } + @Test @TestMetadata("multipleProperties.kt") public void testMultipleProperties() throws Exception { diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/SerializationFirMembersTestGenerated.java b/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/SerializationFirMembersTestGenerated.java index 04b2dd109a7..a27577c5f81 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/SerializationFirMembersTestGenerated.java +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/SerializationFirMembersTestGenerated.java @@ -54,6 +54,12 @@ public class SerializationFirMembersTestGenerated extends AbstractSerializationF runTest("plugins/kotlin-serialization/kotlin-serialization-compiler/testData/firMembers/enums.kt"); } + @Test + @TestMetadata("inlineClasses.kt") + public void testInlineClasses() throws Exception { + runTest("plugins/kotlin-serialization/kotlin-serialization-compiler/testData/firMembers/inlineClasses.kt"); + } + @Test @TestMetadata("multipleProperties.kt") public void testMultipleProperties() throws Exception { diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/SerializationIrBoxTestGenerated.java b/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/SerializationIrBoxTestGenerated.java index 25de06f9087..23eaa116294 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/SerializationIrBoxTestGenerated.java +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/test/org/jetbrains/kotlinx/serialization/SerializationIrBoxTestGenerated.java @@ -49,6 +49,12 @@ public class SerializationIrBoxTestGenerated extends AbstractSerializationIrBoxT runTest("plugins/kotlin-serialization/kotlin-serialization-compiler/testData/boxIr/generics.kt"); } + @Test + @TestMetadata("inlineClasses.kt") + public void testInlineClasses() throws Exception { + runTest("plugins/kotlin-serialization/kotlin-serialization-compiler/testData/boxIr/inlineClasses.kt"); + } + @Test @TestMetadata("metaSerializable.kt") public void testMetaSerializable() throws Exception { diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/boxIr/inlineClasses.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/boxIr/inlineClasses.kt new file mode 100644 index 00000000000..c19fec41cc5 --- /dev/null +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/boxIr/inlineClasses.kt @@ -0,0 +1,22 @@ +// IGNORE_BACKEND_FIR: JVM_IR +// TARGET_BACKEND: JVM_IR + +// WITH_STDLIB + +import kotlinx.serialization.* +import kotlinx.serialization.json.* +import kotlinx.serialization.internal.* + +@Serializable +@JvmInline +value class Foo(val i: Int) + +@Serializable +class Holder(val f: Foo) + +fun box(): String { + if(!Foo.serializer().descriptor.isInline) return "Incorrect descriptor" + val s = Json.encodeToString(Holder.serializer(), Holder(Foo(42))) + if (s != """{"f":42}""") return s + return "OK" +} \ No newline at end of file diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/firMembers/inlineClasses.fir.txt b/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/firMembers/inlineClasses.fir.txt new file mode 100644 index 00000000000..6652dd58bb9 --- /dev/null +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/firMembers/inlineClasses.fir.txt @@ -0,0 +1,77 @@ +FILE: inlineClasses.kt + @R|kotlinx/serialization/Serializable|() @R|kotlin/jvm/JvmInline|() public final inline class Foo : R|kotlin/Any| { + public constructor(i: R|kotlin/Int|): R|Foo| { + super() + } + + public final val i: R|kotlin/Int| = R|/i| + public get(): R|kotlin/Int| + + public final companion object Companion : R|kotlin/Any| { + public final fun serializer(): R|kotlinx/serialization/KSerializer| + + private constructor(): R|Foo.Companion| + + } + + public final object $serializer : R|kotlinx/serialization/internal/GeneratedSerializer| { + public final fun serialize(encoder: R|kotlinx/serialization/encoding/Encoder|, value: R|Foo|): R|kotlin/Unit| + + public final fun deserialize(decoder: R|kotlinx/serialization/encoding/Decoder|): R|Foo| + + public final val descriptor: R|kotlinx/serialization/descriptors/SerialDescriptor| + public get(): R|kotlinx/serialization/descriptors/SerialDescriptor| + + public final fun childSerializers(): R|kotlin/Array>| + + private constructor(): R|Foo.$serializer| + + } + + } + @R|kotlinx/serialization/Serializable|() public final class Holder : R|kotlin/Any| { + public constructor(f: R|Foo|): R|Holder| { + super() + } + + public final val f: R|Foo| = R|/f| + public get(): R|Foo| + + public final companion object Companion : R|kotlin/Any| { + public final fun serializer(): R|kotlinx/serialization/KSerializer| + + private constructor(): R|Holder.Companion| + + } + + public final object $serializer : R|kotlinx/serialization/internal/GeneratedSerializer| { + public final fun serialize(encoder: R|kotlinx/serialization/encoding/Encoder|, value: R|Holder|): R|kotlin/Unit| + + public final fun deserialize(decoder: R|kotlinx/serialization/encoding/Decoder|): R|Holder| + + public final val descriptor: R|kotlinx/serialization/descriptors/SerialDescriptor| + public get(): R|kotlinx/serialization/descriptors/SerialDescriptor| + + public final fun childSerializers(): R|kotlin/Array>| + + private constructor(): R|Holder.$serializer| + + } + + } + public final fun box(): R|kotlin/String| { + when () { + Q|Foo|.R|/Foo.Companion.serializer|().R|SubstitutionOverride|.R|kotlinx/serialization/descriptors/SerialDescriptor.isInline|.R|kotlin/Boolean.not|() -> { + ^box String(Incorrect descriptor) + } + } + + lval s: R|kotlin/String| = Q|kotlinx/serialization/json/Json|.R|kotlinx/serialization/json/Json.encodeToString|(Q|Holder|.R|/Holder.Companion.serializer|(), R|/Holder.Holder|(R|/Foo.Foo|(Int(42)))) + when () { + !=(R|/s|, String({"f":42})) -> { + ^box R|/s| + } + } + + ^box String(OK) + } diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/firMembers/inlineClasses.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/firMembers/inlineClasses.kt new file mode 100644 index 00000000000..85e44e76518 --- /dev/null +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/firMembers/inlineClasses.kt @@ -0,0 +1,19 @@ +// WITH_STDLIB + +import kotlinx.serialization.* +import kotlinx.serialization.json.* +import kotlinx.serialization.internal.* + +@Serializable +@JvmInline +value class Foo(val i: Int) + +@Serializable +class Holder(val f: Foo) + +fun box(): String { + if(!Foo.serializer().descriptor.isInline) return "Incorrect descriptor" + val s = Json.encodeToString(Holder.serializer(), Holder(Foo(42))) + if (s != """{"f":42}""") return s + return "OK" +} \ No newline at end of file