From 410dbcb4cfead6c7b79acd83b51dd6dbe3195b59 Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Mon, 19 Feb 2024 16:19:21 +0100 Subject: [PATCH] [LL FIR] LLFirTypeLazyResolver: add missed type checks for context receivers --- .../fir/transformers/LLFirTypeLazyResolver.kt | 3 +++ .../api/fir/util/firCheckResolvedUtils.kt | 20 +++++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirTypeLazyResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirTypeLazyResolver.kt index c138965d574..032d2952467 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirTypeLazyResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirTypeLazyResolver.kt @@ -52,6 +52,9 @@ internal object LLFirTypeLazyResolver : LLFirLazyResolver(FirResolvePhase.TYPES) checkTypeRefIsResolved(bound, "type parameter bound", target) } } + + is FirRegularClass -> checkContextReceiverTypeRefIsResolved(target) + is FirScript -> checkContextReceiverTypeRefIsResolved(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 b80a5071db3..87403b73af7 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 @@ -177,9 +177,25 @@ internal fun checkReceiverTypeRefIsResolved(declaration: FirCallableDeclaration, } internal fun checkContextReceiverTypeRefIsResolved(declaration: FirCallableDeclaration, acceptImplicitTypeRef: Boolean = false) { - for (contextReceiver in declaration.contextReceivers) { + checkContextReceiverTypeRefIsResolved(declaration.contextReceivers, declaration, acceptImplicitTypeRef) +} + +internal fun checkContextReceiverTypeRefIsResolved(declaration: FirRegularClass, acceptImplicitTypeRef: Boolean = false) { + checkContextReceiverTypeRefIsResolved(declaration.contextReceivers, declaration, acceptImplicitTypeRef) +} + +internal fun checkContextReceiverTypeRefIsResolved(declaration: FirScript, acceptImplicitTypeRef: Boolean = false) { + checkContextReceiverTypeRefIsResolved(declaration.contextReceivers, declaration, acceptImplicitTypeRef) +} + +private fun checkContextReceiverTypeRefIsResolved( + contextReceivers: List, + owner: FirDeclaration, + acceptImplicitTypeRef: Boolean, +) { + for (contextReceiver in contextReceivers) { val receiverTypeRef = contextReceiver.typeRef - checkTypeRefIsResolved(receiverTypeRef, typeRefName = "context receiver type", declaration, acceptImplicitTypeRef) + checkTypeRefIsResolved(receiverTypeRef, typeRefName = "context receiver type", owner, acceptImplicitTypeRef) } }