diff options
author | Abduqodiri Qurbonzoda <a.qurbonzoda@gmail.com> | 2023-06-23 16:03:55 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-23 15:03:55 +0200 |
commit | d192d244a7188d24e1dbf2e79ff33ea984e63e04 (patch) | |
tree | fcb5b6909363b94b036f32920fbf101a1df9c195 | |
parent | 39918cb2382b5e069f25d70fbc0a2665074be56c (diff) | |
download | kotlinx.serialization-d192d244a7188d24e1dbf2e79ff33ea984e63e04.tar.gz |
Fix Kotlin user projects build (#2341)
* Remove @SharedImmutable usages
The annotation is deprecated and has no effect.
* Suppress animal sniffer error in a data class with boolean property
The error is a result of changes in data class hashCode generation.
The generated code now uses the static Boolean.hashCode() to calculate hash code of boolean properties. The static function is available only since Java 1.8.
22 files changed, 17 insertions, 30 deletions
diff --git a/build.gradle b/build.gradle index 7d912ba6..dffdd2bf 100644 --- a/build.gradle +++ b/build.gradle @@ -204,6 +204,8 @@ subprojects { case "kotlinx-serialization-hocon": annotationValue = "kotlinx.serialization.hocon.internal.SuppressAnimalSniffer" break + case "kotlinx-serialization-protobuf": + annotationValue = "kotlinx.serialization.protobuf.internal.SuppressAnimalSniffer" } annotation = annotationValue } diff --git a/core/commonMain/src/kotlinx/serialization/internal/Platform.common.kt b/core/commonMain/src/kotlinx/serialization/internal/Platform.common.kt index e9351853..c16945c9 100644 --- a/core/commonMain/src/kotlinx/serialization/internal/Platform.common.kt +++ b/core/commonMain/src/kotlinx/serialization/internal/Platform.common.kt @@ -65,7 +65,6 @@ internal fun SerialDescriptor.cachedSerialNames(): Set<String> { return result } -@SharedImmutable private val EMPTY_DESCRIPTOR_ARRAY: Array<SerialDescriptor> = arrayOf() /** diff --git a/core/commonMain/src/kotlinx/serialization/internal/PluginHelperInterfaces.kt b/core/commonMain/src/kotlinx/serialization/internal/PluginHelperInterfaces.kt index f613c2ad..61272d29 100644 --- a/core/commonMain/src/kotlinx/serialization/internal/PluginHelperInterfaces.kt +++ b/core/commonMain/src/kotlinx/serialization/internal/PluginHelperInterfaces.kt @@ -8,7 +8,6 @@ import kotlinx.serialization.* import kotlin.jvm.* import kotlin.native.concurrent.* -@SharedImmutable @JvmField internal val EMPTY_SERIALIZER_ARRAY: Array<KSerializer<*>> = arrayOf() diff --git a/core/commonMain/src/kotlinx/serialization/internal/Primitives.kt b/core/commonMain/src/kotlinx/serialization/internal/Primitives.kt index fad4bfc6..2d9c5285 100644 --- a/core/commonMain/src/kotlinx/serialization/internal/Primitives.kt +++ b/core/commonMain/src/kotlinx/serialization/internal/Primitives.kt @@ -16,7 +16,6 @@ import kotlin.reflect.* import kotlin.time.Duration @OptIn(ExperimentalUnsignedTypes::class) -@SharedImmutable private val BUILTIN_SERIALIZERS = mapOf( String::class to String.serializer(), Char::class to Char.serializer(), diff --git a/core/commonMain/src/kotlinx/serialization/internal/Tuples.kt b/core/commonMain/src/kotlinx/serialization/internal/Tuples.kt index 88e25179..1bd21cbe 100644 --- a/core/commonMain/src/kotlinx/serialization/internal/Tuples.kt +++ b/core/commonMain/src/kotlinx/serialization/internal/Tuples.kt @@ -11,7 +11,6 @@ import kotlinx.serialization.descriptors.* import kotlinx.serialization.encoding.* import kotlin.native.concurrent.* -@SharedImmutable private val NULL = Any() private const val deprecationMessage = "This class is used only by the plugin in generated code and should not be used directly. Use corresponding factory functions instead" diff --git a/core/commonMain/src/kotlinx/serialization/modules/SerializersModule.kt b/core/commonMain/src/kotlinx/serialization/modules/SerializersModule.kt index d022d121..f01f952a 100644 --- a/core/commonMain/src/kotlinx/serialization/modules/SerializersModule.kt +++ b/core/commonMain/src/kotlinx/serialization/modules/SerializersModule.kt @@ -73,7 +73,6 @@ public sealed class SerializersModule { /** * A [SerializersModule] which is empty and always returns `null`. */ -@SharedImmutable @Deprecated("Deprecated in the favour of 'EmptySerializersModule()'", level = DeprecationLevel.WARNING, replaceWith = ReplaceWith("EmptySerializersModule()")) diff --git a/core/commonTest/src/kotlinx/serialization/PolymorphismTestData.kt b/core/commonTest/src/kotlinx/serialization/PolymorphismTestData.kt index 393e2b59..22de3a4d 100644 --- a/core/commonTest/src/kotlinx/serialization/PolymorphismTestData.kt +++ b/core/commonTest/src/kotlinx/serialization/PolymorphismTestData.kt @@ -30,7 +30,6 @@ open class PolyBase(val id: Int) { @Serializable data class PolyDerived(val s: String) : PolyBase(1) -@SharedImmutable val BaseAndDerivedModule = SerializersModule { polymorphic(PolyBase::class, PolyBase.serializer()) { subclass(PolyDerived.serializer()) diff --git a/core/commonTest/src/kotlinx/serialization/UmbrellaTypes.kt b/core/commonTest/src/kotlinx/serialization/UmbrellaTypes.kt index 61e42f61..24e4c520 100644 --- a/core/commonTest/src/kotlinx/serialization/UmbrellaTypes.kt +++ b/core/commonTest/src/kotlinx/serialization/UmbrellaTypes.kt @@ -67,7 +67,6 @@ data class ArraysUmbrella( arrIntData.contentEquals(other.arrIntData) } -@SharedImmutable val umbrellaInstance = TypesUmbrella( Unit, true, 10, 20, 30, 40, 50.1f, 60.1, 'A', "Str0", Attitude.POSITIVE, IntData(70), null, null, 11, 21, 31, 41, 51.1f, 61.1, 'B', "Str1", Attitude.NEUTRAL, null, diff --git a/core/nativeTest/src/kotlinx/serialization/test/CurrentPlatform.kt b/core/nativeTest/src/kotlinx/serialization/test/CurrentPlatform.kt index 9e51d7f4..2691ce04 100644 --- a/core/nativeTest/src/kotlinx/serialization/test/CurrentPlatform.kt +++ b/core/nativeTest/src/kotlinx/serialization/test/CurrentPlatform.kt @@ -5,7 +5,5 @@ package kotlinx.serialization.test import kotlinx.serialization.test.Platform -import kotlin.native.concurrent.SharedImmutable -@SharedImmutable public actual val currentPlatform: Platform = Platform.NATIVE diff --git a/formats/cbor/commonTest/src/kotlinx/serialization/PolymorphismTestData.kt b/formats/cbor/commonTest/src/kotlinx/serialization/PolymorphismTestData.kt index 86aafe42..b4d3c53a 100644 --- a/formats/cbor/commonTest/src/kotlinx/serialization/PolymorphismTestData.kt +++ b/formats/cbor/commonTest/src/kotlinx/serialization/PolymorphismTestData.kt @@ -19,7 +19,6 @@ data class SimpleStringInheritor(val s: String, val i: Int) : SimpleAbstract() @Serializable data class PolyBox(@Polymorphic val boxed: SimpleAbstract) -@SharedImmutable val SimplePolymorphicModule = SerializersModule { polymorphic(SimpleAbstract::class) { subclass(SimpleIntInheritor.serializer()) diff --git a/formats/json-tests/commonTest/src/kotlinx/serialization/PolymorphismTestData.kt b/formats/json-tests/commonTest/src/kotlinx/serialization/PolymorphismTestData.kt index 6d4d42f2..a185ccb7 100644 --- a/formats/json-tests/commonTest/src/kotlinx/serialization/PolymorphismTestData.kt +++ b/formats/json-tests/commonTest/src/kotlinx/serialization/PolymorphismTestData.kt @@ -37,7 +37,6 @@ class PolyDefaultWithId(id: Int) : PolyBase(id) @Serializable data class PolyDerived(val s: String) : PolyBase(1) -@SharedImmutable val BaseAndDerivedModule = SerializersModule { polymorphic(PolyBase::class, PolyBase.serializer()) { subclass(PolyDerived.serializer()) diff --git a/formats/json-tests/commonTest/src/kotlinx/serialization/UmbrellaTypes.kt b/formats/json-tests/commonTest/src/kotlinx/serialization/UmbrellaTypes.kt index 5e6432ea..52ab0f27 100644 --- a/formats/json-tests/commonTest/src/kotlinx/serialization/UmbrellaTypes.kt +++ b/formats/json-tests/commonTest/src/kotlinx/serialization/UmbrellaTypes.kt @@ -64,7 +64,6 @@ data class ArraysUmbrella( arrIntData.contentEquals(other.arrIntData) } -@SharedImmutable val umbrellaInstance = TypesUmbrella( Unit, true, 10, 20, 30, 40, 50.1f, 60.1, 'A', "Str0", Attitude.POSITIVE, IntData(70), null, null, 11, 21, 31, 41, 51.1f, 61.1, 'B', "Str1", Attitude.NEUTRAL, null, diff --git a/formats/json-tests/commonTest/src/kotlinx/serialization/json/polymorphic/PolymorphicClasses.kt b/formats/json-tests/commonTest/src/kotlinx/serialization/json/polymorphic/PolymorphicClasses.kt index e46de17a..e70d89c3 100644 --- a/formats/json-tests/commonTest/src/kotlinx/serialization/json/polymorphic/PolymorphicClasses.kt +++ b/formats/json-tests/commonTest/src/kotlinx/serialization/json/polymorphic/PolymorphicClasses.kt @@ -38,7 +38,6 @@ internal data class OuterBox(@Polymorphic val outerBase: OuterBase, @Polymorphic @Serializable internal data class OuterNullableBox(@Polymorphic val outerBase: OuterBase?, @Polymorphic val innerBase: InnerBase?) -@SharedImmutable internal val polymorphicTestModule = SerializersModule { polymorphic(InnerBase::class) { subclass(InnerImpl.serializer()) @@ -51,13 +50,11 @@ internal val polymorphicTestModule = SerializersModule { } } -@SharedImmutable internal val polymorphicJson = Json { serializersModule = polymorphicTestModule encodeDefaults = true } -@SharedImmutable internal val polymorphicRelaxedJson = Json { isLenient = true serializersModule = polymorphicTestModule diff --git a/formats/json-tests/nativeTest/src/kotlinx/serialization/test/CurrentPlatform.kt b/formats/json-tests/nativeTest/src/kotlinx/serialization/test/CurrentPlatform.kt index 32806c1f..58249044 100644 --- a/formats/json-tests/nativeTest/src/kotlinx/serialization/test/CurrentPlatform.kt +++ b/formats/json-tests/nativeTest/src/kotlinx/serialization/test/CurrentPlatform.kt @@ -4,8 +4,5 @@ package kotlinx.serialization.test -import kotlin.native.concurrent.SharedImmutable - -@SharedImmutable public actual val currentPlatform: Platform = Platform.NATIVE diff --git a/formats/json/commonMain/src/kotlinx/serialization/json/JsonElement.kt b/formats/json/commonMain/src/kotlinx/serialization/json/JsonElement.kt index 01359435..74abf34a 100644 --- a/formats/json/commonMain/src/kotlinx/serialization/json/JsonElement.kt +++ b/formats/json/commonMain/src/kotlinx/serialization/json/JsonElement.kt @@ -11,7 +11,6 @@ import kotlinx.serialization.builtins.serializer import kotlinx.serialization.descriptors.SerialDescriptor import kotlinx.serialization.internal.InlinePrimitiveDescriptor import kotlinx.serialization.json.internal.* -import kotlin.native.concurrent.SharedImmutable /** * Class representing single JSON element. @@ -134,7 +133,6 @@ public fun JsonUnquotedLiteral(value: String?): JsonPrimitive { } /** Used as a marker to indicate during encoding that the [JsonEncoder] should use `encodeInline()` */ -@SharedImmutable internal val jsonUnquotedLiteralDescriptor: SerialDescriptor = InlinePrimitiveDescriptor("kotlinx.serialization.json.JsonUnquotedLiteral", String.serializer()) diff --git a/formats/json/commonMain/src/kotlinx/serialization/json/internal/JsonNamesMap.kt b/formats/json/commonMain/src/kotlinx/serialization/json/internal/JsonNamesMap.kt index 762bacd9..fc9cc19b 100644 --- a/formats/json/commonMain/src/kotlinx/serialization/json/internal/JsonNamesMap.kt +++ b/formats/json/commonMain/src/kotlinx/serialization/json/internal/JsonNamesMap.kt @@ -11,10 +11,8 @@ import kotlinx.serialization.encoding.* import kotlinx.serialization.json.* import kotlin.native.concurrent.* -@SharedImmutable internal val JsonDeserializationNamesKey = DescriptorSchemaCache.Key<Map<String, Int>>() -@SharedImmutable internal val JsonSerializationNamesKey = DescriptorSchemaCache.Key<Array<String>>() private fun SerialDescriptor.buildDeserializationNamesMap(json: Json): Map<String, Int> { 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 10a464d0..c6f76cb3 100644 --- a/formats/json/commonMain/src/kotlinx/serialization/json/internal/StreamingJsonEncoder.kt +++ b/formats/json/commonMain/src/kotlinx/serialization/json/internal/StreamingJsonEncoder.kt @@ -12,7 +12,6 @@ import kotlinx.serialization.json.* import kotlinx.serialization.modules.* import kotlin.native.concurrent.* -@SharedImmutable private val unsignedNumberDescriptors = setOf( UInt.serializer().descriptor, ULong.serializer().descriptor, diff --git a/formats/json/commonMain/src/kotlinx/serialization/json/internal/StringOps.kt b/formats/json/commonMain/src/kotlinx/serialization/json/internal/StringOps.kt index f253d35a..f488d903 100644 --- a/formats/json/commonMain/src/kotlinx/serialization/json/internal/StringOps.kt +++ b/formats/json/commonMain/src/kotlinx/serialization/json/internal/StringOps.kt @@ -13,7 +13,6 @@ private fun toHexChar(i: Int) : Char { } @PublishedApi -@SharedImmutable internal val ESCAPE_STRINGS: Array<String?> = arrayOfNulls<String>(93).apply { for (c in 0..0x1f) { val c1 = toHexChar(c shr 12) @@ -31,7 +30,6 @@ internal val ESCAPE_STRINGS: Array<String?> = arrayOfNulls<String>(93).apply { this[0x0c] = "\\f" } -@SharedImmutable internal val ESCAPE_MARKERS: ByteArray = ByteArray(93).apply { for (c in 0..0x1f) { this[c] = 1.toByte() diff --git a/formats/protobuf/commonMain/src/kotlinx/serialization/protobuf/internal/SuppressAnimalSniffer.kt b/formats/protobuf/commonMain/src/kotlinx/serialization/protobuf/internal/SuppressAnimalSniffer.kt new file mode 100644 index 00000000..35607ec9 --- /dev/null +++ b/formats/protobuf/commonMain/src/kotlinx/serialization/protobuf/internal/SuppressAnimalSniffer.kt @@ -0,0 +1,14 @@ +/* + * Copyright 2017-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. + */ + +package kotlinx.serialization.protobuf.internal + +/** + * Suppresses Animal Sniffer plugin errors for certain methods. + * Such methods include references to Java 8 methods that are not + * available in Android API, but can be desugared by R8. + */ +@Retention(AnnotationRetention.BINARY) +@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION) +internal annotation class SuppressAnimalSniffer
\ No newline at end of file diff --git a/formats/protobuf/commonMain/src/kotlinx/serialization/protobuf/schema/ProtoBufSchemaGenerator.kt b/formats/protobuf/commonMain/src/kotlinx/serialization/protobuf/schema/ProtoBufSchemaGenerator.kt index 8f326939..b22df626 100644 --- a/formats/protobuf/commonMain/src/kotlinx/serialization/protobuf/schema/ProtoBufSchemaGenerator.kt +++ b/formats/protobuf/commonMain/src/kotlinx/serialization/protobuf/schema/ProtoBufSchemaGenerator.kt @@ -433,6 +433,7 @@ public object ProtoBufSchemaGenerator { } } + @SuppressAnimalSniffer // Boolean.hashCode(boolean) in compiler-generated hashCode implementation private data class TypeDefinition( val descriptor: SerialDescriptor, val isSynthetic: Boolean = false, diff --git a/formats/protobuf/commonTest/src/kotlinx/serialization/PolymorphismTestData.kt b/formats/protobuf/commonTest/src/kotlinx/serialization/PolymorphismTestData.kt index 7ef97293..eb6ebe7e 100644 --- a/formats/protobuf/commonTest/src/kotlinx/serialization/PolymorphismTestData.kt +++ b/formats/protobuf/commonTest/src/kotlinx/serialization/PolymorphismTestData.kt @@ -46,7 +46,6 @@ data class SimpleStringInheritor(val s: String, val i: Int) : SimpleAbstract() @Serializable data class PolyBox(@Polymorphic val boxed: SimpleAbstract) -@SharedImmutable val SimplePolymorphicModule = SerializersModule { polymorphic(SimpleAbstract::class) { subclass(SimpleIntInheritor.serializer()) diff --git a/formats/protobuf/nativeTest/src/kotlinx/serialization/test/CurrentPlatform.kt b/formats/protobuf/nativeTest/src/kotlinx/serialization/test/CurrentPlatform.kt index 36221960..badc7b03 100644 --- a/formats/protobuf/nativeTest/src/kotlinx/serialization/test/CurrentPlatform.kt +++ b/formats/protobuf/nativeTest/src/kotlinx/serialization/test/CurrentPlatform.kt @@ -5,8 +5,4 @@ package kotlinx.serialization.test -import kotlin.native.concurrent.SharedImmutable - - -@SharedImmutable public actual val currentPlatform: Platform = Platform.NATIVE |