From a653a57593d9d413e5be5bfecd6fae27f327aeb8 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Tue, 2 Nov 2021 21:20:35 +0900 Subject: [PATCH] [FIR IDE] Unwrap typealias SAM constructor in AAPI/FE10 This commit fixes KtFe10ResolveCallTestGenerated#testSamConstructorCall(). --- .../KtFe10DescSamConstructorSymbol.kt | 9 ++++++--- .../sam/SamTypeAliasConstructorDescriptor.kt | 17 +++++++++-------- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescSamConstructorSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescSamConstructorSymbol.kt index 36d02292d14..a90609bd385 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescSamConstructorSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescSamConstructorSymbol.kt @@ -21,13 +21,16 @@ import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.calls.inference.returnTypeOrNothing import org.jetbrains.kotlin.resolve.descriptorUtil.isExtension import org.jetbrains.kotlin.resolve.sam.SamConstructorDescriptor +import org.jetbrains.kotlin.resolve.sam.SamTypeAliasConstructorDescriptor internal class KtFe10DescSamConstructorSymbol( override val descriptor: SamConstructorDescriptor, override val analysisContext: Fe10AnalysisContext ) : KtSamConstructorSymbol(), KtFe10DescSymbol { + private val expandedDescriptor: SamConstructorDescriptor + get() = (descriptor as? SamTypeAliasConstructorDescriptor)?.expandedConstructorDescriptor ?: descriptor override val name: Name - get() = withValidityAssertion { descriptor.name } + get() = withValidityAssertion { expandedDescriptor.name } override val valueParameters: List get() = withValidityAssertion { descriptor.valueParameters.map { KtFe10DescValueParameterSymbol(it, analysisContext) } } @@ -36,7 +39,7 @@ internal class KtFe10DescSamConstructorSymbol( get() = withValidityAssertion { descriptor.ktHasStableParameterNames } override val callableIdIfNonLocal: CallableId? - get() = withValidityAssertion { descriptor.callableIdIfNotLocal } + get() = withValidityAssertion { expandedDescriptor.callableIdIfNotLocal } override val annotatedType: KtTypeAndAnnotations get() = withValidityAssertion { descriptor.returnTypeOrNothing.toKtTypeAndAnnotations(analysisContext) } @@ -48,7 +51,7 @@ internal class KtFe10DescSamConstructorSymbol( get() = withValidityAssertion { descriptor.isExtension } override val origin: KtSymbolOrigin - get() = withValidityAssertion { descriptor.getSymbolOrigin(analysisContext) } + get() = withValidityAssertion { expandedDescriptor.getSymbolOrigin(analysisContext) } override fun createPointer(): KtSymbolPointer = withValidityAssertion { val pointerByPsi = KtPsiBasedSymbolPointer.createForSymbolFromSource(this) diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/sam/SamTypeAliasConstructorDescriptor.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/sam/SamTypeAliasConstructorDescriptor.kt index 90d8e160f7c..77128f2a488 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/sam/SamTypeAliasConstructorDescriptor.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/sam/SamTypeAliasConstructorDescriptor.kt @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl interface SamTypeAliasConstructorDescriptor : SamConstructorDescriptor, DeclarationDescriptorWithNavigationSubstitute { val typeAliasDescriptor: TypeAliasDescriptor + val expandedConstructorDescriptor: SamConstructorDescriptor override val substitute: DeclarationDescriptor get() = typeAliasDescriptor @@ -17,15 +18,15 @@ interface SamTypeAliasConstructorDescriptor : SamConstructorDescriptor, Declarat class SamTypeAliasConstructorDescriptorImpl( override val typeAliasDescriptor: TypeAliasDescriptor, - private val samInterfaceConstructorDescriptor: SamConstructorDescriptor + override val expandedConstructorDescriptor: SamConstructorDescriptor ) : SimpleFunctionDescriptorImpl( - typeAliasDescriptor.containingDeclaration, - null, - samInterfaceConstructorDescriptor.baseDescriptorForSynthetic.annotations, - typeAliasDescriptor.name, - CallableMemberDescriptor.Kind.SYNTHESIZED, - typeAliasDescriptor.source + typeAliasDescriptor.containingDeclaration, + null, + expandedConstructorDescriptor.baseDescriptorForSynthetic.annotations, + typeAliasDescriptor.name, + CallableMemberDescriptor.Kind.SYNTHESIZED, + typeAliasDescriptor.source ), SamTypeAliasConstructorDescriptor { override val baseDescriptorForSynthetic: ClassDescriptor - get() = samInterfaceConstructorDescriptor.baseDescriptorForSynthetic + get() = expandedConstructorDescriptor.baseDescriptorForSynthetic }