From 5317cf3af1ae4d23c4b2e8c0e9aabe003c1def52 Mon Sep 17 00:00:00 2001 From: "Denis.Zharkov" Date: Tue, 19 Oct 2021 18:10:06 +0300 Subject: [PATCH] FIR: Minor. Extract helpers --- .../kotlin/fir/resolve/dfa/FirDataFlowAnalyzer.kt | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/FirDataFlowAnalyzer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/FirDataFlowAnalyzer.kt index 92d72790d5f..9f93b8b91d2 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/FirDataFlowAnalyzer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/FirDataFlowAnalyzer.kt @@ -1106,13 +1106,10 @@ abstract class FirDataFlowAnalyzer( variableStorage.getOrCreateRealVariable(flow, initializer.symbol, initializer) ?.let { initializerVariable -> - val isInitializerStable = initializerVariable.stability == PropertyStability.STABLE_VALUE || - (initializerVariable.stability == PropertyStability.LOCAL_VAR && - initializer is FirQualifiedAccessExpression && - !isAccessToUnstableLocalVariable(initializer)) + val isInitializerStable = + initializerVariable.isStable || (initializerVariable.hasLocalStability && initializer.isAccessToStableVariable()) - if (isInitializerStable && (propertyVariable.stability == PropertyStability.STABLE_VALUE || propertyVariable.stability == PropertyStability.LOCAL_VAR) - ) { + if (isInitializerStable && (propertyVariable.hasLocalStability || propertyVariable.isStable)) { logicSystem.addLocalVariableAlias( flow, propertyVariable, RealVariableAndType(initializerVariable, initializer.coneType) @@ -1141,6 +1138,12 @@ abstract class FirDataFlowAnalyzer( } } + 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) { graphBuilder.exitThrowExceptionNode(throwExpression).mergeIncomingFlow()