FIR: Add workaround for recursive contracts in ensureResolvedForCalls

This commit is contained in:
Denis Zharkov
2020-08-28 12:39:22 +03:00
parent 0a1440d80c
commit d532529c30
@@ -36,12 +36,20 @@ fun AbstractFirBasedSymbol<*>.ensureResolved(
fun AbstractFirBasedSymbol<*>.ensureResolvedForCalls( fun AbstractFirBasedSymbol<*>.ensureResolvedForCalls(
useSiteSession: FirSession, useSiteSession: FirSession,
) { ) {
if ((fir as FirDeclaration).resolvePhase >= FirResolvePhase.CONTRACTS) return val fir = fir as FirDeclaration
val requiredPhase = when (this.fir) { if (fir.resolvePhase >= FirResolvePhase.CONTRACTS) return
val requiredPhase = when (fir) {
is FirFunction<*>, is FirProperty -> FirResolvePhase.CONTRACTS is FirFunction<*>, is FirProperty -> FirResolvePhase.CONTRACTS
else -> FirResolvePhase.STATUS 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) ensureResolved(requiredPhase, useSiteSession)
} }