FIR: Minor. Extract helpers

This commit is contained in:
Denis.Zharkov
2021-10-19 18:10:06 +03:00
committed by TeamCityServer
parent fba44759c0
commit 5317cf3af1
@@ -1106,13 +1106,10 @@ abstract class FirDataFlowAnalyzer<FLOW : Flow>(
variableStorage.getOrCreateRealVariable(flow, initializer.symbol, initializer) variableStorage.getOrCreateRealVariable(flow, initializer.symbol, initializer)
?.let { initializerVariable -> ?.let { initializerVariable ->
val isInitializerStable = initializerVariable.stability == PropertyStability.STABLE_VALUE || val isInitializerStable =
(initializerVariable.stability == PropertyStability.LOCAL_VAR && initializerVariable.isStable || (initializerVariable.hasLocalStability && initializer.isAccessToStableVariable())
initializer is FirQualifiedAccessExpression &&
!isAccessToUnstableLocalVariable(initializer))
if (isInitializerStable && (propertyVariable.stability == PropertyStability.STABLE_VALUE || propertyVariable.stability == PropertyStability.LOCAL_VAR) if (isInitializerStable && (propertyVariable.hasLocalStability || propertyVariable.isStable)) {
) {
logicSystem.addLocalVariableAlias( logicSystem.addLocalVariableAlias(
flow, propertyVariable, flow, propertyVariable,
RealVariableAndType(initializerVariable, initializer.coneType) RealVariableAndType(initializerVariable, initializer.coneType)
@@ -1141,6 +1138,12 @@ abstract class FirDataFlowAnalyzer<FLOW : Flow>(
} }
} }
private fun FirExpression.isAccessToStableVariable(): Boolean =
this is FirQualifiedAccessExpression && !isAccessToUnstableLocalVariable(this)
private val RealVariable.isStable get() = stability == PropertyStability.STABLE_VALUE
private val RealVariable.hasLocalStability get() = stability == PropertyStability.LOCAL_VAR
fun exitThrowExceptionNode(throwExpression: FirThrowExpression) { fun exitThrowExceptionNode(throwExpression: FirThrowExpression) {
graphBuilder.exitThrowExceptionNode(throwExpression).mergeIncomingFlow() graphBuilder.exitThrowExceptionNode(throwExpression).mergeIncomingFlow()