FIR IDE: fix bodies calculator for property acessors
This commit is contained in:
+21
-20
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user