diff --git a/compiler/fir/raw-fir/fir-common/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt b/compiler/fir/raw-fir/fir-common/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt index fa2b81d980b..c32ddbda652 100644 --- a/compiler/fir/raw-fir/fir-common/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt +++ b/compiler/fir/raw-fir/fir-common/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt @@ -19,7 +19,6 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.builder.* -import org.jetbrains.kotlin.fir.expressions.impl.FirModifiableQualifiedAccess import org.jetbrains.kotlin.fir.expressions.impl.FirSingleExpressionBlock import org.jetbrains.kotlin.fir.expressions.impl.FirStubStatement import org.jetbrains.kotlin.fir.references.FirNamedReference @@ -462,12 +461,7 @@ private fun FirExpression.checkReceiver(name: String?): Boolean { } -fun FirModifiableQualifiedAccess.wrapWithSafeCall(receiver: FirExpression): FirSafeCallExpression { - // TODO: Refactor tree to make FirModifiableQualifiedAccess inherit FirQualifiedAccess - require(this is FirQualifiedAccess) { - "Safe-call instances are expected to be FirQualifiedAccess, but ${this::class} was found" - } - +fun FirQualifiedAccess.wrapWithSafeCall(receiver: FirExpression): FirSafeCallExpression { val checkedSafeCallSubject = buildCheckedSafeCallSubject { @OptIn(FirContractViolation::class) this.originalReceiverRef = FirExpressionRef().apply { @@ -475,7 +469,7 @@ fun FirModifiableQualifiedAccess.wrapWithSafeCall(receiver: FirExpression): FirS } } - explicitReceiver = checkedSafeCallSubject + replaceExplicitReceiver(checkedSafeCallSubject) return buildSafeCallExpression { this.receiver = receiver @OptIn(FirContractViolation::class) diff --git a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/ExpressionsConverter.kt b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/ExpressionsConverter.kt index 3c44c603b2f..f9d4baee86c 100644 --- a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/ExpressionsConverter.kt +++ b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/ExpressionsConverter.kt @@ -23,7 +23,6 @@ import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.builder.* -import org.jetbrains.kotlin.fir.expressions.impl.FirModifiableQualifiedAccess import org.jetbrains.kotlin.fir.expressions.impl.FirSingleExpressionBlock import org.jetbrains.kotlin.fir.expressions.impl.buildSingleExpressionBlock import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir @@ -475,12 +474,12 @@ class ExpressionsConverter( } } - (firSelector as? FirModifiableQualifiedAccess)?.let { + (firSelector as? FirQualifiedAccess)?.let { if (isSafe) { return it.wrapWithSafeCall(firReceiver!!) } - it.explicitReceiver = firReceiver + it.replaceExplicitReceiver(firReceiver) } return firSelector } 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 44f0e15d97a..5d69edb69a5 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 @@ -23,7 +23,6 @@ import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.builder.* -import org.jetbrains.kotlin.fir.expressions.impl.FirModifiableQualifiedAccess import org.jetbrains.kotlin.fir.expressions.impl.FirSingleExpressionBlock import org.jetbrains.kotlin.fir.references.FirNamedReference import org.jetbrains.kotlin.fir.references.builder.* @@ -1810,14 +1809,14 @@ class RawFirBuilder( expression.toFirSourceElement(), ConeSimpleDiagnostic("Qualified expression without selector", DiagnosticKind.Syntax), ) val firSelector = selector.toFirExpression("Incorrect selector expression") - if (firSelector is FirModifiableQualifiedAccess) { + if (firSelector is FirQualifiedAccess) { val receiver = expression.receiverExpression.toFirExpression("Incorrect receiver expression") if (expression is KtSafeQualifiedExpression) { return firSelector.wrapWithSafeCall(receiver) } - firSelector.explicitReceiver = receiver + firSelector.replaceExplicitReceiver(receiver) } return firSelector } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirCallableReferenceAccess.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirCallableReferenceAccess.kt index f1c78a1b19b..f0dd7c209fe 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirCallableReferenceAccess.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirCallableReferenceAccess.kt @@ -34,6 +34,8 @@ abstract class FirCallableReferenceAccess : FirQualifiedAccessExpression() { abstract override fun replaceTypeArguments(newTypeArguments: List) + abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?) + abstract fun replaceCalleeReference(newCalleeReference: FirNamedReference) abstract override fun replaceCalleeReference(newCalleeReference: FirReference) diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirComponentCall.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirComponentCall.kt index a89bb85a35c..4032b6aeaae 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirComponentCall.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirComponentCall.kt @@ -41,6 +41,8 @@ abstract class FirComponentCall : FirFunctionCall() { abstract override fun replaceCalleeReference(newCalleeReference: FirReference) + abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?) + abstract override fun transformAnnotations(transformer: FirTransformer, data: D): FirComponentCall abstract override fun transformTypeArguments(transformer: FirTransformer, data: D): FirComponentCall diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirDelegatedConstructorCall.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirDelegatedConstructorCall.kt index ad9317b48bd..002e934d14a 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirDelegatedConstructorCall.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirDelegatedConstructorCall.kt @@ -18,25 +18,25 @@ import org.jetbrains.kotlin.fir.visitors.* abstract class FirDelegatedConstructorCall : FirPureAbstractElement(), FirResolvable, FirCall { abstract override val source: FirSourceElement? - abstract override val calleeReference: FirReference abstract override val annotations: List abstract override val argumentList: FirArgumentList abstract val constructedTypeRef: FirTypeRef abstract val dispatchReceiver: FirExpression + abstract override val calleeReference: FirReference abstract val isThis: Boolean abstract val isSuper: Boolean override fun accept(visitor: FirVisitor, data: D): R = visitor.visitDelegatedConstructorCall(this, data) - abstract override fun replaceCalleeReference(newCalleeReference: FirReference) - abstract override fun replaceArgumentList(newArgumentList: FirArgumentList) abstract fun replaceConstructedTypeRef(newConstructedTypeRef: FirTypeRef) - abstract override fun transformCalleeReference(transformer: FirTransformer, data: D): FirDelegatedConstructorCall + abstract override fun replaceCalleeReference(newCalleeReference: FirReference) abstract override fun transformAnnotations(transformer: FirTransformer, data: D): FirDelegatedConstructorCall abstract fun transformDispatchReceiver(transformer: FirTransformer, data: D): FirDelegatedConstructorCall + + abstract override fun transformCalleeReference(transformer: FirTransformer, data: D): FirDelegatedConstructorCall } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirExpressionWithSmartcast.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirExpressionWithSmartcast.kt index c75f30164b0..b9434278072 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirExpressionWithSmartcast.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirExpressionWithSmartcast.kt @@ -21,11 +21,11 @@ abstract class FirExpressionWithSmartcast : FirQualifiedAccessExpression() { abstract override val source: FirSourceElement? abstract override val typeRef: FirTypeRef abstract override val annotations: List + abstract override val calleeReference: FirReference abstract override val typeArguments: List abstract override val explicitReceiver: FirExpression? abstract override val dispatchReceiver: FirExpression abstract override val extensionReceiver: FirExpression - abstract override val calleeReference: FirReference abstract val originalExpression: FirQualifiedAccessExpression abstract val typesFromSmartCast: Collection abstract val originalType: FirTypeRef @@ -34,12 +34,16 @@ abstract class FirExpressionWithSmartcast : FirQualifiedAccessExpression() { abstract override fun replaceTypeRef(newTypeRef: FirTypeRef) - abstract override fun replaceTypeArguments(newTypeArguments: List) - abstract override fun replaceCalleeReference(newCalleeReference: FirReference) + abstract override fun replaceTypeArguments(newTypeArguments: List) + + abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?) + abstract override fun transformAnnotations(transformer: FirTransformer, data: D): FirExpressionWithSmartcast + abstract override fun transformCalleeReference(transformer: FirTransformer, data: D): FirExpressionWithSmartcast + abstract override fun transformTypeArguments(transformer: FirTransformer, data: D): FirExpressionWithSmartcast abstract override fun transformExplicitReceiver(transformer: FirTransformer, data: D): FirExpressionWithSmartcast @@ -47,6 +51,4 @@ abstract class FirExpressionWithSmartcast : FirQualifiedAccessExpression() { abstract override fun transformDispatchReceiver(transformer: FirTransformer, data: D): FirExpressionWithSmartcast abstract override fun transformExtensionReceiver(transformer: FirTransformer, data: D): FirExpressionWithSmartcast - - abstract override fun transformCalleeReference(transformer: FirTransformer, data: D): FirExpressionWithSmartcast } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirFunctionCall.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirFunctionCall.kt index 331c9159560..c2b090536e2 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirFunctionCall.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirFunctionCall.kt @@ -34,6 +34,8 @@ abstract class FirFunctionCall : FirQualifiedAccessExpression(), FirCall { abstract override fun replaceTypeArguments(newTypeArguments: List) + abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?) + abstract override fun replaceArgumentList(newArgumentList: FirArgumentList) abstract fun replaceCalleeReference(newCalleeReference: FirNamedReference) diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccess.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccess.kt index 820deee9b74..b7baf44e35f 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccess.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccess.kt @@ -15,30 +15,32 @@ import org.jetbrains.kotlin.fir.visitors.* * DO NOT MODIFY IT MANUALLY */ -interface FirQualifiedAccess : FirQualifiedAccessWithoutCallee, FirResolvable { +interface FirQualifiedAccess : FirResolvable, FirStatement { override val source: FirSourceElement? - override val annotations: List - override val typeArguments: List - override val explicitReceiver: FirExpression? - override val dispatchReceiver: FirExpression - override val extensionReceiver: FirExpression override val calleeReference: FirReference + override val annotations: List + val typeArguments: List + val explicitReceiver: FirExpression? + val dispatchReceiver: FirExpression + val extensionReceiver: FirExpression override fun accept(visitor: FirVisitor, data: D): R = visitor.visitQualifiedAccess(this, data) - override fun replaceTypeArguments(newTypeArguments: List) - override fun replaceCalleeReference(newCalleeReference: FirReference) + fun replaceTypeArguments(newTypeArguments: List) + + fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?) + + override fun transformCalleeReference(transformer: FirTransformer, data: D): FirQualifiedAccess + override fun transformAnnotations(transformer: FirTransformer, data: D): FirQualifiedAccess - override fun transformTypeArguments(transformer: FirTransformer, data: D): FirQualifiedAccess + fun transformTypeArguments(transformer: FirTransformer, data: D): FirQualifiedAccess - override fun transformExplicitReceiver(transformer: FirTransformer, data: D): FirQualifiedAccess + fun transformExplicitReceiver(transformer: FirTransformer, data: D): FirQualifiedAccess - override fun transformDispatchReceiver(transformer: FirTransformer, data: D): FirQualifiedAccess + fun transformDispatchReceiver(transformer: FirTransformer, data: D): FirQualifiedAccess - override fun transformExtensionReceiver(transformer: FirTransformer, data: D): FirQualifiedAccess - - override fun transformCalleeReference(transformer: FirTransformer, data: D): FirQualifiedAccess + fun transformExtensionReceiver(transformer: FirTransformer, data: D): FirQualifiedAccess } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccessExpression.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccessExpression.kt index 1fc1fc75f01..ff1ae0a61c0 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccessExpression.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccessExpression.kt @@ -20,22 +20,26 @@ abstract class FirQualifiedAccessExpression : FirExpression(), FirQualifiedAcces abstract override val source: FirSourceElement? abstract override val typeRef: FirTypeRef abstract override val annotations: List + abstract override val calleeReference: FirReference abstract override val typeArguments: List abstract override val explicitReceiver: FirExpression? abstract override val dispatchReceiver: FirExpression abstract override val extensionReceiver: FirExpression - abstract override val calleeReference: FirReference override fun accept(visitor: FirVisitor, data: D): R = visitor.visitQualifiedAccessExpression(this, data) abstract override fun replaceTypeRef(newTypeRef: FirTypeRef) - abstract override fun replaceTypeArguments(newTypeArguments: List) - abstract override fun replaceCalleeReference(newCalleeReference: FirReference) + abstract override fun replaceTypeArguments(newTypeArguments: List) + + abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?) + abstract override fun transformAnnotations(transformer: FirTransformer, data: D): FirQualifiedAccessExpression + abstract override fun transformCalleeReference(transformer: FirTransformer, data: D): FirQualifiedAccessExpression + abstract override fun transformTypeArguments(transformer: FirTransformer, data: D): FirQualifiedAccessExpression abstract override fun transformExplicitReceiver(transformer: FirTransformer, data: D): FirQualifiedAccessExpression @@ -43,6 +47,4 @@ abstract class FirQualifiedAccessExpression : FirExpression(), FirQualifiedAcces abstract override fun transformDispatchReceiver(transformer: FirTransformer, data: D): FirQualifiedAccessExpression abstract override fun transformExtensionReceiver(transformer: FirTransformer, data: D): FirQualifiedAccessExpression - - abstract override fun transformCalleeReference(transformer: FirTransformer, data: D): FirQualifiedAccessExpression } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccessWithoutCallee.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccessWithoutCallee.kt deleted file mode 100644 index d26c291dee3..00000000000 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccessWithoutCallee.kt +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.fir.expressions - -import org.jetbrains.kotlin.fir.FirSourceElement -import org.jetbrains.kotlin.fir.types.FirTypeProjection -import org.jetbrains.kotlin.fir.visitors.* - -/* - * This file was generated automatically - * DO NOT MODIFY IT MANUALLY - */ - -interface FirQualifiedAccessWithoutCallee : FirStatement { - override val source: FirSourceElement? - override val annotations: List - val typeArguments: List - val explicitReceiver: FirExpression? - val dispatchReceiver: FirExpression - val extensionReceiver: FirExpression - - override fun accept(visitor: FirVisitor, data: D): R = visitor.visitQualifiedAccessWithoutCallee(this, data) - - fun replaceTypeArguments(newTypeArguments: List) - - override fun transformAnnotations(transformer: FirTransformer, data: D): FirQualifiedAccessWithoutCallee - - fun transformTypeArguments(transformer: FirTransformer, data: D): FirQualifiedAccessWithoutCallee - - fun transformExplicitReceiver(transformer: FirTransformer, data: D): FirQualifiedAccessWithoutCallee - - fun transformDispatchReceiver(transformer: FirTransformer, data: D): FirQualifiedAccessWithoutCallee - - fun transformExtensionReceiver(transformer: FirTransformer, data: D): FirQualifiedAccessWithoutCallee -} diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirThisReceiverExpression.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirThisReceiverExpression.kt index 9e0217f2532..ecf45423c0b 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirThisReceiverExpression.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirThisReceiverExpression.kt @@ -33,6 +33,8 @@ abstract class FirThisReceiverExpression : FirQualifiedAccessExpression() { abstract override fun replaceTypeArguments(newTypeArguments: List) + abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?) + abstract fun replaceCalleeReference(newCalleeReference: FirThisReference) abstract override fun replaceCalleeReference(newCalleeReference: FirReference) diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirVariableAssignment.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirVariableAssignment.kt index 3364c454925..8cd11777768 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirVariableAssignment.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirVariableAssignment.kt @@ -18,20 +18,24 @@ import org.jetbrains.kotlin.fir.visitors.* abstract class FirVariableAssignment : FirPureAbstractElement(), FirQualifiedAccess { abstract override val source: FirSourceElement? + abstract override val calleeReference: FirReference abstract override val annotations: List abstract override val typeArguments: List abstract override val explicitReceiver: FirExpression? abstract override val dispatchReceiver: FirExpression abstract override val extensionReceiver: FirExpression - abstract override val calleeReference: FirReference abstract val lValue: FirReference abstract val rValue: FirExpression override fun accept(visitor: FirVisitor, data: D): R = visitor.visitVariableAssignment(this, data) + abstract override fun replaceCalleeReference(newCalleeReference: FirReference) + abstract override fun replaceTypeArguments(newTypeArguments: List) - abstract override fun replaceCalleeReference(newCalleeReference: FirReference) + abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?) + + abstract override fun transformCalleeReference(transformer: FirTransformer, data: D): FirVariableAssignment abstract override fun transformAnnotations(transformer: FirTransformer, data: D): FirVariableAssignment @@ -43,7 +47,5 @@ abstract class FirVariableAssignment : FirPureAbstractElement(), FirQualifiedAcc abstract override fun transformExtensionReceiver(transformer: FirTransformer, data: D): FirVariableAssignment - abstract override fun transformCalleeReference(transformer: FirTransformer, data: D): FirVariableAssignment - abstract fun transformRValue(transformer: FirTransformer, data: D): FirVariableAssignment } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirCallableReferenceAccessBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirCallableReferenceAccessBuilder.kt index c30277a7f04..c145ac64825 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirCallableReferenceAccessBuilder.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirCallableReferenceAccessBuilder.kt @@ -15,7 +15,6 @@ import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder import org.jetbrains.kotlin.fir.expressions.builder.FirQualifiedAccessBuilder import org.jetbrains.kotlin.fir.expressions.impl.FirCallableReferenceAccessImpl -import org.jetbrains.kotlin.fir.expressions.impl.FirModifiableQualifiedAccess import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression import org.jetbrains.kotlin.fir.references.FirNamedReference import org.jetbrains.kotlin.fir.references.FirReference diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirFunctionCallBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirFunctionCallBuilder.kt index db38f28648f..b8fdf0a9a55 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirFunctionCallBuilder.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirFunctionCallBuilder.kt @@ -19,7 +19,6 @@ import org.jetbrains.kotlin.fir.expressions.builder.FirCallBuilder import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder import org.jetbrains.kotlin.fir.expressions.builder.FirQualifiedAccessBuilder import org.jetbrains.kotlin.fir.expressions.impl.FirFunctionCallImpl -import org.jetbrains.kotlin.fir.expressions.impl.FirModifiableQualifiedAccess import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression import org.jetbrains.kotlin.fir.references.FirNamedReference import org.jetbrains.kotlin.fir.references.FirReference diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirQualifiedAccessExpressionBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirQualifiedAccessExpressionBuilder.kt index 1fd5de085a9..a22c71fa5a9 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirQualifiedAccessExpressionBuilder.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirQualifiedAccessExpressionBuilder.kt @@ -14,7 +14,6 @@ import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder import org.jetbrains.kotlin.fir.expressions.builder.FirQualifiedAccessBuilder -import org.jetbrains.kotlin.fir.expressions.impl.FirModifiableQualifiedAccess import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression import org.jetbrains.kotlin.fir.expressions.impl.FirQualifiedAccessExpressionImpl import org.jetbrains.kotlin.fir.references.FirReference @@ -33,22 +32,22 @@ class FirQualifiedAccessExpressionBuilder : FirQualifiedAccessBuilder, FirAnnota override var source: FirSourceElement? = null override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null) override val annotations: MutableList = mutableListOf() + lateinit var calleeReference: FirReference override val typeArguments: MutableList = mutableListOf() override var explicitReceiver: FirExpression? = null override var dispatchReceiver: FirExpression = FirNoReceiverExpression override var extensionReceiver: FirExpression = FirNoReceiverExpression - lateinit var calleeReference: FirReference override fun build(): FirQualifiedAccessExpression { return FirQualifiedAccessExpressionImpl( source, typeRef, annotations, + calleeReference, typeArguments, explicitReceiver, dispatchReceiver, extensionReceiver, - calleeReference, ) } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirThisReceiverExpressionBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirThisReceiverExpressionBuilder.kt index 41f04dd7f90..fa123c634ac 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirThisReceiverExpressionBuilder.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirThisReceiverExpressionBuilder.kt @@ -14,7 +14,6 @@ import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirThisReceiverExpression import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder import org.jetbrains.kotlin.fir.expressions.builder.FirQualifiedAccessBuilder -import org.jetbrains.kotlin.fir.expressions.impl.FirModifiableQualifiedAccess import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression import org.jetbrains.kotlin.fir.expressions.impl.FirThisReceiverExpressionImpl import org.jetbrains.kotlin.fir.references.FirReference diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirVariableAssignmentBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirVariableAssignmentBuilder.kt index d960b265676..c5aa91a84cc 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirVariableAssignmentBuilder.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirVariableAssignmentBuilder.kt @@ -13,7 +13,6 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirVariableAssignment import org.jetbrains.kotlin.fir.expressions.builder.FirQualifiedAccessBuilder -import org.jetbrains.kotlin.fir.expressions.impl.FirModifiableQualifiedAccess import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression import org.jetbrains.kotlin.fir.expressions.impl.FirVariableAssignmentImpl import org.jetbrains.kotlin.fir.references.FirReference @@ -28,23 +27,23 @@ import org.jetbrains.kotlin.fir.visitors.* @FirBuilderDsl class FirVariableAssignmentBuilder : FirQualifiedAccessBuilder, FirAnnotationContainerBuilder { override var source: FirSourceElement? = null + lateinit var calleeReference: FirReference override val annotations: MutableList = mutableListOf() override val typeArguments: MutableList = mutableListOf() override var explicitReceiver: FirExpression? = null override var dispatchReceiver: FirExpression = FirNoReceiverExpression override var extensionReceiver: FirExpression = FirNoReceiverExpression - lateinit var calleeReference: FirReference lateinit var rValue: FirExpression override fun build(): FirVariableAssignment { return FirVariableAssignmentImpl( source, + calleeReference, annotations, typeArguments, explicitReceiver, dispatchReceiver, extensionReceiver, - calleeReference, rValue, ) } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirCallableReferenceAccessImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirCallableReferenceAccessImpl.kt index 9bd1a584c2d..fdf15f3fbba 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirCallableReferenceAccessImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirCallableReferenceAccessImpl.kt @@ -9,7 +9,6 @@ import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess import org.jetbrains.kotlin.fir.expressions.FirExpression -import org.jetbrains.kotlin.fir.expressions.impl.FirModifiableQualifiedAccess import org.jetbrains.kotlin.fir.references.FirNamedReference import org.jetbrains.kotlin.fir.references.FirReference import org.jetbrains.kotlin.fir.types.FirTypeProjection @@ -31,7 +30,7 @@ internal class FirCallableReferenceAccessImpl( override var extensionReceiver: FirExpression, override var calleeReference: FirNamedReference, override var hasQuestionMarkAtLHS: Boolean, -) : FirCallableReferenceAccess(), FirModifiableQualifiedAccess { +) : FirCallableReferenceAccess() { override fun acceptChildren(visitor: FirVisitor, data: D) { typeRef.accept(visitor, data) annotations.forEach { it.accept(visitor, data) } @@ -100,6 +99,10 @@ internal class FirCallableReferenceAccessImpl( typeArguments.addAll(newTypeArguments) } + override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?) { + explicitReceiver = newExplicitReceiver + } + override fun replaceCalleeReference(newCalleeReference: FirNamedReference) { calleeReference = newCalleeReference } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirComponentCallImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirComponentCallImpl.kt index 724e9270c9e..28189274b57 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirComponentCallImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirComponentCallImpl.kt @@ -121,4 +121,9 @@ internal class FirComponentCallImpl( require(newCalleeReference is FirNamedReference) replaceCalleeReference(newCalleeReference) } + + override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?) { + require(newExplicitReceiver != null) + explicitReceiver = newExplicitReceiver + } } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirDelegatedConstructorCallImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirDelegatedConstructorCallImpl.kt index d6bfd91dee3..a5f72afefa5 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirDelegatedConstructorCallImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirDelegatedConstructorCallImpl.kt @@ -33,22 +33,17 @@ internal class FirDelegatedConstructorCallImpl( override val isSuper: Boolean get() = !isThis override fun acceptChildren(visitor: FirVisitor, data: D) { - calleeReference.accept(visitor, data) annotations.forEach { it.accept(visitor, data) } argumentList.accept(visitor, data) constructedTypeRef.accept(visitor, data) + calleeReference.accept(visitor, data) } override fun transformChildren(transformer: FirTransformer, data: D): FirDelegatedConstructorCallImpl { - transformCalleeReference(transformer, data) transformAnnotations(transformer, data) argumentList = argumentList.transformSingle(transformer, data) constructedTypeRef = constructedTypeRef.transformSingle(transformer, data) - return this - } - - override fun transformCalleeReference(transformer: FirTransformer, data: D): FirDelegatedConstructorCallImpl { - calleeReference = calleeReference.transformSingle(transformer, data) + transformCalleeReference(transformer, data) return this } @@ -62,8 +57,9 @@ internal class FirDelegatedConstructorCallImpl( return this } - override fun replaceCalleeReference(newCalleeReference: FirReference) { - calleeReference = newCalleeReference + override fun transformCalleeReference(transformer: FirTransformer, data: D): FirDelegatedConstructorCallImpl { + calleeReference = calleeReference.transformSingle(transformer, data) + return this } override fun replaceArgumentList(newArgumentList: FirArgumentList) { @@ -73,4 +69,8 @@ internal class FirDelegatedConstructorCallImpl( override fun replaceConstructedTypeRef(newConstructedTypeRef: FirTypeRef) { constructedTypeRef = newConstructedTypeRef } + + override fun replaceCalleeReference(newCalleeReference: FirReference) { + calleeReference = newCalleeReference + } } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirFunctionCallImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirFunctionCallImpl.kt index 2e52145c78b..b36b33d3a12 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirFunctionCallImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirFunctionCallImpl.kt @@ -11,7 +11,6 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirArgumentList import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirFunctionCall -import org.jetbrains.kotlin.fir.expressions.impl.FirModifiableQualifiedAccess import org.jetbrains.kotlin.fir.references.FirNamedReference import org.jetbrains.kotlin.fir.references.FirReference import org.jetbrains.kotlin.fir.types.FirTypeProjection @@ -33,7 +32,7 @@ open class FirFunctionCallImpl @FirImplementationDetail constructor( override var extensionReceiver: FirExpression, override var argumentList: FirArgumentList, override var calleeReference: FirNamedReference, -) : FirFunctionCall(), FirModifiableQualifiedAccess { +) : FirFunctionCall() { override fun acceptChildren(visitor: FirVisitor, data: D) { typeRef.accept(visitor, data) annotations.forEach { it.accept(visitor, data) } @@ -104,6 +103,10 @@ open class FirFunctionCallImpl @FirImplementationDetail constructor( typeArguments.addAll(newTypeArguments) } + override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?) { + explicitReceiver = newExplicitReceiver + } + override fun replaceArgumentList(newArgumentList: FirArgumentList) { argumentList = newArgumentList } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirModifiableQualifiedAccess.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirModifiableQualifiedAccess.kt deleted file mode 100644 index d78629ba608..00000000000 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirModifiableQualifiedAccess.kt +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.fir.expressions.impl - -import org.jetbrains.kotlin.fir.FirImplementationDetail -import org.jetbrains.kotlin.fir.FirSourceElement -import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall -import org.jetbrains.kotlin.fir.expressions.FirExpression -import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessWithoutCallee -import org.jetbrains.kotlin.fir.types.FirTypeProjection -import org.jetbrains.kotlin.fir.visitors.* - -/* - * This file was generated automatically - * DO NOT MODIFY IT MANUALLY - */ - -interface FirModifiableQualifiedAccess : FirQualifiedAccessWithoutCallee { - override val source: FirSourceElement? - override val annotations: MutableList - override val typeArguments: MutableList - override var explicitReceiver: FirExpression? - override var dispatchReceiver: FirExpression - override var extensionReceiver: FirExpression - override fun transformChildren(transformer: FirTransformer, data: D): FirModifiableQualifiedAccess - - override fun transformAnnotations(transformer: FirTransformer, data: D): FirModifiableQualifiedAccess - - override fun transformTypeArguments(transformer: FirTransformer, data: D): FirModifiableQualifiedAccess - - override fun transformExplicitReceiver(transformer: FirTransformer, data: D): FirModifiableQualifiedAccess - - override fun transformDispatchReceiver(transformer: FirTransformer, data: D): FirModifiableQualifiedAccess - - override fun transformExtensionReceiver(transformer: FirTransformer, data: D): FirModifiableQualifiedAccess - - override fun replaceTypeArguments(newTypeArguments: List) -} diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirQualifiedAccessExpressionImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirQualifiedAccessExpressionImpl.kt index 7e8c6ec9d89..bbb8c45d365 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirQualifiedAccessExpressionImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirQualifiedAccessExpressionImpl.kt @@ -9,7 +9,6 @@ import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression -import org.jetbrains.kotlin.fir.expressions.impl.FirModifiableQualifiedAccess import org.jetbrains.kotlin.fir.references.FirReference import org.jetbrains.kotlin.fir.types.FirTypeProjection import org.jetbrains.kotlin.fir.types.FirTypeRef @@ -24,15 +23,16 @@ internal class FirQualifiedAccessExpressionImpl( override val source: FirSourceElement?, override var typeRef: FirTypeRef, override val annotations: MutableList, + override var calleeReference: FirReference, override val typeArguments: MutableList, override var explicitReceiver: FirExpression?, override var dispatchReceiver: FirExpression, override var extensionReceiver: FirExpression, - override var calleeReference: FirReference, -) : FirQualifiedAccessExpression(), FirModifiableQualifiedAccess { +) : FirQualifiedAccessExpression() { override fun acceptChildren(visitor: FirVisitor, data: D) { typeRef.accept(visitor, data) annotations.forEach { it.accept(visitor, data) } + calleeReference.accept(visitor, data) typeArguments.forEach { it.accept(visitor, data) } explicitReceiver?.accept(visitor, data) if (dispatchReceiver !== explicitReceiver) { @@ -41,12 +41,12 @@ internal class FirQualifiedAccessExpressionImpl( if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) { extensionReceiver.accept(visitor, data) } - calleeReference.accept(visitor, data) } override fun transformChildren(transformer: FirTransformer, data: D): FirQualifiedAccessExpressionImpl { typeRef = typeRef.transformSingle(transformer, data) transformAnnotations(transformer, data) + transformCalleeReference(transformer, data) transformTypeArguments(transformer, data) explicitReceiver = explicitReceiver?.transformSingle(transformer, data) if (dispatchReceiver !== explicitReceiver) { @@ -55,7 +55,6 @@ internal class FirQualifiedAccessExpressionImpl( if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) { extensionReceiver = extensionReceiver.transformSingle(transformer, data) } - transformCalleeReference(transformer, data) return this } @@ -64,6 +63,11 @@ internal class FirQualifiedAccessExpressionImpl( return this } + override fun transformCalleeReference(transformer: FirTransformer, data: D): FirQualifiedAccessExpressionImpl { + calleeReference = calleeReference.transformSingle(transformer, data) + return this + } + override fun transformTypeArguments(transformer: FirTransformer, data: D): FirQualifiedAccessExpressionImpl { typeArguments.transformInplace(transformer, data) return this @@ -84,21 +88,20 @@ internal class FirQualifiedAccessExpressionImpl( return this } - override fun transformCalleeReference(transformer: FirTransformer, data: D): FirQualifiedAccessExpressionImpl { - calleeReference = calleeReference.transformSingle(transformer, data) - return this - } - override fun replaceTypeRef(newTypeRef: FirTypeRef) { typeRef = newTypeRef } + override fun replaceCalleeReference(newCalleeReference: FirReference) { + calleeReference = newCalleeReference + } + override fun replaceTypeArguments(newTypeArguments: List) { typeArguments.clear() typeArguments.addAll(newTypeArguments) } - override fun replaceCalleeReference(newCalleeReference: FirReference) { - calleeReference = newCalleeReference + override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?) { + explicitReceiver = newExplicitReceiver } } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirThisReceiverExpressionImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirThisReceiverExpressionImpl.kt index 87672911ff9..f07ba9a9ded 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirThisReceiverExpressionImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirThisReceiverExpressionImpl.kt @@ -9,7 +9,6 @@ import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirThisReceiverExpression -import org.jetbrains.kotlin.fir.expressions.impl.FirModifiableQualifiedAccess import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression import org.jetbrains.kotlin.fir.references.FirReference import org.jetbrains.kotlin.fir.references.FirThisReference @@ -28,7 +27,7 @@ internal class FirThisReceiverExpressionImpl( override val annotations: MutableList, override val typeArguments: MutableList, override var calleeReference: FirThisReference, -) : FirThisReceiverExpression(), FirModifiableQualifiedAccess { +) : FirThisReceiverExpression() { override var explicitReceiver: FirExpression? = null override var dispatchReceiver: FirExpression = FirNoReceiverExpression override var extensionReceiver: FirExpression = FirNoReceiverExpression @@ -101,6 +100,10 @@ internal class FirThisReceiverExpressionImpl( typeArguments.addAll(newTypeArguments) } + override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?) { + explicitReceiver = newExplicitReceiver + } + override fun replaceCalleeReference(newCalleeReference: FirThisReference) { calleeReference = newCalleeReference } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirVariableAssignmentImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirVariableAssignmentImpl.kt index 4b604d28693..b2b6419ab2b 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirVariableAssignmentImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirVariableAssignmentImpl.kt @@ -9,7 +9,6 @@ import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirVariableAssignment -import org.jetbrains.kotlin.fir.expressions.impl.FirModifiableQualifiedAccess import org.jetbrains.kotlin.fir.references.FirReference import org.jetbrains.kotlin.fir.types.FirTypeProjection import org.jetbrains.kotlin.fir.visitors.* @@ -21,14 +20,14 @@ import org.jetbrains.kotlin.fir.visitors.* internal class FirVariableAssignmentImpl( override val source: FirSourceElement?, + override var calleeReference: FirReference, override val annotations: MutableList, override val typeArguments: MutableList, override var explicitReceiver: FirExpression?, override var dispatchReceiver: FirExpression, override var extensionReceiver: FirExpression, - override var calleeReference: FirReference, override var rValue: FirExpression, -) : FirVariableAssignment(), FirModifiableQualifiedAccess { +) : FirVariableAssignment() { override var lValue: FirReference get() = calleeReference set(value) { @@ -36,6 +35,7 @@ internal class FirVariableAssignmentImpl( } override fun acceptChildren(visitor: FirVisitor, data: D) { + calleeReference.accept(visitor, data) annotations.forEach { it.accept(visitor, data) } typeArguments.forEach { it.accept(visitor, data) } explicitReceiver?.accept(visitor, data) @@ -45,11 +45,11 @@ internal class FirVariableAssignmentImpl( if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) { extensionReceiver.accept(visitor, data) } - calleeReference.accept(visitor, data) rValue.accept(visitor, data) } override fun transformChildren(transformer: FirTransformer, data: D): FirVariableAssignmentImpl { + transformCalleeReference(transformer, data) transformAnnotations(transformer, data) transformTypeArguments(transformer, data) explicitReceiver = explicitReceiver?.transformSingle(transformer, data) @@ -59,11 +59,15 @@ internal class FirVariableAssignmentImpl( if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) { extensionReceiver = extensionReceiver.transformSingle(transformer, data) } - transformCalleeReference(transformer, data) transformRValue(transformer, data) return this } + override fun transformCalleeReference(transformer: FirTransformer, data: D): FirVariableAssignmentImpl { + calleeReference = calleeReference.transformSingle(transformer, data) + return this + } + override fun transformAnnotations(transformer: FirTransformer, data: D): FirVariableAssignmentImpl { annotations.transformInplace(transformer, data) return this @@ -89,22 +93,21 @@ internal class FirVariableAssignmentImpl( return this } - override fun transformCalleeReference(transformer: FirTransformer, data: D): FirVariableAssignmentImpl { - calleeReference = calleeReference.transformSingle(transformer, data) - return this - } - override fun transformRValue(transformer: FirTransformer, data: D): FirVariableAssignmentImpl { rValue = rValue.transformSingle(transformer, data) return this } + override fun replaceCalleeReference(newCalleeReference: FirReference) { + calleeReference = newCalleeReference + } + override fun replaceTypeArguments(newTypeArguments: List) { typeArguments.clear() typeArguments.addAll(newTypeArguments) } - override fun replaceCalleeReference(newCalleeReference: FirReference) { - calleeReference = newCalleeReference + override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?) { + explicitReceiver = newExplicitReceiver } } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirTransformer.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirTransformer.kt index a05c71bd0bf..dd71d3eee63 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirTransformer.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirTransformer.kt @@ -74,7 +74,6 @@ import org.jetbrains.kotlin.fir.expressions.FirAssignmentOperatorStatement import org.jetbrains.kotlin.fir.expressions.FirEqualityOperatorCall import org.jetbrains.kotlin.fir.expressions.FirWhenExpression import org.jetbrains.kotlin.fir.expressions.FirWhenBranch -import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessWithoutCallee import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess import org.jetbrains.kotlin.fir.expressions.FirCheckNotNullCall import org.jetbrains.kotlin.fir.expressions.FirElvisExpression @@ -414,10 +413,6 @@ abstract class FirTransformer : FirVisitor { - return transformElement(qualifiedAccessWithoutCallee, data) - } - open fun transformQualifiedAccess(qualifiedAccess: FirQualifiedAccess, data: D): CompositeTransformResult { return transformElement(qualifiedAccess, data) } @@ -918,10 +913,6 @@ abstract class FirTransformer : FirVisitor { - return transformQualifiedAccessWithoutCallee(qualifiedAccessWithoutCallee, data) - } - final override fun visitQualifiedAccess(qualifiedAccess: FirQualifiedAccess, data: D): CompositeTransformResult { return transformQualifiedAccess(qualifiedAccess, data) } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitor.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitor.kt index d9aab1d4a92..cab6969231e 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitor.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitor.kt @@ -74,7 +74,6 @@ import org.jetbrains.kotlin.fir.expressions.FirAssignmentOperatorStatement import org.jetbrains.kotlin.fir.expressions.FirEqualityOperatorCall import org.jetbrains.kotlin.fir.expressions.FirWhenExpression import org.jetbrains.kotlin.fir.expressions.FirWhenBranch -import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessWithoutCallee import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess import org.jetbrains.kotlin.fir.expressions.FirCheckNotNullCall import org.jetbrains.kotlin.fir.expressions.FirElvisExpression @@ -276,8 +275,6 @@ abstract class FirVisitor { open fun visitWhenBranch(whenBranch: FirWhenBranch, data: D): R = visitElement(whenBranch, data) - open fun visitQualifiedAccessWithoutCallee(qualifiedAccessWithoutCallee: FirQualifiedAccessWithoutCallee, data: D): R = visitElement(qualifiedAccessWithoutCallee, data) - open fun visitQualifiedAccess(qualifiedAccess: FirQualifiedAccess, data: D): R = visitElement(qualifiedAccess, data) open fun visitCheckNotNullCall(checkNotNullCall: FirCheckNotNullCall, data: D): R = visitElement(checkNotNullCall, data) diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitorVoid.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitorVoid.kt index ffd460e8051..be3db30cb10 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitorVoid.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitorVoid.kt @@ -74,7 +74,6 @@ import org.jetbrains.kotlin.fir.expressions.FirAssignmentOperatorStatement import org.jetbrains.kotlin.fir.expressions.FirEqualityOperatorCall import org.jetbrains.kotlin.fir.expressions.FirWhenExpression import org.jetbrains.kotlin.fir.expressions.FirWhenBranch -import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessWithoutCallee import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess import org.jetbrains.kotlin.fir.expressions.FirCheckNotNullCall import org.jetbrains.kotlin.fir.expressions.FirElvisExpression @@ -412,10 +411,6 @@ abstract class FirVisitorVoid : FirVisitor() { visitElement(whenBranch) } - open fun visitQualifiedAccessWithoutCallee(qualifiedAccessWithoutCallee: FirQualifiedAccessWithoutCallee) { - visitElement(qualifiedAccessWithoutCallee) - } - open fun visitQualifiedAccess(qualifiedAccess: FirQualifiedAccess) { visitElement(qualifiedAccess) } @@ -916,10 +911,6 @@ abstract class FirVisitorVoid : FirVisitor() { visitWhenBranch(whenBranch) } - final override fun visitQualifiedAccessWithoutCallee(qualifiedAccessWithoutCallee: FirQualifiedAccessWithoutCallee, data: Nothing?) { - visitQualifiedAccessWithoutCallee(qualifiedAccessWithoutCallee) - } - final override fun visitQualifiedAccess(qualifiedAccess: FirQualifiedAccess, data: Nothing?) { visitQualifiedAccess(qualifiedAccess) } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirExpressionWithSmartcastImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirExpressionWithSmartcastImpl.kt index cf1f022b5a1..bcb7500a4c1 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirExpressionWithSmartcastImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirExpressionWithSmartcastImpl.kt @@ -78,5 +78,9 @@ internal class FirExpressionWithSmartcastImpl( throw IllegalStateException() } + override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?) { + throw IllegalStateException() + } + override fun replaceTypeRef(newTypeRef: FirTypeRef) {} } diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FieldSets.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FieldSets.kt index fb3e33eda4c..a1416d461a9 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FieldSets.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FieldSets.kt @@ -24,7 +24,7 @@ object FieldSets { val calleeReference = field("calleeReference", reference, withReplace = true) val receivers = fieldSet( - field("explicitReceiver", expression, nullable = true).withTransform(), + field("explicitReceiver", expression, nullable = true, withReplace = true).withTransform(), field("dispatchReceiver", expression).withTransform(), field("extensionReceiver", expression).withTransform() ) @@ -83,4 +83,4 @@ object FieldSets { val modality = field(modalityType, nullable = true) val scopeProvider = field("scopeProvider", firScopeProviderType) -} \ No newline at end of file +} diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FirTreeBuilder.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FirTreeBuilder.kt index 8b49e9b8ecd..e278fe64a43 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FirTreeBuilder.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FirTreeBuilder.kt @@ -90,8 +90,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() { val equalityOperatorCall = element("EqualityOperatorCall", Expression, expression, call) val whenExpression = element("WhenExpression", Expression, expression, resolvable) val whenBranch = element("WhenBranch", Expression) - val qualifiedAccessWithoutCallee = element("QualifiedAccessWithoutCallee", Expression, statement) - val qualifiedAccess = element("QualifiedAccess", Expression, qualifiedAccessWithoutCallee, resolvable) + val qualifiedAccess = element("QualifiedAccess", Expression, resolvable, statement) val checkNotNullCall = element("CheckNotNullCall", Expression, expression, call, resolvable) val elvisExpression = element("ElvisExpression", Expression, expression, resolvable) diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt index a850f2fc350..23a0cf15db8 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt @@ -74,11 +74,7 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator() impl(arrayOfCall) - val modifiableQualifiedAccess = impl(qualifiedAccessWithoutCallee, "FirModifiableQualifiedAccess") {} - - impl(callableReferenceAccess) { - parents += modifiableQualifiedAccess - } + impl(callableReferenceAccess) impl(componentCall) { default("calleeReference", "FirSimpleNamedReference(source, Name.identifier(\"component\$componentIndex\"), null)") @@ -128,14 +124,10 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator() } impl(functionCall) { - parents += modifiableQualifiedAccess kind = OpenClass } - impl(qualifiedAccessExpression) { - parents += modifiableQualifiedAccess - } - + impl(qualifiedAccessExpression) noImpl(expressionWithSmartcast) @@ -269,7 +261,6 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator() } impl(thisReceiverExpression) { - parents += modifiableQualifiedAccess defaultNoReceivers() } @@ -280,8 +271,6 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator() } impl(variableAssignment) { - parents += modifiableQualifiedAccess - default("lValue") { value = "calleeReference" customSetter = "calleeReference = value" diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt index 05d8794696c..d85e2f2a6cd 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt @@ -12,7 +12,6 @@ import org.jetbrains.kotlin.fir.tree.generator.FieldSets.calleeReference import org.jetbrains.kotlin.fir.tree.generator.FieldSets.classKind import org.jetbrains.kotlin.fir.tree.generator.FieldSets.controlFlowGraphReferenceField import org.jetbrains.kotlin.fir.tree.generator.FieldSets.declarations -import org.jetbrains.kotlin.fir.tree.generator.FieldSets.effectiveVisibility import org.jetbrains.kotlin.fir.tree.generator.FieldSets.initializer import org.jetbrains.kotlin.fir.tree.generator.FieldSets.modality import org.jetbrains.kotlin.fir.tree.generator.FieldSets.name @@ -192,7 +191,7 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild +field("rhs", expression).withTransform() } - qualifiedAccessWithoutCallee.configure { + qualifiedAccess.configure { +typeArguments.withTransform() +receivers } @@ -354,6 +353,7 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild delegatedConstructorCall.configure { +field("constructedTypeRef", typeRef, withReplace = true) +field("dispatchReceiver", expression).withTransform() + +field("calleeReference", reference, withReplace = true) generateBooleanFields("this", "super") } diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Element.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Element.kt index d47707e56ef..6ea490e401d 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Element.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Element.kt @@ -33,6 +33,7 @@ interface AbstractElement : FieldContainer, KindOwner { val defaultImplementation: Implementation? val customImplementations: List val overridenFields: Map> + val useNullableForReplace: Set override val allParents: List get() = parents } @@ -63,6 +64,7 @@ class Element(val name: String, kind: Kind) : AbstractElement { override val needTransformOtherChildren: Boolean get() = _needTransformOtherChildren || parents.any { it.needTransformOtherChildren } override val overridenFields: MutableMap> = mutableMapOf() + override val useNullableForReplace: MutableSet = mutableSetOf() override val allImplementations: List by lazy { if (doesNotNeedImplementation) { emptyList() @@ -90,6 +92,9 @@ class Element(val name: String, kind: Kind) : AbstractElement { overridenFields[existingField, parentField] = false } else { overridenFields[existingField, parentField] = true + if (parentField.nullable != existingField.nullable) { + existingField.useNullableForReplace = true + } } } else { overridenFields[parentField, parentField] = true @@ -174,4 +179,4 @@ class TypeArgumentWithMultipleUpperBounds(name: String, override val upperBounds } } -data class ArbitraryImportable(override val packageName: String, override val type: String) : Importable \ No newline at end of file +data class ArbitraryImportable(override val packageName: String, override val type: String) : Importable diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Field.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Field.kt index 090e3b33cb1..febe6ac596c 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Field.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Field.kt @@ -26,6 +26,7 @@ sealed class Field : Importable { open val fromDelegate: Boolean get() = false open val overridenTypes: MutableSet = mutableSetOf() + open var useNullableForReplace: Boolean = false fun copy(): Field = internalCopy().also { updateFieldsInCopy(it) @@ -39,6 +40,7 @@ sealed class Field : Importable { copy.needTransformInOtherChildren = needTransformInOtherChildren copy.isMutable = isMutable copy.overridenTypes += overridenTypes + copy.useNullableForReplace = useNullableForReplace } copy.fromParent = fromParent } @@ -98,6 +100,10 @@ class FieldWithDefault(val origin: Field) : Field() { override val overridenTypes: MutableSet get() = origin.overridenTypes + override var useNullableForReplace: Boolean + get() = origin.useNullableForReplace + set(_) {} + override fun internalCopy(): Field { return FieldWithDefault(origin).also { it.defaultValueInImplementation = defaultValueInImplementation diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/element.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/element.kt index 6ac8215879f..ed18ca26e6f 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/element.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/element.kt @@ -84,15 +84,15 @@ fun SmartPrinter.printElement(element: Element) { override() println("fun accept(visitor: FirVisitor, data: D): R = visitor.visit$name(this, data)") - fun Field.replaceDeclaration(override: Boolean, overridenType: Importable? = null) { + fun Field.replaceDeclaration(override: Boolean, overridenType: Importable? = null, forceNullable: Boolean = false) { println() abstract() if (override) print("override ") - println(replaceFunctionDeclaration(overridenType)) + println(replaceFunctionDeclaration(overridenType, forceNullable)) } allFields.filter { it.withReplace }.forEach { - it.replaceDeclaration(overridenFields[it, it]) + it.replaceDeclaration(overridenFields[it, it], forceNullable = it.useNullableForReplace) for (overridenType in it.overridenTypes) { it.replaceDeclaration(true, overridenType) } diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/implementation.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/implementation.kt index ef915d2ad0c..031d4fe7e24 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/implementation.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/implementation.kt @@ -303,10 +303,15 @@ fun SmartPrinter.printImplementation(implementation: Implementation) { } } - fun generateReplace(field: Field, overridenType: Importable? = null, body: () -> Unit) { + fun generateReplace( + field: Field, + overridenType: Importable? = null, + forceNullable: Boolean = false, + body: () -> Unit, + ) { println() abstract() - print("override ${field.replaceFunctionDeclaration(overridenType)}") + print("override ${field.replaceFunctionDeclaration(overridenType, forceNullable)}") if (isInterface || isAbstract) { println() return @@ -326,7 +331,7 @@ fun SmartPrinter.printImplementation(implementation: Implementation) { for (field in allFields.filter { it.withReplace }) { val capitalizedFieldName = field.name.capitalize() val newValue = "new$capitalizedFieldName" - generateReplace(field) { + generateReplace(field, forceNullable = field.useNullableForReplace) { when { field.withGetter -> {} @@ -336,6 +341,9 @@ fun SmartPrinter.printImplementation(implementation: Implementation) { } else -> { + if (field.useNullableForReplace) { + println("require($newValue != null)") + } println("${field.name} = $newValue") } } diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/utils.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/utils.kt index 636f9624a48..59e535efbda 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/utils.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/utils.kt @@ -96,10 +96,13 @@ fun transformFunctionDeclaration(transformName: String, returnType: String): Str return "fun transform$transformName(transformer: FirTransformer, data: D): $returnType" } -fun Field.replaceFunctionDeclaration(overridenType: Importable? = null): String { +fun Field.replaceFunctionDeclaration(overridenType: Importable? = null, forceNullable: Boolean = false): String { val capName = name.capitalize() val type = overridenType?.typeWithArguments ?: typeWithArguments - return "fun replace$capName(new$capName: $type)" + + val typeWithNullable = if (forceNullable && !type.endsWith("?")) "$type?" else type + + return "fun replace$capName(new$capName: $typeWithNullable)" } val Field.mutableType: String