From 3d40eba3791caa7d02b5fdcb32196f368aa5a1b7 Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Tue, 11 Jul 2023 15:38:48 +0200 Subject: [PATCH] [LL FIR] LLFirContractsLazyResolver: add isResolved check Currently, FirLegacyRawContractDescription is a valid class for resolved contract in case of error description. This condition should be dropped after KT-60310 ^KT-60310 --- .../level/api/fir/transformers/LLFirContractsLazyResolver.kt | 3 ++- .../analysis/low/level/api/fir/util/firCheckResolvedUtils.kt | 5 ++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirContractsLazyResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirContractsLazyResolver.kt index d90977fed83..c3659f72940 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirContractsLazyResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirContractsLazyResolver.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.api.targets.LLFirResolveT import org.jetbrains.kotlin.analysis.low.level.api.fir.api.throwUnexpectedFirElementError import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.LLFirLockProvider import org.jetbrains.kotlin.analysis.low.level.api.fir.util.blockGuard +import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkContractDescriptionIsResolved import org.jetbrains.kotlin.analysis.low.level.api.fir.util.isCallableWithSpecialBody import org.jetbrains.kotlin.fir.FirElementWithResolveState import org.jetbrains.kotlin.fir.FirFileAnnotationsContainer @@ -33,7 +34,7 @@ internal object LLFirContractsLazyResolver : LLFirLazyResolver(FirResolvePhase.C override fun phaseSpecificCheckIsResolved(target: FirElementWithResolveState) { if (target !is FirContractDescriptionOwner) return - // TODO checkContractDescriptionIsResolved(declaration) + checkContractDescriptionIsResolved(target) } } diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/firCheckResolvedUtils.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/firCheckResolvedUtils.kt index 99f9c8b02bb..9f5732456ad 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/firCheckResolvedUtils.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/util/firCheckResolvedUtils.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.analysis.utils.errors.ExceptionAttachmentBuilder import org.jetbrains.kotlin.analysis.utils.errors.checkWithAttachmentBuilder import org.jetbrains.kotlin.fir.FirAnnotationContainer import org.jetbrains.kotlin.fir.FirElementWithResolveState +import org.jetbrains.kotlin.fir.contracts.FirLegacyRawContractDescription import org.jetbrains.kotlin.fir.contracts.FirResolvedContractDescription import org.jetbrains.kotlin.fir.contracts.impl.FirEmptyContractDescription import org.jetbrains.kotlin.fir.declarations.* @@ -136,7 +137,9 @@ internal fun checkReceiverTypeRefIsResolved(declaration: FirCallableDeclaration, internal fun checkContractDescriptionIsResolved(declaration: FirContractDescriptionOwner) { val contractDescription = declaration.contractDescription checkWithAttachmentBuilder( - condition = contractDescription is FirResolvedContractDescription || contractDescription is FirEmptyContractDescription, + condition = contractDescription is FirResolvedContractDescription || + contractDescription is FirEmptyContractDescription || + contractDescription is FirLegacyRawContractDescription /* TODO: should be dropped after KT-60310 */, message = { "Expected ${FirResolvedContractDescription::class.simpleName} or ${FirEmptyContractDescription::class.simpleName} but ${contractDescription::class.simpleName} found for ${declaration::class.simpleName}" } ) { withFirEntry("declaration", declaration)