[FIR] Don't extract contracts in DFA during non-body resolution stages

This commit is contained in:
Dmitriy Novozhilov
2023-04-18 14:19:33 +03:00
committed by Space Team
parent bde4d003be
commit faf212ca04
3 changed files with 10 additions and 2 deletions
@@ -822,6 +822,8 @@ abstract class FirDataFlowAnalyzer(
}
private fun processConditionalContract(flow: MutableFlow, qualifiedAccess: FirStatement) {
// contracts has no effect on non-body resolve stages
if (!components.transformer.baseTransformerPhase.isBodyResolve) return
val callee = when (qualifiedAccess) {
is FirFunctionCall -> qualifiedAccess.toResolvedCallableSymbol()?.fir as? FirSimpleFunction
is FirQualifiedAccessExpression -> qualifiedAccess.calleeReference.toResolvedPropertySymbol()?.fir?.getter
@@ -6,14 +6,13 @@
package org.jetbrains.kotlin.fir.resolve.transformers
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.visitors.FirDefaultTransformer
import org.jetbrains.kotlin.fir.withFileAnalysisExceptionWrapping
abstract class FirAbstractPhaseTransformer<D>(
protected val baseTransformerPhase: FirResolvePhase
val baseTransformerPhase: FirResolvePhase
) : FirDefaultTransformer<D>() {
open val transformerPhase get() = baseTransformerPhase
@@ -39,3 +39,10 @@ enum class FirResolvePhase(val noProcessor: Boolean = false) {
val ANALYZED_DEPENDENCIES = BODY_RESOLVE
}
}
val FirResolvePhase.isBodyResolve: Boolean
get() = when (this) {
FirResolvePhase.BODY_RESOLVE,
FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE -> true
else -> false
}