[FIR] Avoid unnecessary `UNNECESSARY_LATEINIT`
^KT-68082
diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/lateinitBackingFields.kt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/lateinitBackingFields.kt
index 9343214..580687b 100644
--- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/lateinitBackingFields.kt
+++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/lateinitBackingFields.kt
@@ -13,7 +13,7 @@
// Not allowed for properties with
// custom accessors & backing fields
-<!INAPPLICABLE_LATEINIT_MODIFIER, INAPPLICABLE_LATEINIT_MODIFIER, UNNECESSARY_LATEINIT!>lateinit<!> <!VAR_PROPERTY_WITH_EXPLICIT_BACKING_FIELD!>var<!> number: Number
+<!INAPPLICABLE_LATEINIT_MODIFIER, INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> <!VAR_PROPERTY_WITH_EXPLICIT_BACKING_FIELD!>var<!> number: Number
field = 4
set(value) {
field = 10
@@ -22,7 +22,7 @@
val something: Number
<!LATEINIT_FIELD_IN_VAL_PROPERTY, LATEINIT_PROPERTY_FIELD_DECLARATION_WITH_INITIALIZER, WRONG_MODIFIER_TARGET!>lateinit<!> field = 4
-<!INAPPLICABLE_LATEINIT_MODIFIER, INAPPLICABLE_LATEINIT_MODIFIER, UNNECESSARY_LATEINIT!>lateinit<!> <!VAR_PROPERTY_WITH_EXPLICIT_BACKING_FIELD!>var<!> oneMore: Number
+<!INAPPLICABLE_LATEINIT_MODIFIER, INAPPLICABLE_LATEINIT_MODIFIER!>lateinit<!> <!VAR_PROPERTY_WITH_EXPLICIT_BACKING_FIELD!>var<!> oneMore: Number
<!LATEINIT_PROPERTY_FIELD_DECLARATION_WITH_INITIALIZER, WRONG_MODIFIER_TARGET!>lateinit<!> field = 4
set(value) {
field = 10
diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirTopLevelPropertiesChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirTopLevelPropertiesChecker.kt
index c2d3009..50c79c4 100644
--- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirTopLevelPropertiesChecker.kt
+++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirTopLevelPropertiesChecker.kt
@@ -229,6 +229,7 @@
if (LanguageFeature.EnableDfaWarningsInK2.isEnabled()) {
if (
backingFieldRequired &&
+ !propertySymbol.hasExplicitBackingField &&
!inInterface &&
isCorrectlyInitialized &&
propertySymbol.backingFieldSymbol?.hasAnnotation(StandardClassIds.Annotations.Transient, context.session) != true &&