From d532529c30eeff5f62a656e4c6863af7cbef749e Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Fri, 28 Aug 2020 12:39:22 +0300 Subject: [PATCH] FIR: Add workaround for recursive contracts in ensureResolvedForCalls --- .../kotlin/fir/resolve/transformers/PhaseUtils.kt | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) 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) }