Revert "[FIR] simplify receiver parameter creation"

This reverts commit ad60b345

^KT-54417
This commit is contained in:
Dmitrii Gridin
2022-11-15 14:11:20 +01:00
committed by Space Team
parent b672949820
commit cdd311d1da
3 changed files with 10 additions and 36 deletions
@@ -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<FirAnnotationCall> {
@Suppress("UNCHECKED_CAST")
val receiverAnnotations = annotations.filter { it is FirAnnotationCall && it.useSiteTarget == RECEIVER } as List<FirAnnotationCall>
(annotations as? MutableList<FirAnnotation>)?.removeIf { it.useSiteTarget == RECEIVER }
return receiverAnnotations
}
/**
* @see org.jetbrains.kotlin.parsing.KotlinParsing.parseTypeRef
*/
@@ -189,12 +189,6 @@ open class RawFirBuilder(
source = this@toFirOrImplicitType?.toFirSourceElement(KtFakeSourceElementKind.ImplicitTypeRef)
}
private fun KtTypeReference.receiverAnnotations(): List<FirAnnotationCall> {
return annotationEntries
.filter { it.useSiteTarget?.getAnnotationUseSiteTarget() == RECEIVER }
.map { it.convert<FirAnnotationCall>() }
}
private fun KtTypeReference?.toFirOrUnitType(): FirTypeRef =
convertSafe() ?: implicitUnitType
@@ -1301,19 +1295,13 @@ open class RawFirBuilder(
} else {
typeReference.toFirOrImplicitType()
}
val receiverType = function.receiverTypeReference.convertSafe<FirTypeRef>()
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<FirTypeRef>()
val receiverAnnotations = if (receiverType != null) {
receiverTypeReference?.receiverAnnotations()
} else {
null
}
receiverParameter = receiverType?.asReceiverParameter(receiverAnnotations)
receiverParameter = receiverTypeReference.convertSafe<FirTypeRef>()?.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<FirAnnotation>()
}
}
return firTypeBuilder.build()
}
@@ -569,11 +569,13 @@ fun List<FirAnnotationCall>.filterUseSiteTarget(target: AnnotationUseSiteTarget)
}
}
fun FirTypeRef.asReceiverParameter(receiverAnnotations: List<FirAnnotationCall>?): 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<FirAnnotationCall>).filterUseSiteTarget(AnnotationUseSiteTarget.RECEIVER)
(typeRef.annotations as MutableList<FirAnnotation>).removeIf { it.useSiteTarget == AnnotationUseSiteTarget.RECEIVER }
this.typeRef = typeRef
}
}