FIR: Minor. Extract helpers
This commit is contained in:
committed by
TeamCityServer
parent
fba44759c0
commit
5317cf3af1
+9
-6
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user