From cdd311d1da1cb7efe42a65dfe24525a421ce17cc Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Tue, 15 Nov 2022 14:11:20 +0100 Subject: [PATCH] Revert "[FIR] simplify receiver parameter creation" This reverts commit ad60b345 ^KT-54417 --- .../converter/DeclarationsConverter.kt | 13 +++------ .../kotlin/fir/builder/RawFirBuilder.kt | 27 +++---------------- .../kotlin/fir/builder/ConversionUtils.kt | 6 +++-- 3 files changed, 10 insertions(+), 36 deletions(-) diff --git a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt index 10fa9f3e50b..4d0365413f4 100644 --- a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt +++ b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt @@ -1183,7 +1183,7 @@ class DeclarationsConverter( ) } else { this.isLocal = false - receiverParameter = receiverType?.asReceiverParameter(receiverType?.extractReceiverAnnotations()) + receiverParameter = receiverType?.convertToReceiverParameter() dispatchReceiverType = currentDispatchReceiverType() withCapturedTypeParameters(true, propertySource, firTypeParameters) { @@ -1611,7 +1611,7 @@ class DeclarationsConverter( functionSymbol = FirAnonymousFunctionSymbol() FirAnonymousFunctionBuilder().apply { source = functionSource - receiverParameter = receiverType?.asReceiverParameter(receiverType?.extractReceiverAnnotations()) + receiverParameter = receiverType?.convertToReceiverParameter() symbol = functionSymbol isLambda = false hasExplicitParameterList = true @@ -1626,7 +1626,7 @@ class DeclarationsConverter( functionSymbol = FirNamedFunctionSymbol(callableIdForName(functionName)) FirSimpleFunctionBuilder().apply { source = functionSource - receiverParameter = receiverType?.asReceiverParameter(receiverType?.extractReceiverAnnotations()) + receiverParameter = receiverType?.convertToReceiverParameter() name = functionName status = FirDeclarationStatusImpl( if (isLocal) Visibilities.Local else modifiers.getVisibility(), @@ -1950,13 +1950,6 @@ class DeclarationsConverter( } } - private fun FirTypeRef.extractReceiverAnnotations(): List { - @Suppress("UNCHECKED_CAST") - val receiverAnnotations = annotations.filter { it is FirAnnotationCall && it.useSiteTarget == RECEIVER } as List - (annotations as? MutableList)?.removeIf { it.useSiteTarget == RECEIVER } - return receiverAnnotations - } - /** * @see org.jetbrains.kotlin.parsing.KotlinParsing.parseTypeRef */ diff --git a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt index 9577a3051b8..4e8149c7767 100644 --- a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt +++ b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt @@ -189,12 +189,6 @@ open class RawFirBuilder( source = this@toFirOrImplicitType?.toFirSourceElement(KtFakeSourceElementKind.ImplicitTypeRef) } - private fun KtTypeReference.receiverAnnotations(): List { - return annotationEntries - .filter { it.useSiteTarget?.getAnnotationUseSiteTarget() == RECEIVER } - .map { it.convert() } - } - private fun KtTypeReference?.toFirOrUnitType(): FirTypeRef = convertSafe() ?: implicitUnitType @@ -1301,19 +1295,13 @@ open class RawFirBuilder( } else { typeReference.toFirOrImplicitType() } - val receiverType = function.receiverTypeReference.convertSafe() - val receiverAnnotations = if (receiverType != null) { - function.receiverTypeReference?.receiverAnnotations() - } else { - null - } val labelName: String? val isAnonymousFunction = function.name == null && !function.parent.let { it is KtFile || it is KtClassBody } val functionBuilder = if (isAnonymousFunction) { FirAnonymousFunctionBuilder().apply { - receiverParameter = receiverType?.asReceiverParameter(receiverAnnotations) + receiverParameter = receiverType?.convertToReceiverParameter() symbol = FirAnonymousFunctionSymbol() isLambda = false hasExplicitParameterList = true @@ -1322,7 +1310,7 @@ open class RawFirBuilder( } } else { FirSimpleFunctionBuilder().apply { - receiverParameter = receiverType?.asReceiverParameter(receiverAnnotations) + receiverParameter = receiverType?.convertToReceiverParameter() name = function.nameAsSafeName labelName = runIf(!name.isSpecial) { name.identifier } symbol = FirNamedFunctionSymbol(callableIdForName(function.nameAsSafeName)) @@ -1654,14 +1642,7 @@ open class RawFirBuilder( } } else { isLocal = false - val receiverType = receiverTypeReference.convertSafe() - val receiverAnnotations = if (receiverType != null) { - receiverTypeReference?.receiverAnnotations() - } else { - null - } - - receiverParameter = receiverType?.asReceiverParameter(receiverAnnotations) + receiverParameter = receiverTypeReference.convertSafe()?.convertToReceiverParameter() symbol = FirPropertySymbol(callableIdForName(propertyName)) dispatchReceiverType = currentDispatchReceiverType() extractTypeParametersTo(this, symbol) @@ -1859,11 +1840,9 @@ open class RawFirBuilder( for (modifierList in allModifierLists) { for (annotationEntry in modifierList.annotationEntries) { - if (annotationEntry.useSiteTarget?.getAnnotationUseSiteTarget() == RECEIVER) continue firTypeBuilder.annotations += annotationEntry.convert() } } - return firTypeBuilder.build() } diff --git a/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt b/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt index 61d324e3f4b..74c0af85cfd 100644 --- a/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt +++ b/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt @@ -569,11 +569,13 @@ fun List.filterUseSiteTarget(target: AnnotationUseSiteTarget) } } -fun FirTypeRef.asReceiverParameter(receiverAnnotations: List?): FirReceiverParameter { +fun FirTypeRef.convertToReceiverParameter(): FirReceiverParameter { val typeRef = this return buildReceiverParameter { source = typeRef.source?.fakeElement(KtFakeSourceElementKind.ReceiverFromType) - receiverAnnotations?.let { annotations += it.filterUseSiteTarget(AnnotationUseSiteTarget.RECEIVER) } + @Suppress("UNCHECKED_CAST") + annotations += (typeRef.annotations as List).filterUseSiteTarget(AnnotationUseSiteTarget.RECEIVER) + (typeRef.annotations as MutableList).removeIf { it.useSiteTarget == AnnotationUseSiteTarget.RECEIVER } this.typeRef = typeRef } }