From fd5ac8575ca6c96be8d63b610ffc0fa32507395e Mon Sep 17 00:00:00 2001 From: Egor Kulikov Date: Tue, 29 Aug 2023 09:26:52 +0000 Subject: [PATCH] [FIR] Do not expect FirExpression when KtLoopExpression is supplied ^KTIJ-26599 fixed Merge-request: KT-MR-11708 Merged-by: Egor Kulikov --- .../api/fir/components/KtFirCompletionCandidateChecker.kt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCompletionCandidateChecker.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCompletionCandidateChecker.kt index 451bb28d686..9953f4438a3 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCompletionCandidateChecker.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCompletionCandidateChecker.kt @@ -27,8 +27,10 @@ import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase import org.jetbrains.kotlin.fir.types.receiverType import org.jetbrains.kotlin.psi.KtExpression import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.psi.KtLoopExpression import org.jetbrains.kotlin.psi.KtSafeQualifiedExpression import org.jetbrains.kotlin.psi.KtSimpleNameExpression +import org.jetbrains.kotlin.psi.KtStatementExpression import org.jetbrains.kotlin.psi.psiUtil.getQualifiedExpressionForReceiver import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment import org.jetbrains.kotlin.utils.exceptions.withPsiEntry @@ -112,7 +114,11 @@ internal class KtFirCompletionCandidateChecker( * @receiver PSI receiver expression in some qualified expression (e.g. `foo` in `foo?.bar()`, `a` in `a.b`) * @return A FIR expression which most precisely represents the receiver for the corresponding FIR call. */ - private fun KtExpression.getMatchingFirExpressionForCallReceiver(): FirExpression { + private fun KtExpression.getMatchingFirExpressionForCallReceiver(): FirExpression? { + // FIR for KtStatementExpression is not FirExpression + if (this is KtStatementExpression) { + return null + } val psiWholeCall = this.getQualifiedExpressionForReceiver() if (psiWholeCall !is KtSafeQualifiedExpression) return this.getOrBuildFirOfType(firResolveSession)