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(
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)
}