[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
This commit is contained in:
Dmitrii Gridin
2023-07-11 15:38:48 +02:00
committed by Space Team
parent 4b330e88be
commit 3d40eba379
2 changed files with 6 additions and 2 deletions
@@ -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)
}
}
@@ -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)