FIR IDE: fix bodies calculator for property acessors

This commit is contained in:
Ilya Kirillov
2020-10-13 22:30:10 +03:00
parent ab4faa52f0
commit a585d20639
@@ -54,26 +54,27 @@ internal object FirLazyBodiesCalculator {
val rawFirBuilder = createRawFirBuilder(firProperty) val rawFirBuilder = createRawFirBuilder(firProperty)
val newProperty = rawFirBuilder.buildPropertyWithBody(firProperty.psi as KtProperty) val newProperty = rawFirBuilder.buildPropertyWithBody(firProperty.psi as KtProperty)
newProperty.apply {
getter?.takeIf { it.body is FirLazyBlock }?.let { getter ->
val newGetter = newProperty.getter!!
getter.replaceBody(newGetter.body)
getter.replaceContractDescription(newGetter.contractDescription)
}
setter?.takeIf { it.body is FirLazyBlock }?.let { setter ->
val newSetter = newProperty.setter!!
setter.replaceBody(newSetter.body)
setter.replaceContractDescription(newSetter.contractDescription)
}
if (firProperty.initializer is FirLazyExpression) {
firProperty.replaceInitializer(newProperty.initializer)
}
val delegate = firProperty.delegate firProperty.getter?.takeIf { it.body is FirLazyBlock }?.let { getter ->
if (delegate is FirWrappedDelegateExpression && delegate.expression is FirLazyExpression) { val newGetter = newProperty.getter!!
val newDelegate = newProperty.delegate as FirWrappedDelegateExpression getter.replaceBody(newGetter.body)
delegate.replaceExpression(newDelegate.expression) getter.replaceContractDescription(newGetter.contractDescription)
} }
firProperty.setter?.takeIf { it.body is FirLazyBlock }?.let { setter ->
val newSetter = newProperty.setter!!
setter.replaceBody(newSetter.body)
setter.replaceContractDescription(newSetter.contractDescription)
}
if (firProperty.initializer is FirLazyExpression) {
firProperty.replaceInitializer(newProperty.initializer)
}
val delegate = firProperty.delegate
if (delegate is FirWrappedDelegateExpression && delegate.expression is FirLazyExpression) {
val newDelegate = newProperty.delegate as FirWrappedDelegateExpression
delegate.replaceExpression(newDelegate.expression)
} }
} }
@@ -121,4 +122,4 @@ private object FirLazyBodiesCalculatorTransformer : FirTransformer<Nothing?>() {
} }
return super.transformProperty(property, data) return super.transformProperty(property, data)
} }
} }