diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/PhaseUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/PhaseUtils.kt index 6d3b22d4663..1f9334093f9 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/PhaseUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/PhaseUtils.kt @@ -36,12 +36,20 @@ fun AbstractFirBasedSymbol<*>.ensureResolved( fun AbstractFirBasedSymbol<*>.ensureResolvedForCalls( useSiteSession: FirSession, ) { - if ((fir as FirDeclaration).resolvePhase >= FirResolvePhase.CONTRACTS) return - val requiredPhase = when (this.fir) { + val fir = fir as FirDeclaration + if (fir.resolvePhase >= FirResolvePhase.CONTRACTS) return + val requiredPhase = when (fir) { is FirFunction<*>, is FirProperty -> FirResolvePhase.CONTRACTS else -> FirResolvePhase.STATUS } + if (requiredPhase == FirResolvePhase.CONTRACTS) { + // Workaround for recursive contracts in CLI + // Otherwise the assertion about presence of fir.session.phaseManager would fail + // See org.jetbrains.kotlin.fir.FirOldFrontendDiagnosticsTestWithStdlibGenerated.Contracts.Dsl.Errors.testRecursiveContract + if (fir.session.phaseManager == null) return + } + ensureResolved(requiredPhase, useSiteSession) }