From c487e78e31001d0650e988cd6061917706c8c123 Mon Sep 17 00:00:00 2001 From: Ben Woodworth Date: Tue, 28 May 2024 11:15:31 -0400 Subject: [PATCH] JSON: Fix mutable `classDiscriminatorMode` in config, and mark experimental in builder (#2680) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since this is a new feature, it should have been added as experimental to the builder, but it wasn't done properly. Deprecate mutable `classDiscriminatorMode` in `JsonConfiguration` — vars are not needed there. --- .../json/commonMain/src/kotlinx/serialization/json/Json.kt | 1 + .../src/kotlinx/serialization/json/JsonConfiguration.kt | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/formats/json/commonMain/src/kotlinx/serialization/json/Json.kt b/formats/json/commonMain/src/kotlinx/serialization/json/Json.kt index 2d7d157c43..4329eafdaf 100644 --- a/formats/json/commonMain/src/kotlinx/serialization/json/Json.kt +++ b/formats/json/commonMain/src/kotlinx/serialization/json/Json.kt @@ -502,6 +502,7 @@ public class JsonBuilder internal constructor(json: Json) { * Other modes are generally intended to produce JSON for consumption by third-party libraries, * therefore, this setting does not affect the deserialization process. */ + @ExperimentalSerializationApi public var classDiscriminatorMode: ClassDiscriminatorMode = json.configuration.classDiscriminatorMode /** diff --git a/formats/json/commonMain/src/kotlinx/serialization/json/JsonConfiguration.kt b/formats/json/commonMain/src/kotlinx/serialization/json/JsonConfiguration.kt index dc69644e4b..aceaa86bd8 100644 --- a/formats/json/commonMain/src/kotlinx/serialization/json/JsonConfiguration.kt +++ b/formats/json/commonMain/src/kotlinx/serialization/json/JsonConfiguration.kt @@ -39,6 +39,11 @@ public class JsonConfiguration @OptIn(ExperimentalSerializationApi::class) inter @ExperimentalSerializationApi public val allowComments: Boolean = false, @ExperimentalSerializationApi + @set:Deprecated( + "JsonConfiguration is not meant to be mutable, and will be made read-only in a future release. " + + "The `Json(from = ...) {}` copy builder should be used instead.", + level = DeprecationLevel.ERROR + ) public var classDiscriminatorMode: ClassDiscriminatorMode = ClassDiscriminatorMode.POLYMORPHIC, ) {