[FIR] Add methods to replace dispatch and extension receivers

This commit is contained in:
Dmitriy Novozhilov
2022-12-15 12:15:53 +02:00
committed by Space Team
parent 4bddb27ca3
commit d45ae59d33
23 changed files with 115 additions and 3 deletions
@@ -48,6 +48,10 @@ abstract class FirCallableReferenceAccess : FirQualifiedAccessExpression() {
abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?)
abstract override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression)
abstract override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression)
abstract fun replaceCalleeReference(newCalleeReference: FirNamedReference)
abstract override fun replaceCalleeReference(newCalleeReference: FirReference)
@@ -48,6 +48,10 @@ abstract class FirComponentCall : FirFunctionCall() {
abstract override fun replaceTypeArguments(newTypeArguments: List<FirTypeProjection>)
abstract override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression)
abstract override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression)
abstract override fun replaceArgumentList(newArgumentList: FirArgumentList)
abstract override fun replaceCalleeReference(newCalleeReference: FirNamedReference)
@@ -40,6 +40,8 @@ abstract class FirDelegatedConstructorCall : FirPureAbstractElement(), FirResolv
abstract fun replaceConstructedTypeRef(newConstructedTypeRef: FirTypeRef)
abstract fun replaceDispatchReceiver(newDispatchReceiver: FirExpression)
abstract override fun replaceCalleeReference(newCalleeReference: FirReference)
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirDelegatedConstructorCall
@@ -49,6 +49,10 @@ abstract class FirFunctionCall : FirQualifiedAccessExpression(), FirCall {
abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?)
abstract override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression)
abstract override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression)
abstract override fun replaceArgumentList(newArgumentList: FirArgumentList)
abstract fun replaceCalleeReference(newCalleeReference: FirNamedReference)
@@ -49,6 +49,10 @@ abstract class FirImplicitInvokeCall : FirFunctionCall() {
abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?)
abstract override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression)
abstract override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression)
abstract override fun replaceArgumentList(newArgumentList: FirArgumentList)
abstract override fun replaceCalleeReference(newCalleeReference: FirNamedReference)
@@ -49,6 +49,10 @@ abstract class FirIntegerLiteralOperatorCall : FirFunctionCall() {
abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?)
abstract override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression)
abstract override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression)
abstract override fun replaceArgumentList(newArgumentList: FirArgumentList)
abstract override fun replaceCalleeReference(newCalleeReference: FirNamedReference)
@@ -50,6 +50,10 @@ abstract class FirPropertyAccessExpression : FirQualifiedAccessExpression() {
abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?)
abstract override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression)
abstract override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression)
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirPropertyAccessExpression
abstract override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirPropertyAccessExpression
@@ -41,6 +41,10 @@ interface FirQualifiedAccess : FirResolvable, FirStatement, FirContextReceiverAr
fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?)
fun replaceDispatchReceiver(newDispatchReceiver: FirExpression)
fun replaceExtensionReceiver(newExtensionReceiver: FirExpression)
@FirImplementationDetail
fun replaceSource(newSource: KtSourceElement?)
@@ -48,6 +48,10 @@ abstract class FirQualifiedAccessExpression : FirExpression(), FirQualifiedAcces
abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?)
abstract override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression)
abstract override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression)
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirQualifiedAccessExpression
abstract override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirQualifiedAccessExpression
@@ -48,6 +48,10 @@ abstract class FirThisReceiverExpression : FirQualifiedAccessExpression() {
abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?)
abstract override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression)
abstract override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression)
abstract fun replaceCalleeReference(newCalleeReference: FirThisReference)
abstract override fun replaceCalleeReference(newCalleeReference: FirReference)
@@ -46,6 +46,10 @@ abstract class FirVariableAssignment : FirPureAbstractElement(), FirQualifiedAcc
abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?)
abstract override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression)
abstract override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression)
@FirImplementationDetail
abstract override fun replaceSource(newSource: KtSourceElement?)
@@ -119,6 +119,14 @@ internal class FirCallableReferenceAccessImpl(
explicitReceiver = newExplicitReceiver
}
override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression) {
dispatchReceiver = newDispatchReceiver
}
override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression) {
extensionReceiver = newExtensionReceiver
}
override fun replaceCalleeReference(newCalleeReference: FirNamedReference) {
calleeReference = newCalleeReference
}
@@ -126,6 +126,14 @@ internal class FirComponentCallImpl(
typeArguments.addAll(newTypeArguments)
}
override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression) {
dispatchReceiver = newDispatchReceiver
}
override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression) {
extensionReceiver = newExtensionReceiver
}
override fun replaceArgumentList(newArgumentList: FirArgumentList) {
argumentList = newArgumentList
}
@@ -80,6 +80,10 @@ internal class FirDelegatedConstructorCallImpl(
constructedTypeRef = newConstructedTypeRef
}
override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression) {
dispatchReceiver = newDispatchReceiver
}
override fun replaceCalleeReference(newCalleeReference: FirReference) {
calleeReference = newCalleeReference
}
@@ -124,6 +124,14 @@ open class FirFunctionCallImpl @FirImplementationDetail constructor(
explicitReceiver = newExplicitReceiver
}
override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression) {
dispatchReceiver = newDispatchReceiver
}
override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression) {
extensionReceiver = newExtensionReceiver
}
override fun replaceArgumentList(newArgumentList: FirArgumentList) {
argumentList = newArgumentList
}
@@ -126,6 +126,14 @@ internal class FirImplicitInvokeCallImpl(
explicitReceiver = newExplicitReceiver
}
override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression) {
dispatchReceiver = newDispatchReceiver
}
override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression) {
extensionReceiver = newExtensionReceiver
}
override fun replaceArgumentList(newArgumentList: FirArgumentList) {
argumentList = newArgumentList
}
@@ -124,6 +124,14 @@ internal class FirIntegerLiteralOperatorCallImpl(
explicitReceiver = newExplicitReceiver
}
override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression) {
dispatchReceiver = newDispatchReceiver
}
override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression) {
extensionReceiver = newExtensionReceiver
}
override fun replaceArgumentList(newArgumentList: FirArgumentList) {
argumentList = newArgumentList
}
@@ -66,6 +66,8 @@ class FirLazyDelegatedConstructorCall @FirImplementationDetail constructor(
constructedTypeRef = newConstructedTypeRef
}
override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression) {}
override fun replaceCalleeReference(newCalleeReference: FirReference) {
calleeReference = newCalleeReference
}
@@ -122,4 +122,12 @@ class FirPropertyAccessExpressionImpl @FirImplementationDetail constructor(
override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?) {
explicitReceiver = newExplicitReceiver
}
override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression) {
dispatchReceiver = newDispatchReceiver
}
override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression) {
extensionReceiver = newExtensionReceiver
}
}
@@ -121,6 +121,14 @@ internal class FirThisReceiverExpressionImpl(
explicitReceiver = newExplicitReceiver
}
override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression) {
dispatchReceiver = newDispatchReceiver
}
override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression) {
extensionReceiver = newExtensionReceiver
}
override fun replaceCalleeReference(newCalleeReference: FirThisReference) {
calleeReference = newCalleeReference
}
@@ -127,6 +127,14 @@ internal class FirVariableAssignmentImpl(
explicitReceiver = newExplicitReceiver
}
override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression) {
dispatchReceiver = newDispatchReceiver
}
override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression) {
extensionReceiver = newExtensionReceiver
}
@FirImplementationDetail
override fun replaceSource(newSource: KtSourceElement?) {
source = newSource
@@ -26,8 +26,8 @@ object FieldSets {
val receivers by lazy {
fieldSet(
field("explicitReceiver", expression, nullable = true, withReplace = true).withTransform(),
field("dispatchReceiver", expression).withTransform(),
field("extensionReceiver", expression).withTransform()
field("dispatchReceiver", expression, withReplace = true).withTransform(),
field("extensionReceiver", expression, withReplace = true).withTransform()
)
}
@@ -396,7 +396,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
delegatedConstructorCall.configure {
+field("constructedTypeRef", typeRef, withReplace = true)
+field("dispatchReceiver", expression).withTransform()
+field("dispatchReceiver", expression, withReplace = true).withTransform()
+field("calleeReference", reference, withReplace = true)
generateBooleanFields("this", "super")
}