diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccess.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccess.kt index e367da785fd..a4c3385b6fd 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccess.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccess.kt @@ -30,8 +30,12 @@ interface FirQualifiedAccess : FirResolvable { override fun acceptChildren(visitor: FirVisitor, 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) } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractQualifiedAccess.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractQualifiedAccess.kt index 263fd1ef066..ef21ebf31cb 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractQualifiedAccess.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractQualifiedAccess.kt @@ -24,21 +24,8 @@ abstract class FirAbstractQualifiedAccess( override var extensionReceiver: FirExpression = FirNoReceiverExpression override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - calleeReference = calleeReference.transformSingle(transformer, data) - explicitReceiver = explicitReceiver?.transformSingle(transformer, data) - dispatchReceiver = dispatchReceiver.transformSingle(transformer, data) - extensionReceiver = extensionReceiver.transformSingle(transformer, data) + super.transformChildren(transformer, data) return super.transformChildren(transformer, data) } - - override fun transformCalleeReference(transformer: FirTransformer, data: D): FirQualifiedAccess { - calleeReference = calleeReference.transformSingle(transformer, data) - return this - } - - override fun transformExplicitReceiver(transformer: FirTransformer, data: D): FirQualifiedAccess { - explicitReceiver = explicitReceiver?.transformSingle(transformer, data) - return this - } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirFunctionCallImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirFunctionCallImpl.kt index 563870470f6..f8d8b2f056b 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirFunctionCallImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirFunctionCallImpl.kt @@ -29,10 +29,7 @@ class FirFunctionCallImpl( override fun transformChildren(transformer: FirTransformer, 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.transformChildren(transformer, data) return super.transformChildren(transformer, data) } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirModifiableQualifiedAccess.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirModifiableQualifiedAccess.kt index ab3dfc197b1..d75f7f39a56 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirModifiableQualifiedAccess.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirModifiableQualifiedAccess.kt @@ -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 : FirQualifiedAccess { extensionReceiver = extensionReceiver.transformSingle(transformer, data) return this } + + override fun transformChildren(transformer: FirTransformer, 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 + } + } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirQualifiedAccessExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirQualifiedAccessExpressionImpl.kt index fd4c2a7d357..5f4022e3b7b 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirQualifiedAccessExpressionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirQualifiedAccessExpressionImpl.kt @@ -26,10 +26,7 @@ class FirQualifiedAccessExpressionImpl( override var extensionReceiver: FirExpression = FirNoReceiverExpression override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - calleeReference = calleeReference.transformSingle(transformer, data) - explicitReceiver = explicitReceiver?.transformSingle(transformer, data) - dispatchReceiver = dispatchReceiver.transformSingle(transformer, data) - extensionReceiver = extensionReceiver.transformSingle(transformer, data) + super.transformChildren(transformer, data) return super.transformChildren(transformer, data) }