[FIR] ImplicitBodyResolveComputationSession: encapsulate compute logic

This is required to simplify the code and have only one enter point

^KT-63042
This commit is contained in:
Dmitrii Gridin
2023-11-29 13:29:19 +01:00
committed by Space Team
parent 83bdac8d61
commit ec180bca71
@@ -175,11 +175,7 @@ open class FirImplicitAwareBodyResolveTransformer(
"Unexpected status in transformCallableMember ($status) for ${member.render()}" "Unexpected status in transformCallableMember ($status) for ${member.render()}"
} }
implicitBodyResolveComputationSession.startComputing(symbol) return implicitBodyResolveComputationSession.compute(symbol, transform)
val result = transform()
implicitBodyResolveComputationSession.storeResult(symbol, result)
return result
} }
} }
@@ -379,7 +375,7 @@ open class FirDesignatedBodyResolveTransformerForReturnTypeCalculator(
} }
} }
class ImplicitBodyResolveComputationSession { open class ImplicitBodyResolveComputationSession {
private val implicitBodyResolveStatusMap = hashMapOf<FirCallableSymbol<*>, ImplicitBodyResolveComputationStatus>() private val implicitBodyResolveStatusMap = hashMapOf<FirCallableSymbol<*>, ImplicitBodyResolveComputationStatus>()
internal fun getStatus(symbol: FirCallableSymbol<*>): ImplicitBodyResolveComputationStatus { internal fun getStatus(symbol: FirCallableSymbol<*>): ImplicitBodyResolveComputationStatus {
@@ -392,7 +388,18 @@ class ImplicitBodyResolveComputationSession {
return implicitBodyResolveStatusMap[symbol] ?: ImplicitBodyResolveComputationStatus.NotComputed return implicitBodyResolveStatusMap[symbol] ?: ImplicitBodyResolveComputationStatus.NotComputed
} }
fun startComputing(symbol: FirCallableSymbol<*>) { protected open fun <D : FirCallableDeclaration> executeTransformation(symbol: FirCallableSymbol<*>, transformation: () -> D): D {
return transformation()
}
internal fun <D : FirCallableDeclaration> compute(symbol: FirCallableSymbol<*>, transformation: () -> D): D {
startComputing(symbol)
val result = executeTransformation(symbol, transformation)
storeResult(symbol, result)
return result
}
private fun startComputing(symbol: FirCallableSymbol<*>) {
require(implicitBodyResolveStatusMap[symbol] == null) { require(implicitBodyResolveStatusMap[symbol] == null) {
"Unexpected static in startComputing for $symbol: ${implicitBodyResolveStatusMap[symbol]}" "Unexpected static in startComputing for $symbol: ${implicitBodyResolveStatusMap[symbol]}"
} }
@@ -400,7 +407,7 @@ class ImplicitBodyResolveComputationSession {
implicitBodyResolveStatusMap[symbol] = ImplicitBodyResolveComputationStatus.Computing implicitBodyResolveStatusMap[symbol] = ImplicitBodyResolveComputationStatus.Computing
} }
fun storeResult( private fun storeResult(
symbol: FirCallableSymbol<*>, symbol: FirCallableSymbol<*>,
transformedDeclaration: FirCallableDeclaration transformedDeclaration: FirCallableDeclaration
) { ) {