[FIR] Make FirBackingField initializer optional

This commit is contained in:
Nikolay Lunyak
2021-09-08 11:17:56 +03:00
committed by TeamCityServer
parent 3a3ef161d1
commit 871aebd423
3 changed files with 9 additions and 10 deletions
@@ -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)
}
@@ -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
@@ -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()