diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirPropertyFieldDeclarationChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirPropertyFieldDeclarationChecker.kt index 1c231c569bd..7a19d308d1a 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirPropertyFieldDeclarationChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirPropertyFieldDeclarationChecker.kt @@ -35,7 +35,7 @@ object FirPropertyFieldTypeChecker : FirPropertyChecker() { reporter.reportOn(declaration.initializer?.source, FirErrors.PROPERTY_INITIALIZER_WITH_EXPLICIT_FIELD_DECLARATION, context) } - if (backingField.initializer is FirErrorExpression) { + if (backingField.initializer == null) { reporter.reportOn(backingField.source, FirErrors.PROPERTY_FIELD_DECLARATION_MISSING_INITIALIZER, context) } diff --git a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt index 9848b6e4223..d65ce879afe 100644 --- a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt +++ b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt @@ -1351,18 +1351,16 @@ class DeclarationsConverter( ): FirBackingField { var modifiers = Modifier() var returnType: FirTypeRef = implicitType - var initializerExpression: LighterASTNode? = null + var backingFieldInitializer: FirExpression? = null this?.forEachChildren { when { it.tokenType == MODIFIER_LIST -> modifiers = convertModifierList(it) it.tokenType == TYPE_REFERENCE -> returnType = convertType(it) - it.isExpression() -> initializerExpression = it + it.isExpression() -> { + backingFieldInitializer = expressionConverter.getAsFirExpression(it, "Should have initializer") + } } } - val backingFieldInitializer: FirExpression = expressionConverter.getAsFirExpression( - initializerExpression, - "Should have initializer" - ) var componentVisibility = modifiers.getVisibility() if (componentVisibility == Visibilities.Unknown) { componentVisibility = Visibilities.Private diff --git a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt index 24d3864a9e2..13573a816a3 100644 --- a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt +++ b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt @@ -477,11 +477,12 @@ open class RawFirBuilder( Visibilities.Private } val status = obtainPropertyComponentStatus(componentVisibility, this, property) - val backingFieldInitializer = when (mode) { - BodyBuildingMode.LAZY_BODIES -> buildLazyExpression { + val backingFieldInitializer = when { + this?.hasInitializer() == false -> null + mode == BodyBuildingMode.LAZY_BODIES -> buildLazyExpression { source = this@toFirBackingField?.initializer?.toFirSourceElement() } - BodyBuildingMode.STUBS -> buildExpressionStub() + mode == BodyBuildingMode.STUBS -> buildExpressionStub() else -> this@toFirBackingField?.initializer.toFirExpression("Should have initializer") } val returnType = this?.returnTypeReference.toFirOrImplicitType()