[IR] Support MFVC properties without backing fields

Signed-off-by: Evgeniy.Zhelenskiy <Evgeniy.Zhelenskiy@jetbrains.com>

#KT-1179
This commit is contained in:
Evgeniy.Zhelenskiy
2022-12-17 04:34:07 +01:00
committed by Space Team
parent 5e01669e23
commit 53b98503ed
6 changed files with 53 additions and 12 deletions
@@ -912,13 +912,7 @@ internal class JvmMultiFieldValueClassLowering(
override fun visitCall(expression: IrCall): IrExpression {
val callee = expression.symbol.owner
val property = callee.property
if (
property != null &&
callee.extensionReceiverParameter == null &&
callee.contextReceiverParametersCount == 0 &&
callee.isGetter &&
(expression.type.needsMfvcFlattening() || expression.dispatchReceiver?.type?.needsMfvcFlattening() == true)
) {
if (property != null && callee.isGetter && replacements.getMfvcPropertyNode(property) != null) {
require(callee.valueParameters.isEmpty()) { "Unexpected getter:\n${callee.dump()}" }
expression.dispatchReceiver = expression.dispatchReceiver?.transform(this, null)
return context.createJvmIrBuilder(getCurrentScopeSymbol(), expression).irBlock {
@@ -335,8 +335,9 @@ class MemoizedMultiFieldValueClassReplacements(
}
}
private fun useRootNode(
parent: IrClass,
property: IrProperty
) = parent.isMultiFieldValueClass && (property.getter?.isStatic ?: property.backingField?.isStatic) == false
private fun useRootNode(parent: IrClass, property: IrProperty): Boolean {
val getter = property.getter
if (getter != null && (getter.contextReceiverParametersCount > 0 || getter.extensionReceiverParameter != null)) return false
return parent.isMultiFieldValueClass && (getter?.isStatic ?: property.backingField?.isStatic) == false
}
}