From 67d32c30723233785beadf7033959cb7fc3444c3 Mon Sep 17 00:00:00 2001 From: Roman Golyshev Date: Mon, 15 Jan 2024 23:38:31 +0100 Subject: [PATCH] KT-64993 [AA] Unwrap safe call when deducing the expected type of function argument in `KtFirExpressionTypeProvider` ^KT-64993 Fixed --- .../api/fir/components/KtFirExpressionTypeProvider.kt | 3 ++- .../expectedExpressionType/safeCallArgument.descriptors.txt | 5 ----- .../expectedExpressionType/safeCallArgument.txt | 5 ++++- 3 files changed, 6 insertions(+), 7 deletions(-) delete mode 100644 analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/safeCallArgument.descriptors.txt diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirExpressionTypeProvider.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirExpressionTypeProvider.kt index be5ff596836..ac1534ac6a9 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirExpressionTypeProvider.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirExpressionTypeProvider.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.analysis.api.fir.components import com.intellij.psi.PsiElement import org.jetbrains.kotlin.analysis.api.components.KtExpressionTypeProvider import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession +import org.jetbrains.kotlin.analysis.api.fir.unwrapSafeCall import org.jetbrains.kotlin.analysis.api.fir.utils.unwrap import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken import org.jetbrains.kotlin.analysis.api.types.KtErrorType @@ -219,7 +220,7 @@ internal class KtFirExpressionTypeProvider( private fun getExpectedTypeOfFunctionParameter(expression: PsiElement): KtType? { val (ktCallElement, argumentExpression) = expression.getFunctionCallAsWithThisAsParameter() ?: return null - val firCall = ktCallElement.getOrBuildFirSafe(firResolveSession) ?: return null + val firCall = ktCallElement.getOrBuildFir(firResolveSession)?.unwrapSafeCall() as? FirCall ?: return null val callee = (firCall.calleeReference as? FirResolvedNamedReference)?.resolvedSymbol if (callee?.fir?.origin == FirDeclarationOrigin.SamConstructor) { diff --git a/analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/safeCallArgument.descriptors.txt b/analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/safeCallArgument.descriptors.txt deleted file mode 100644 index 592f269ee76..00000000000 --- a/analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/safeCallArgument.descriptors.txt +++ /dev/null @@ -1,5 +0,0 @@ -expression: arg -expected type: KtUsualClassType: - annotationsList: [] - ownTypeArguments: [] - type: kotlin/String diff --git a/analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/safeCallArgument.txt b/analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/safeCallArgument.txt index e773c6c5030..592f269ee76 100644 --- a/analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/safeCallArgument.txt +++ b/analysis/analysis-api/testData/components/expressionTypeProvider/expectedExpressionType/safeCallArgument.txt @@ -1,2 +1,5 @@ expression: arg -expected type: null +expected type: KtUsualClassType: + annotationsList: [] + ownTypeArguments: [] + type: kotlin/String