[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:
committed by
Space Team
parent
83bdac8d61
commit
ec180bca71
+15
-8
@@ -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
|
||||||
) {
|
) {
|
||||||
|
|||||||
Reference in New Issue
Block a user