diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/diagnostic/SerializationPluginDeclarationChecker.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/diagnostic/SerializationPluginDeclarationChecker.kt index 46657849923..efd37867dfd 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/diagnostic/SerializationPluginDeclarationChecker.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/diagnostic/SerializationPluginDeclarationChecker.kt @@ -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) { diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/diagnostics/Transients.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/diagnostics/Transients.kt index a126dfb4632..717ec5aa1b4 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/diagnostics/Transients.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/diagnostics/Transients.kt @@ -6,4 +6,7 @@ import kotlinx.serialization.* @Serializable data class WithTransients(@Transient val missing: Int) { @Transient val redundant: Int get() = 42 + + @Transient + lateinit var allowTransientLateinitWithoutInitializer: String } diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/diagnostics/Transients.txt b/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/diagnostics/Transients.txt index 644c2afe067..bf60040c1d3 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/diagnostics/Transients.txt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/testData/diagnostics/Transients.txt @@ -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