FIR: visit/transform dispatch & extension receivers only once
This commit is contained in:
@@ -30,8 +30,12 @@ interface FirQualifiedAccess : FirResolvable {
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
calleeReference.accept(visitor, data)
|
||||
explicitReceiver?.accept(visitor, data)
|
||||
dispatchReceiver.accept(visitor, data)
|
||||
extensionReceiver.accept(visitor, data)
|
||||
if (dispatchReceiver !== explicitReceiver) {
|
||||
dispatchReceiver.accept(visitor, data)
|
||||
}
|
||||
if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) {
|
||||
extensionReceiver.accept(visitor, data)
|
||||
}
|
||||
super.acceptChildren(visitor, data)
|
||||
}
|
||||
|
||||
|
||||
+1
-14
@@ -24,21 +24,8 @@ abstract class FirAbstractQualifiedAccess(
|
||||
override var extensionReceiver: FirExpression = FirNoReceiverExpression
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
calleeReference = calleeReference.transformSingle(transformer, data)
|
||||
explicitReceiver = explicitReceiver?.transformSingle(transformer, data)
|
||||
dispatchReceiver = dispatchReceiver.transformSingle(transformer, data)
|
||||
extensionReceiver = extensionReceiver.transformSingle(transformer, data)
|
||||
super<FirModifiableQualifiedAccess>.transformChildren(transformer, data)
|
||||
|
||||
return super<FirAnnotatedStatement>.transformChildren(transformer, data)
|
||||
}
|
||||
|
||||
override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirQualifiedAccess {
|
||||
calleeReference = calleeReference.transformSingle(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun <D> transformExplicitReceiver(transformer: FirTransformer<D>, data: D): FirQualifiedAccess {
|
||||
explicitReceiver = explicitReceiver?.transformSingle(transformer, data)
|
||||
return this
|
||||
}
|
||||
}
|
||||
+1
-4
@@ -29,10 +29,7 @@ class FirFunctionCallImpl(
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
typeArguments.transformInplace(transformer, data)
|
||||
calleeReference = calleeReference.transformSingle(transformer, data)
|
||||
explicitReceiver = explicitReceiver?.transformSingle(transformer, data)
|
||||
dispatchReceiver = dispatchReceiver.transformSingle(transformer, data)
|
||||
extensionReceiver = extensionReceiver.transformSingle(transformer, data)
|
||||
super<FirModifiableQualifiedAccess>.transformChildren(transformer, data)
|
||||
|
||||
return super<FirFunctionCall>.transformChildren(transformer, data)
|
||||
}
|
||||
|
||||
+17
@@ -5,9 +5,12 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.expressions.impl
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirReference
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
|
||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess
|
||||
import org.jetbrains.kotlin.fir.transformInplace
|
||||
import org.jetbrains.kotlin.fir.transformSingle
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
|
||||
@@ -47,4 +50,18 @@ interface FirModifiableQualifiedAccess<C : FirReference> : FirQualifiedAccess {
|
||||
extensionReceiver = extensionReceiver.transformSingle(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
calleeReference = calleeReference.transformSingle(transformer, data)
|
||||
explicitReceiver = explicitReceiver?.transformSingle(transformer, data)
|
||||
if (dispatchReceiver !== explicitReceiver) {
|
||||
dispatchReceiver = dispatchReceiver.transformSingle(transformer, data)
|
||||
}
|
||||
if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) {
|
||||
extensionReceiver = extensionReceiver.transformSingle(transformer, data)
|
||||
}
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
}
|
||||
+1
-4
@@ -26,10 +26,7 @@ class FirQualifiedAccessExpressionImpl(
|
||||
override var extensionReceiver: FirExpression = FirNoReceiverExpression
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
calleeReference = calleeReference.transformSingle(transformer, data)
|
||||
explicitReceiver = explicitReceiver?.transformSingle(transformer, data)
|
||||
dispatchReceiver = dispatchReceiver.transformSingle(transformer, data)
|
||||
extensionReceiver = extensionReceiver.transformSingle(transformer, data)
|
||||
super<FirModifiableQualifiedAccess>.transformChildren(transformer, data)
|
||||
|
||||
return super<FirQualifiedAccessExpression>.transformChildren(transformer, data)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user