From 02b72e16efe1ce8ed3f493f79f80cd6516056ff4 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Tue, 1 Sep 2020 12:28:25 +0300 Subject: [PATCH] FIR: Temporary weaken required phase in ensureResolvedForCalls Currently, lazy resolution in IDE immediately starts common body resolution after STATUS (that lead to loops during recursive resolve) --- .../fir/resolve/transformers/PhaseUtils.kt | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 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 1f9334093f9..44797b9c827 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 @@ -7,8 +7,6 @@ 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.FirFunction -import org.jetbrains.kotlin.fir.declarations.FirProperty import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.resolve.fullyExpandedType import org.jetbrains.kotlin.fir.resolve.toSymbol @@ -37,18 +35,21 @@ fun AbstractFirBasedSymbol<*>.ensureResolvedForCalls( useSiteSession: FirSession, ) { 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 (fir.resolvePhase >= FirResolvePhase.DECLARATIONS) return - 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 - } +// 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 +// } + + val requiredPhase = FirResolvePhase.DECLARATIONS ensureResolved(requiredPhase, useSiteSession) }