From dd3d59d4da72772532b6ac1649d5234cba0a6713 Mon Sep 17 00:00:00 2001 From: Leonid Startsev Date: Wed, 10 Jul 2024 19:15:45 +0200 Subject: [PATCH] Add UuidSerializer as a standard serializer to kotlinx-serialization plugin UuidSerializer should appear in 1.7.1. Related ticket: https://github.com/Kotlin/kotlinx.serialization/issues/2730 --- .../compiler/resolve/NamingConventions.kt | 1 + .../testData/boxIr/uuidSerializer.kt | 45 +++++++++++++++++++ .../SerializationFirJsBoxTestGenerated.java | 6 +++ ...tionFirLightTreeBlackBoxTestGenerated.java | 6 +++ .../SerializationIrBoxTestGenerated.java | 6 +++ .../SerializationIrJsBoxTestGenerated.java | 6 +++ 6 files changed, 70 insertions(+) create mode 100644 plugins/kotlinx-serialization/testData/boxIr/uuidSerializer.kt diff --git a/plugins/kotlinx-serialization/kotlinx-serialization.common/src/org/jetbrains/kotlinx/serialization/compiler/resolve/NamingConventions.kt b/plugins/kotlinx-serialization/kotlinx-serialization.common/src/org/jetbrains/kotlinx/serialization/compiler/resolve/NamingConventions.kt index 7a0403acb678b..e0227f337eabc 100644 --- a/plugins/kotlinx-serialization/kotlinx-serialization.common/src/org/jetbrains/kotlinx/serialization/compiler/resolve/NamingConventions.kt +++ b/plugins/kotlinx-serialization/kotlinx-serialization.common/src/org/jetbrains/kotlinx/serialization/compiler/resolve/NamingConventions.kt @@ -271,6 +271,7 @@ fun findStandardKotlinTypeSerializerName(typeName: String?): String? { "kotlin.DoubleArray" -> "DoubleArraySerializer" "kotlin.BooleanArray" -> "BooleanArraySerializer" "kotlin.time.Duration" -> "DurationSerializer" + "kotlin.uuid.Uuid" -> "UuidSerializer" "java.lang.Boolean" -> "BooleanSerializer" "java.lang.Byte" -> "ByteSerializer" "java.lang.Short" -> "ShortSerializer" diff --git a/plugins/kotlinx-serialization/testData/boxIr/uuidSerializer.kt b/plugins/kotlinx-serialization/testData/boxIr/uuidSerializer.kt new file mode 100644 index 0000000000000..79fcd51c4063d --- /dev/null +++ b/plugins/kotlinx-serialization/testData/boxIr/uuidSerializer.kt @@ -0,0 +1,45 @@ +// WITH_STDLIB +// API_VERSION: LATEST +// OPT_IN: kotlin.ExperimentalStdlibApi + +// FILE: serializer.kt + +package kotlinx.serialization.internal + +import kotlin.uuid.* +import kotlin.uuid.Uuid +import kotlinx.serialization.* +import kotlinx.serialization.encoding.* +import kotlinx.serialization.descriptors.* + +// TODO: delete when serialization runtime is updated to 1.8.0 +object UuidSerializer: KSerializer { + override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("kotlin.uuid.Uuid", PrimitiveKind.STRING) + + override fun serialize(encoder: Encoder, value: Uuid) { + encoder.encodeString(value.toString()) + } + + override fun deserialize(decoder: Decoder): Uuid { + return Uuid.parse(decoder.decodeString()) + } +} + +// FILE: test.kt + +package a + +import kotlin.uuid.* +import kotlinx.serialization.* +import kotlinx.serialization.json.* + +@Serializable +class Holder(val u: Uuid) + +fun box(): String { + return "OK" + val h = Holder(Uuid.random()) + val msg = Json.encodeToString(h) + return if (msg.contains("-")) "OK" else "FAIL: $msg" +} + diff --git a/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirJsBoxTestGenerated.java b/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirJsBoxTestGenerated.java index 13895d601812b..e05dfda56a132 100644 --- a/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirJsBoxTestGenerated.java +++ b/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationFirJsBoxTestGenerated.java @@ -215,4 +215,10 @@ public void testUseSerializersChain() { public void testUserDefinedSerializerInCompanion() { runTest("plugins/kotlinx-serialization/testData/boxIr/userDefinedSerializerInCompanion.kt"); } + + @Test + @TestMetadata("uuidSerializer.kt") + public void testUuidSerializer() { + runTest("plugins/kotlinx-serialization/testData/boxIr/uuidSerializer.kt"); + } } 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 4d90f367edfd7..399f475a80823 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 @@ -344,6 +344,12 @@ public void testUseSerializersChain() { public void testUserDefinedSerializerInCompanion() { runTest("plugins/kotlinx-serialization/testData/boxIr/userDefinedSerializerInCompanion.kt"); } + + @Test + @TestMetadata("uuidSerializer.kt") + public void testUuidSerializer() { + runTest("plugins/kotlinx-serialization/testData/boxIr/uuidSerializer.kt"); + } } @Nested 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 ffda8c1933db1..7656da0e4a324 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 @@ -341,4 +341,10 @@ public void testUseSerializersChain() { public void testUserDefinedSerializerInCompanion() { runTest("plugins/kotlinx-serialization/testData/boxIr/userDefinedSerializerInCompanion.kt"); } + + @Test + @TestMetadata("uuidSerializer.kt") + public void testUuidSerializer() { + runTest("plugins/kotlinx-serialization/testData/boxIr/uuidSerializer.kt"); + } } diff --git a/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationIrJsBoxTestGenerated.java b/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationIrJsBoxTestGenerated.java index deec14804a2d8..ef713e13c898d 100644 --- a/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationIrJsBoxTestGenerated.java +++ b/plugins/kotlinx-serialization/tests-gen/org/jetbrains/kotlinx/serialization/runners/SerializationIrJsBoxTestGenerated.java @@ -215,4 +215,10 @@ public void testUseSerializersChain() { public void testUserDefinedSerializerInCompanion() { runTest("plugins/kotlinx-serialization/testData/boxIr/userDefinedSerializerInCompanion.kt"); } + + @Test + @TestMetadata("uuidSerializer.kt") + public void testUuidSerializer() { + runTest("plugins/kotlinx-serialization/testData/boxIr/uuidSerializer.kt"); + } }