From fac10881ea87ac19a292913dd2864dbd5148743c Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Mon, 1 Nov 2021 20:25:55 +0900 Subject: [PATCH] [FIR IDE] Fix receiverType for non-extension functions in AAPI/FE10 This commit partially fixes KtFe10SymbolByPsiTestGenerated.testDelegateField(). --- .../psiBased/KtFe10PsiAnonymousFunctionSymbol.kt | 8 +++++++- .../symbols/psiBased/KtFe10PsiFunctionSymbol.kt | 10 ++++++---- .../KtFe10PsiLiteralAnonymousFunctionSymbol.kt | 4 +++- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiAnonymousFunctionSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiAnonymousFunctionSymbol.kt index cc4053a993e..6d60a873bd5 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiAnonymousFunctionSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiAnonymousFunctionSymbol.kt @@ -46,7 +46,13 @@ internal class KtFe10PsiAnonymousFunctionSymbol( override val receiverType: KtTypeAndAnnotations? get() = withValidityAssertion { - descriptor?.extensionReceiverParameter?.type?.toKtTypeAndAnnotations(analysisContext) ?: createErrorTypeAndAnnotations() + if (psi.isExtensionDeclaration()) { + return null + } + + val descriptor = this.descriptor ?: return createErrorTypeAndAnnotations() + val extensionReceiverParameter = descriptor.extensionReceiverParameter ?: return null + return extensionReceiverParameter.type.toKtTypeAndAnnotations(analysisContext) } override val isExtension: Boolean diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiFunctionSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiFunctionSymbol.kt index ba9a1dba5bd..b5dc864ba80 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiFunctionSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiFunctionSymbol.kt @@ -80,11 +80,13 @@ internal class KtFe10PsiFunctionSymbol( override val receiverType: KtTypeAndAnnotations? get() = withValidityAssertion { - return if (psi.isExtensionDeclaration()) { - descriptor?.extensionReceiverParameter?.type?.toKtTypeAndAnnotations(analysisContext) ?: createErrorTypeAndAnnotations() - } else { - null + if (!psi.isExtensionDeclaration()) { + return null } + + val descriptor = this.descriptor ?: return createErrorTypeAndAnnotations() + val extensionReceiverParameter = descriptor.extensionReceiverParameter ?: return null + return extensionReceiverParameter.type.toKtTypeAndAnnotations(analysisContext) } override val isExtension: Boolean diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiLiteralAnonymousFunctionSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiLiteralAnonymousFunctionSymbol.kt index a9186b2b834..ec080233ac8 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiLiteralAnonymousFunctionSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/psiBased/KtFe10PsiLiteralAnonymousFunctionSymbol.kt @@ -45,7 +45,9 @@ internal class KtFe10PsiLiteralAnonymousFunctionSymbol( override val receiverType: KtTypeAndAnnotations? get() = withValidityAssertion { - descriptor?.extensionReceiverParameter?.type?.toKtTypeAndAnnotations(analysisContext) ?: createErrorTypeAndAnnotations() + val descriptor = this.descriptor ?: return createErrorTypeAndAnnotations() + val extensionReceiverParameter = descriptor.extensionReceiverParameter ?: return null + extensionReceiverParameter.type.toKtTypeAndAnnotations(analysisContext) } override val isExtension: Boolean