[FIR2IR] Use backing field to read property if no getter

This commit is contained in:
Mikhail Glukhikh
2020-03-16 15:21:54 +03:00
parent b6fdd6197a
commit 53cb9035b6
@@ -65,11 +65,13 @@ internal class CallGenerator(
)
symbol is IrPropertySymbol && symbol.isBound -> {
val getter = symbol.owner.getter
if (getter != null) {
IrCallImpl(startOffset, endOffset, type, getter.symbol, origin = IrStatementOrigin.GET_PROPERTY)
} else {
IrErrorCallExpressionImpl(
startOffset, endOffset, type, "No getter found for ${qualifiedAccess.calleeReference.render()}"
val backingField = symbol.owner.backingField
when {
getter != null -> IrCallImpl(startOffset, endOffset, type, getter.symbol, origin = IrStatementOrigin.GET_PROPERTY)
backingField != null -> IrGetFieldImpl(startOffset, endOffset, backingField.symbol, type)
else -> IrErrorCallExpressionImpl(
startOffset, endOffset, type,
description = "No getter or backing field found for ${qualifiedAccess.calleeReference.render()}"
)
}
}