From f6c73720895ccf675eec5f328a50b107c3df5a26 Mon Sep 17 00:00:00 2001 From: Sergey Shanshin Date: Wed, 25 Nov 2020 17:06:10 +0300 Subject: [PATCH] Fix serializing properties with custom accessors (#3907) Fixes Kotlin/kotlinx.serialization#956 --- .../serialization/compiler/resolve/SerializableProperties.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/resolve/SerializableProperties.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/resolve/SerializableProperties.kt index 86e88e16a2827..2382943ebf0a9 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/resolve/SerializableProperties.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/resolve/SerializableProperties.kt @@ -15,7 +15,6 @@ import org.jetbrains.kotlin.serialization.deserialization.descriptors.Deserializ import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPropertyDescriptor import org.jetbrains.kotlin.serialization.deserialization.getName import org.jetbrains.kotlinx.serialization.compiler.diagnostic.SERIALIZABLE_PROPERTIES -import org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationComponentRegistrar import org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationDescriptorSerializerPlugin import org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationPluginMetadataExtensions @@ -52,6 +51,9 @@ class SerializableProperties(private val serializableClass: ClassDescriptor, val prop, primaryConstructorProperties[prop] ?: false, prop.hasBackingField(bindingContext) || (prop is DeserializedPropertyDescriptor && prop.backingField != null) // workaround for TODO in .hasBackingField + // workaround for overridden getter (val) and getter+setter (var) - in this case hasBackingField returning false + // but initializer presents only for property with backing field + || prop.declaresDefaultValue ) } .filterNot { it.transient }