Do not report error about 'initializer required for @Transient properties' on lateinit vars

Fixes https://github.com/Kotlin/kotlinx.serialization/issues/553
This commit is contained in:
Leonid Startsev
2019-09-05 16:36:18 +03:00
parent 4e516d7c94
commit 0b669e72b0
3 changed files with 5 additions and 1 deletions
@@ -114,7 +114,7 @@ open class SerializationPluginDeclarationChecker : DeclarationChecker {
filterUninitialized = false
) + declaration.primaryConstructorPropertiesDescriptorsMap(trace.bindingContext)
propertiesMap.forEach { (descriptor, declaration) ->
val isInitialized = declarationHasInitializer(declaration)
val isInitialized = declarationHasInitializer(declaration) || descriptor.isLateInit
val isMarkedTransient = descriptor.annotations.serialTransient
val hasBackingField = descriptor.hasBackingField(trace.bindingContext)
if (!hasBackingField && isMarkedTransient) {
@@ -6,4 +6,7 @@ import kotlinx.serialization.*
@Serializable
data class WithTransients(<!PLUGIN_ERROR("This property is marked as @Transient and therefore must have an initializing expression")!>@Transient val missing: Int<!>) {
<!PLUGIN_WARNING("Property does not have backing field which makes it non-serializable and therefore @Transient is redundant")!>@Transient<!> val redundant: Int get() = 42
@Transient
lateinit var allowTransientLateinitWithoutInitializer: String
}
@@ -3,6 +3,7 @@ package
@kotlinx.serialization.Serializable public final data class WithTransients {
public constructor WithTransients(/*0*/ missing: kotlin.Int)
@kotlin.Deprecated(level = DeprecationLevel.HIDDEN, message = "This synthesized declaration should not be used directly", replaceWith = kotlin.ReplaceWith(expression = "", imports = {})) public /*synthesized*/ constructor WithTransients(/*0*/ seen1: kotlin.Int, /*1*/ serializationConstructorMarker: kotlinx.serialization.SerializationConstructorMarker?)
@kotlinx.serialization.Transient public final lateinit var allowTransientLateinitWithoutInitializer: kotlin.String
@kotlinx.serialization.Transient public final val missing: kotlin.Int
@kotlinx.serialization.Transient public final val redundant: kotlin.Int
public final operator /*synthesized*/ fun component1(): kotlin.Int