From 7bd269108a39652d403ce00861237746e91ddaaa Mon Sep 17 00:00:00 2001 From: Vsevolod Tolstopyatov Date: Fri, 3 Jun 2022 17:49:31 +0300 Subject: [PATCH 1/3] Get rid of @ExperimentalUnsignedTypes on our declarations that leverage non-experimental unsigned types --- build.gradle | 3 +-- .../kotlinx/serialization/builtins/BuiltinSerializers.kt | 4 ---- .../src/kotlinx/serialization/internal/InlineClasses.kt | 4 ---- .../kotlinx/serialization/json/JsonElementSerializers.kt | 2 +- .../src/kotlinx/serialization/json/internal/Composers.kt | 1 - .../serialization/json/internal/StreamingJsonDecoder.kt | 3 +-- .../serialization/json/internal/StreamingJsonEncoder.kt | 1 - .../kotlinx/serialization/json/internal/TreeJsonDecoder.kt | 1 - .../kotlinx/serialization/json/internal/TreeJsonEncoder.kt | 1 - .../features/inline/EncodeInlineElementTest.kt | 7 +------ .../serialization/features/inline/InlineClassesTest.kt | 5 ----- .../serialization/features/inline/UnsignedIntegersTest.kt | 4 +--- 12 files changed, 5 insertions(+), 31 deletions(-) diff --git a/build.gradle b/build.gradle index 69aa68dd17..26f5e461f8 100644 --- a/build.gradle +++ b/build.gradle @@ -20,8 +20,7 @@ buildscript { ext.experimentalsInTestEnabled = ["-progressive", "-opt-in=kotlin.Experimental", "-opt-in=kotlin.ExperimentalMultiplatform", "-opt-in=kotlinx.serialization.ExperimentalSerializationApi", - "-opt-in=kotlinx.serialization.InternalSerializationApi", - "-opt-in=kotlin.ExperimentalUnsignedTypes" + "-opt-in=kotlinx.serialization.InternalSerializationApi" ] ext.koverEnabled = property('kover.enabled') ?: true diff --git a/core/commonMain/src/kotlinx/serialization/builtins/BuiltinSerializers.kt b/core/commonMain/src/kotlinx/serialization/builtins/BuiltinSerializers.kt index 147f25d9b0..96bf008210 100644 --- a/core/commonMain/src/kotlinx/serialization/builtins/BuiltinSerializers.kt +++ b/core/commonMain/src/kotlinx/serialization/builtins/BuiltinSerializers.kt @@ -194,26 +194,22 @@ public fun MapSerializer( * Returns serializer for [UInt]. */ @ExperimentalSerializationApi -@ExperimentalUnsignedTypes public fun UInt.Companion.serializer(): KSerializer = UIntSerializer /** * Returns serializer for [ULong]. */ @ExperimentalSerializationApi -@ExperimentalUnsignedTypes public fun ULong.Companion.serializer(): KSerializer = ULongSerializer /** * Returns serializer for [UByte]. */ @ExperimentalSerializationApi -@ExperimentalUnsignedTypes public fun UByte.Companion.serializer(): KSerializer = UByteSerializer /** * Returns serializer for [UShort]. */ @ExperimentalSerializationApi -@ExperimentalUnsignedTypes public fun UShort.Companion.serializer(): KSerializer = UShortSerializer diff --git a/core/commonMain/src/kotlinx/serialization/internal/InlineClasses.kt b/core/commonMain/src/kotlinx/serialization/internal/InlineClasses.kt index b9738908c8..06e03cd82a 100644 --- a/core/commonMain/src/kotlinx/serialization/internal/InlineClasses.kt +++ b/core/commonMain/src/kotlinx/serialization/internal/InlineClasses.kt @@ -11,7 +11,6 @@ import kotlinx.serialization.encoding.* @PublishedApi @ExperimentalSerializationApi -@ExperimentalUnsignedTypes internal object UIntSerializer : KSerializer { override val descriptor: SerialDescriptor = InlinePrimitiveDescriptor("kotlin.UInt", Int.serializer()) @@ -26,7 +25,6 @@ internal object UIntSerializer : KSerializer { @PublishedApi @ExperimentalSerializationApi -@ExperimentalUnsignedTypes internal object ULongSerializer : KSerializer { override val descriptor: SerialDescriptor = InlinePrimitiveDescriptor("kotlin.ULong", Long.serializer()) @@ -41,7 +39,6 @@ internal object ULongSerializer : KSerializer { @PublishedApi @ExperimentalSerializationApi -@ExperimentalUnsignedTypes internal object UByteSerializer : KSerializer { override val descriptor: SerialDescriptor = InlinePrimitiveDescriptor("kotlin.UByte", Byte.serializer()) @@ -56,7 +53,6 @@ internal object UByteSerializer : KSerializer { @PublishedApi @ExperimentalSerializationApi -@ExperimentalUnsignedTypes internal object UShortSerializer : KSerializer { override val descriptor: SerialDescriptor = InlinePrimitiveDescriptor("kotlin.UShort", Short.serializer()) diff --git a/formats/json/commonMain/src/kotlinx/serialization/json/JsonElementSerializers.kt b/formats/json/commonMain/src/kotlinx/serialization/json/JsonElementSerializers.kt index a6d0d0f417..6fcfa2c0a0 100644 --- a/formats/json/commonMain/src/kotlinx/serialization/json/JsonElementSerializers.kt +++ b/formats/json/commonMain/src/kotlinx/serialization/json/JsonElementSerializers.kt @@ -109,7 +109,7 @@ private object JsonLiteralSerializer : KSerializer { override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("kotlinx.serialization.json.JsonLiteral", PrimitiveKind.STRING) - @OptIn(ExperimentalUnsignedTypes::class, ExperimentalSerializationApi::class) + @OptIn(ExperimentalSerializationApi::class) override fun serialize(encoder: Encoder, value: JsonLiteral) { verify(encoder) if (value.isString) { diff --git a/formats/json/commonMain/src/kotlinx/serialization/json/internal/Composers.kt b/formats/json/commonMain/src/kotlinx/serialization/json/internal/Composers.kt index 2bc080f940..8c7f8b881b 100644 --- a/formats/json/commonMain/src/kotlinx/serialization/json/internal/Composers.kt +++ b/formats/json/commonMain/src/kotlinx/serialization/json/internal/Composers.kt @@ -41,7 +41,6 @@ internal open class Composer(@JvmField internal val sb: JsonStringBuilder) { fun printQuoted(value: String): Unit = sb.appendQuoted(value) } -@ExperimentalUnsignedTypes internal class ComposerForUnsignedNumbers(sb: JsonStringBuilder) : Composer(sb) { override fun print(v: Int) { return super.print(v.toUInt().toString()) diff --git a/formats/json/commonMain/src/kotlinx/serialization/json/internal/StreamingJsonDecoder.kt b/formats/json/commonMain/src/kotlinx/serialization/json/internal/StreamingJsonDecoder.kt index bf22904400..b82f08ec3b 100644 --- a/formats/json/commonMain/src/kotlinx/serialization/json/internal/StreamingJsonDecoder.kt +++ b/formats/json/commonMain/src/kotlinx/serialization/json/internal/StreamingJsonDecoder.kt @@ -16,7 +16,7 @@ import kotlin.jvm.* /** * [JsonDecoder] which reads given JSON from [AbstractJsonLexer] field by field. */ -@OptIn(ExperimentalSerializationApi::class, ExperimentalUnsignedTypes::class) +@OptIn(ExperimentalSerializationApi::class) internal open class StreamingJsonDecoder( final override val json: Json, private val mode: WriteMode, @@ -303,7 +303,6 @@ internal open class StreamingJsonDecoder( } @OptIn(ExperimentalSerializationApi::class) -@ExperimentalUnsignedTypes internal class JsonDecoderForUnsignedTypes( private val lexer: AbstractJsonLexer, json: Json diff --git a/formats/json/commonMain/src/kotlinx/serialization/json/internal/StreamingJsonEncoder.kt b/formats/json/commonMain/src/kotlinx/serialization/json/internal/StreamingJsonEncoder.kt index cdaeeb03a7..e9ed8ba030 100644 --- a/formats/json/commonMain/src/kotlinx/serialization/json/internal/StreamingJsonEncoder.kt +++ b/formats/json/commonMain/src/kotlinx/serialization/json/internal/StreamingJsonEncoder.kt @@ -13,7 +13,6 @@ import kotlinx.serialization.modules.* import kotlin.native.concurrent.* @ExperimentalSerializationApi -@OptIn(ExperimentalUnsignedTypes::class) @SharedImmutable private val unsignedNumberDescriptors = setOf( UInt.serializer().descriptor, diff --git a/formats/json/commonMain/src/kotlinx/serialization/json/internal/TreeJsonDecoder.kt b/formats/json/commonMain/src/kotlinx/serialization/json/internal/TreeJsonDecoder.kt index 55e23a13be..fd28311871 100644 --- a/formats/json/commonMain/src/kotlinx/serialization/json/internal/TreeJsonDecoder.kt +++ b/formats/json/commonMain/src/kotlinx/serialization/json/internal/TreeJsonDecoder.kt @@ -161,7 +161,6 @@ private sealed class AbstractJsonTreeDecoder( return this as? JsonLiteral ?: throw JsonDecodingException(-1, "Unexpected 'null' when $type was expected") } - @OptIn(ExperimentalUnsignedTypes::class) override fun decodeTaggedInline(tag: String, inlineDescriptor: SerialDescriptor): Decoder = if (inlineDescriptor.isUnsignedNumber) JsonDecoderForUnsignedTypes(StringJsonLexer(getPrimitiveValue(tag).content), json) else super.decodeTaggedInline(tag, inlineDescriptor) diff --git a/formats/json/commonMain/src/kotlinx/serialization/json/internal/TreeJsonEncoder.kt b/formats/json/commonMain/src/kotlinx/serialization/json/internal/TreeJsonEncoder.kt index 74f02bf460..2278945dfa 100644 --- a/formats/json/commonMain/src/kotlinx/serialization/json/internal/TreeJsonEncoder.kt +++ b/formats/json/commonMain/src/kotlinx/serialization/json/internal/TreeJsonEncoder.kt @@ -98,7 +98,6 @@ private sealed class AbstractJsonTreeEncoder( putElement(tag, JsonPrimitive(value.toString())) } - @OptIn(ExperimentalUnsignedTypes::class) override fun encodeTaggedInline(tag: String, inlineDescriptor: SerialDescriptor): Encoder = if (inlineDescriptor.isUnsignedNumber) object : AbstractEncoder() { override val serializersModule: SerializersModule = json.serializersModule diff --git a/formats/json/commonTest/src/kotlinx/serialization/features/inline/EncodeInlineElementTest.kt b/formats/json/commonTest/src/kotlinx/serialization/features/inline/EncodeInlineElementTest.kt index 037d7858b3..8669607594 100644 --- a/formats/json/commonTest/src/kotlinx/serialization/features/inline/EncodeInlineElementTest.kt +++ b/formats/json/commonTest/src/kotlinx/serialization/features/inline/EncodeInlineElementTest.kt @@ -1,10 +1,5 @@ /* - * Copyright 2017-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. - */ - -@file:OptIn(ExperimentalUnsignedTypes::class) -/* - * Copyright 2017-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. + * Copyright 2017-2022 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. */ package kotlinx.serialization.features.inline diff --git a/formats/json/commonTest/src/kotlinx/serialization/features/inline/InlineClassesTest.kt b/formats/json/commonTest/src/kotlinx/serialization/features/inline/InlineClassesTest.kt index 1eedafae9e..6b074b348d 100644 --- a/formats/json/commonTest/src/kotlinx/serialization/features/inline/InlineClassesTest.kt +++ b/formats/json/commonTest/src/kotlinx/serialization/features/inline/InlineClassesTest.kt @@ -3,11 +3,6 @@ */ @file:Suppress("INLINE_CLASSES_NOT_SUPPORTED", "SERIALIZER_NOT_FOUND") -@file:OptIn(ExperimentalUnsignedTypes::class) - -/* - * Copyright 2017-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. - */ package kotlinx.serialization.features.inline diff --git a/formats/json/commonTest/src/kotlinx/serialization/features/inline/UnsignedIntegersTest.kt b/formats/json/commonTest/src/kotlinx/serialization/features/inline/UnsignedIntegersTest.kt index 26d67288f2..3611fc27aa 100644 --- a/formats/json/commonTest/src/kotlinx/serialization/features/inline/UnsignedIntegersTest.kt +++ b/formats/json/commonTest/src/kotlinx/serialization/features/inline/UnsignedIntegersTest.kt @@ -1,7 +1,5 @@ -@file:Suppress("INLINE_CLASSES_NOT_SUPPORTED", "SERIALIZER_NOT_FOUND") -@file:OptIn(ExperimentalUnsignedTypes::class) /* - * Copyright 2017-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. + * Copyright 2017-2022 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. */ package kotlinx.serialization.features.inline From 6d97bbf1026c3ed44f88d5b6160a9fac781e3828 Mon Sep 17 00:00:00 2001 From: Vsevolod Tolstopyatov Date: Tue, 14 Jun 2022 13:00:51 +0300 Subject: [PATCH 2/3] ~ --- .../kotlinx/serialization/json/internal/StreamingJsonEncoder.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/formats/json/commonMain/src/kotlinx/serialization/json/internal/StreamingJsonEncoder.kt b/formats/json/commonMain/src/kotlinx/serialization/json/internal/StreamingJsonEncoder.kt index e9ed8ba030..40e3a1b20a 100644 --- a/formats/json/commonMain/src/kotlinx/serialization/json/internal/StreamingJsonEncoder.kt +++ b/formats/json/commonMain/src/kotlinx/serialization/json/internal/StreamingJsonEncoder.kt @@ -25,7 +25,7 @@ private val unsignedNumberDescriptors = setOf( internal val SerialDescriptor.isUnsignedNumber: Boolean get() = this.isInline && this in unsignedNumberDescriptors -@OptIn(ExperimentalSerializationApi::class, ExperimentalUnsignedTypes::class) +@OptIn(ExperimentalSerializationApi::class) internal class StreamingJsonEncoder( private val composer: Composer, override val json: Json, From a454f6145eeea5ed381626b5327def85271fad39 Mon Sep 17 00:00:00 2001 From: Vsevolod Tolstopyatov Date: Fri, 24 Jun 2022 16:41:31 +0200 Subject: [PATCH 3/3] Drop the line about unsupported inline classes --- docs/builtin-classes.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/builtin-classes.md b/docs/builtin-classes.md index 018311545f..eddfbdf902 100644 --- a/docs/builtin-classes.md +++ b/docs/builtin-classes.md @@ -68,8 +68,6 @@ Their natural representation in JSON is used. -> Experimental unsigned numbers as well as other experimental inline classes are not supported by Kotlin Serialization yet. - ### Long numbers