[LL FIR] add checks about resolved context receivers

^KT-60728
^KT-60519
This commit is contained in:
Dmitrii Gridin
2023-07-30 05:57:02 +02:00
committed by Space Team
parent 0e0847bc9d
commit 77344c0845
2 changed files with 8 additions and 0 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.file.builder.LLFirLockProvider
import org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve.FirLazyBodiesCalculator
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkAnnotationTypeIsResolved
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkContextReceiverTypeRefIsResolved
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkReceiverTypeRefIsResolved
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkReturnTypeRefIsResolved
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkTypeRefIsResolved
@@ -57,6 +58,7 @@ internal object LLFirTypeLazyResolver : LLFirLazyResolver(FirResolvePhase.TYPES)
is FirCallableDeclaration -> {
checkReturnTypeRefIsResolved(target, acceptImplicitTypeRef = true)
checkReceiverTypeRefIsResolved(target)
checkContextReceiverTypeRefIsResolved(target)
}
is FirTypeParameter -> {
@@ -134,6 +134,12 @@ internal fun checkReceiverTypeRefIsResolved(declaration: FirCallableDeclaration,
checkTypeRefIsResolved(receiverTypeRef, typeRefName = "receiver type", declaration, acceptImplicitTypeRef)
}
internal fun checkContextReceiverTypeRefIsResolved(declaration: FirCallableDeclaration, acceptImplicitTypeRef: Boolean = false) {
for (contextReceiver in declaration.contextReceivers) {
val receiverTypeRef = contextReceiver.typeRef
checkTypeRefIsResolved(receiverTypeRef, typeRefName = "context receiver type", declaration, acceptImplicitTypeRef)
}
}
internal fun checkContractDescriptionIsResolved(declaration: FirContractDescriptionOwner) {
val contractDescription = declaration.contractDescription