Fix serializing properties with custom accessors (#3907)

Fixes Kotlin/kotlinx.serialization#956
This commit is contained in:
Sergey Shanshin
2020-11-25 17:06:10 +03:00
committed by GitHub
parent 7327c20200
commit f6c7372089
@@ -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.descriptors.DeserializedPropertyDescriptor
import org.jetbrains.kotlin.serialization.deserialization.getName import org.jetbrains.kotlin.serialization.deserialization.getName
import org.jetbrains.kotlinx.serialization.compiler.diagnostic.SERIALIZABLE_PROPERTIES 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.SerializationDescriptorSerializerPlugin
import org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationPluginMetadataExtensions import org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationPluginMetadataExtensions
@@ -52,6 +51,9 @@ class SerializableProperties(private val serializableClass: ClassDescriptor, val
prop, prop,
primaryConstructorProperties[prop] ?: false, primaryConstructorProperties[prop] ?: false,
prop.hasBackingField(bindingContext) || (prop is DeserializedPropertyDescriptor && prop.backingField != null) // workaround for TODO in .hasBackingField 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 } .filterNot { it.transient }