[FIR] Add function for getting ConeEffectDeclaration from FirEffectDeclaration and use it where needed
This commit is contained in:
+3
-2
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.fir.analysis.checkers.cfa.FirControlFlowChecker
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
||||
import org.jetbrains.kotlin.fir.contracts.FirContractDescription
|
||||
import org.jetbrains.kotlin.fir.contracts.coneEffects
|
||||
import org.jetbrains.kotlin.fir.contracts.description.ConeCallsEffectDeclaration
|
||||
import org.jetbrains.kotlin.fir.contracts.effects
|
||||
import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
|
||||
@@ -45,7 +46,7 @@ object FirCallsEffectAnalyzer : FirControlFlowChecker() {
|
||||
override fun analyze(graph: ControlFlowGraph, reporter: DiagnosticReporter) {
|
||||
val function = (graph.declaration as? FirFunction<*>) ?: return
|
||||
if (function !is FirContractDescriptionOwner) return
|
||||
if (function.contractDescription.effects?.any { it is ConeCallsEffectDeclaration } != true) return
|
||||
if (function.contractDescription.coneEffects?.any { it is ConeCallsEffectDeclaration } != true) return
|
||||
|
||||
val functionalTypeEffects = mutableMapOf<AbstractFirBasedSymbol<*>, ConeCallsEffectDeclaration>()
|
||||
|
||||
@@ -276,7 +277,7 @@ object FirCallsEffectAnalyzer : FirControlFlowChecker() {
|
||||
get() = (this as? FirContractDescriptionOwner)?.contractDescription
|
||||
|
||||
private fun FirContractDescription?.getParameterCallsEffectDeclaration(index: Int): ConeCallsEffectDeclaration? {
|
||||
val effects = this?.effects
|
||||
val effects = this?.coneEffects
|
||||
val callsEffect = effects?.find { it is ConeCallsEffectDeclaration && it.valueParameterReference.parameterIndex == index }
|
||||
return callsEffect as? ConeCallsEffectDeclaration?
|
||||
}
|
||||
|
||||
+2
-1
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.analysis.checkers.cfa.FirControlFlowChecker
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
||||
import org.jetbrains.kotlin.fir.contracts.FirResolvedContractDescription
|
||||
import org.jetbrains.kotlin.fir.contracts.coneEffects
|
||||
import org.jetbrains.kotlin.fir.contracts.description.*
|
||||
import org.jetbrains.kotlin.fir.declarations.FirContractDescriptionOwner
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
||||
@@ -36,7 +37,7 @@ object FirReturnsImpliesAnalyzer : FirControlFlowChecker() {
|
||||
val dataFlowInfo = graphRef.dataFlowInfo
|
||||
if (function !is FirContractDescriptionOwner || dataFlowInfo == null) return
|
||||
|
||||
val effects = (function.contractDescription as? FirResolvedContractDescription)?.effects
|
||||
val effects = (function.contractDescription as? FirResolvedContractDescription)?.coneEffects
|
||||
?.filter { it is ConeConditionalEffectDeclaration && it.effect is ConeReturnsEffectDeclaration }
|
||||
|
||||
if (effects.isNullOrEmpty()) return
|
||||
|
||||
@@ -12,6 +12,9 @@ import org.jetbrains.kotlin.fir.contracts.description.ConeEffectDeclaration
|
||||
val FirContractDescription.effects: List<FirEffectDeclaration>?
|
||||
get() = (this as? FirResolvedContractDescription)?.effects
|
||||
|
||||
val FirContractDescription.coneEffects: List<ConeEffectDeclaration>?
|
||||
get() = effects?.map { it.effect }
|
||||
|
||||
fun ConeEffectDeclaration.toFirEffectDeclaration(source: FirSourceElement? = null): FirEffectDeclaration =
|
||||
buildEffectDeclaration {
|
||||
if (source != null) {
|
||||
|
||||
Reference in New Issue
Block a user