diff --git a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt index 742d5ac2ada..dd42841ebdb 100644 --- a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt +++ b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt @@ -253,8 +253,8 @@ internal fun generateIncrementOrDecrementBlock( } } -internal fun generateAccessExpression(session: FirSession, psi: PsiElement?, name: Name): FirAccessExpression = - FirAccessExpressionImpl(session, psi).apply { +internal fun generateAccessExpression(session: FirSession, psi: PsiElement?, name: Name): FirQualifiedAccessExpression = + FirQualifiedAccessExpressionImpl(session, psi).apply { calleeReference = FirSimpleNamedReference(session, psi, name) } @@ -292,10 +292,10 @@ internal fun generateTemporaryVariable( session: FirSession, psi: PsiElement?, specialName: String, initializer: FirExpression ): FirVariable = generateTemporaryVariable(session, psi, Name.special("<$specialName>"), initializer) -private fun FirModifiableAccess.initializeLValue( +private fun FirModifiableQualifiedAccess.initializeLValue( session: FirSession, left: KtExpression?, - convertQualified: KtQualifiedExpression.() -> FirAccess? + convertQualified: KtQualifiedExpression.() -> FirQualifiedAccess? ): FirReference { return when (left) { is KtSimpleNameExpression -> { @@ -337,12 +337,12 @@ internal fun KtExpression?.generateAssignment( val arrayExpression = this.arrayExpression val arraySet = FirArraySetCallImpl(session, psi, value, operation).apply { for (indexExpression in indexExpressions) { - arguments += indexExpression.convert() + indexes += indexExpression.convert() } } if (arrayExpression is KtSimpleNameExpression) { return arraySet.apply { - calleeReference = initializeLValue(session, arrayExpression) { convert() as? FirAccess } + lValue = initializeLValue(session, arrayExpression) { convert() as? FirQualifiedAccess } } } return FirBlockImpl(session, arrayExpression).apply { @@ -351,7 +351,7 @@ internal fun KtExpression?.generateAssignment( session, this@generateAssignment, name, arrayExpression?.convert() ?: FirErrorExpressionImpl(session, arrayExpression, "No array expression") ) - statements += arraySet.apply { calleeReference = FirSimpleNamedReference(session, arrayExpression, name) } + statements += arraySet.apply { lValue = FirSimpleNamedReference(session, arrayExpression, name) } } } if (operation != FirOperation.ASSIGN && @@ -364,12 +364,12 @@ internal fun KtExpression?.generateAssignment( session, this@generateAssignment, name, this@generateAssignment?.convert() ?: FirErrorExpressionImpl(session, this@generateAssignment, "No LValue in assignment") ) - statements += FirPropertyAssignmentImpl(session, psi, value, operation).apply { - calleeReference = FirSimpleNamedReference(session, this@generateAssignment, name) + statements += FirVariableAssignmentImpl(session, psi, value, operation).apply { + lValue = FirSimpleNamedReference(session, this@generateAssignment, name) } } } - return FirPropertyAssignmentImpl(session, psi, value, operation).apply { - calleeReference = initializeLValue(session, this@generateAssignment) { convert() as? FirAccess } + return FirVariableAssignmentImpl(session, psi, value, operation).apply { + lValue = initializeLValue(session, this@generateAssignment) { convert() as? FirQualifiedAccess } } } \ No newline at end of file diff --git a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt index 34de59fbed1..fd145080f27 100644 --- a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt +++ b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt @@ -1247,7 +1247,7 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) { override fun visitQualifiedExpression(expression: KtQualifiedExpression, data: Unit): FirElement { val selector = expression.selectorExpression ?: return FirErrorExpressionImpl(session, expression, "Qualified expression without selector") - val firSelector = selector.toFirExpression() as FirModifiableAccess + val firSelector = selector.toFirExpression() as FirModifiableQualifiedAccess firSelector.safe = expression is KtSafeQualifiedExpression firSelector.explicitReceiver = expression.receiverExpression.toFirExpression() return firSelector @@ -1255,14 +1255,14 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) { override fun visitThisExpression(expression: KtThisExpression, data: Unit): FirElement { val labelName = expression.getLabelName() - return FirAccessExpressionImpl(session, expression).apply { + return FirQualifiedAccessExpressionImpl(session, expression).apply { calleeReference = FirExplicitThisReference(session, expression, labelName) } } override fun visitSuperExpression(expression: KtSuperExpression, data: Unit): FirElement { val superType = expression.superTypeQualifier - return FirAccessExpressionImpl(session, expression).apply { + return FirQualifiedAccessExpressionImpl(session, expression).apply { calleeReference = FirExplicitSuperReference(session, expression, superType.toFirOrImplicitType()) } } diff --git a/compiler/fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/RawFirBuilderTotalKotlinTestCase.kt b/compiler/fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/RawFirBuilderTotalKotlinTestCase.kt index ae842d7bf21..bd00a2b28f9 100644 --- a/compiler/fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/RawFirBuilderTotalKotlinTestCase.kt +++ b/compiler/fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/RawFirBuilderTotalKotlinTestCase.kt @@ -13,7 +13,7 @@ import org.jetbrains.kotlin.fir.declarations.FirErrorDeclaration import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.expressions.FirErrorExpression import org.jetbrains.kotlin.fir.expressions.FirExpression -import org.jetbrains.kotlin.fir.expressions.FirAccess +import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess import org.jetbrains.kotlin.fir.expressions.FirStatement import org.jetbrains.kotlin.fir.expressions.impl.FirExpressionStub import org.jetbrains.kotlin.fir.references.FirErrorNamedReference @@ -72,15 +72,15 @@ class RawFirBuilderTotalKotlinTestCase : AbstractRawFirBuilderTestCase() { errorExpression.psi?.let { println(it) } } - override fun visitAccess(access: FirAccess) { - val calleeReference = access.calleeReference + override fun visitQualifiedAccess(qualifiedAccess: FirQualifiedAccess) { + val calleeReference = qualifiedAccess.calleeReference if (calleeReference is FirErrorNamedReference) { errorReferences++ println(calleeReference.errorReason) } else { normalReferences++ } - super.visitAccess(access) + super.visitQualifiedAccess(qualifiedAccess) } override fun visitExpression(expression: FirExpression) { diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt index e8d3ba76508..30eeb1487e9 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt @@ -711,11 +711,11 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() { print(">") } - override fun visitAccess(access: FirAccess) { - val explicitReceiver = access.explicitReceiver + override fun visitQualifiedAccess(qualifiedAccess: FirQualifiedAccess) { + val explicitReceiver = qualifiedAccess.explicitReceiver if (explicitReceiver != null) { explicitReceiver.accept(this) - if (access.safe) { + if (qualifiedAccess.safe) { print("?.") } else { print(".") @@ -730,39 +730,39 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() { callableReferenceAccess.calleeReference.accept(this) } - override fun visitAccessExpression(accessExpression: FirAccessExpression) { - accessExpression.annotations.renderAnnotations() - visitAccess(accessExpression) - accessExpression.calleeReference.accept(this) + override fun visitQualifiedAccessExpression(qualifiedAccessExpression: FirQualifiedAccessExpression) { + qualifiedAccessExpression.annotations.renderAnnotations() + visitQualifiedAccess(qualifiedAccessExpression) + qualifiedAccessExpression.calleeReference.accept(this) } override fun visitAssignment(assignment: FirAssignment) { print(assignment.operation.operator) print(" ") - assignment.value.accept(this) + assignment.rValue.accept(this) } - override fun visitPropertyAssignment(propertyAssignment: FirPropertyAssignment) { - propertyAssignment.annotations.renderAnnotations() - visitAccess(propertyAssignment) - propertyAssignment.calleeReference.accept(this) + override fun visitVariableAssignment(variableAssignment: FirVariableAssignment) { + variableAssignment.annotations.renderAnnotations() + visitQualifiedAccess(variableAssignment) + variableAssignment.lValue.accept(this) print(" ") - visitAssignment(propertyAssignment) + visitAssignment(variableAssignment) } override fun visitArraySetCall(arraySetCall: FirArraySetCall) { arraySetCall.annotations.renderAnnotations() - visitAccess(arraySetCall) - arraySetCall.calleeReference.accept(this) + visitQualifiedAccess(arraySetCall) + arraySetCall.lValue.accept(this) print("[") - arraySetCall.arguments.renderSeparated() + arraySetCall.indexes.renderSeparated() print("] ") visitAssignment(arraySetCall) } override fun visitFunctionCall(functionCall: FirFunctionCall) { functionCall.annotations.renderAnnotations() - visitAccess(functionCall) + visitQualifiedAccess(functionCall) functionCall.calleeReference.accept(this) if (functionCall.typeArguments.isNotEmpty()) { print("<") diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirArraySetCall.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirArraySetCall.kt index 4866a7ddd4d..68c9b17ce83 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirArraySetCall.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirArraySetCall.kt @@ -9,11 +9,19 @@ import org.jetbrains.kotlin.fir.VisitedSupertype import org.jetbrains.kotlin.fir.visitors.FirVisitor interface FirArraySetCall : @VisitedSupertype FirCall, FirAssignment { + // NB: arguments of this thing are indexes AND rvalue + val indexes: List + + override val arguments get() = indexes + rValue + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitArraySetCall(this, data) override fun acceptChildren(visitor: FirVisitor, data: D) { - super.acceptChildren(visitor, data) + for (index in indexes) { + index.accept(visitor, data) + } + acceptAnnotations(visitor, data) super.acceptChildren(visitor, data) } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirAssignment.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirAssignment.kt index 4b307460ce0..acdd6edadcf 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirAssignment.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirAssignment.kt @@ -5,10 +5,13 @@ package org.jetbrains.kotlin.fir.expressions +import org.jetbrains.kotlin.fir.FirReference import org.jetbrains.kotlin.fir.visitors.FirVisitor -interface FirAssignment : FirAccess { - val value: FirExpression +interface FirAssignment : FirQualifiedAccess { + val lValue: FirReference get() = calleeReference + + val rValue: FirExpression val operation: FirOperation @@ -16,7 +19,7 @@ interface FirAssignment : FirAccess { visitor.visitAssignment(this, data) override fun acceptChildren(visitor: FirVisitor, data: D) { - value.accept(visitor, data) + rValue.accept(visitor, data) super.acceptChildren(visitor, data) } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirCallableReferenceAccess.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirCallableReferenceAccess.kt index 11e7a7d7c6b..760a65f2be9 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirCallableReferenceAccess.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirCallableReferenceAccess.kt @@ -7,7 +7,7 @@ package org.jetbrains.kotlin.fir.expressions import org.jetbrains.kotlin.fir.visitors.FirVisitor -interface FirCallableReferenceAccess : FirAccessExpression { +interface FirCallableReferenceAccess : FirQualifiedAccessExpression { override fun accept(visitor: FirVisitor, data: D): R = visitor.visitCallableReferenceAccess(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirFunctionCall.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirFunctionCall.kt index 84918761c1a..f234b4f9590 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirFunctionCall.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirFunctionCall.kt @@ -10,7 +10,7 @@ import org.jetbrains.kotlin.fir.VisitedSupertype import org.jetbrains.kotlin.fir.types.FirTypeProjectionContainer import org.jetbrains.kotlin.fir.visitors.FirVisitor -interface FirFunctionCall : @VisitedSupertype FirCall, FirAccess, FirTypeProjectionContainer { +interface FirFunctionCall : @VisitedSupertype FirCall, FirQualifiedAccess, FirTypeProjectionContainer { override val calleeReference: FirNamedReference override fun accept(visitor: FirVisitor, data: D): R = @@ -23,6 +23,6 @@ interface FirFunctionCall : @VisitedSupertype FirCall, FirAccess, FirTypeProject for (typeArgument in typeArguments) { typeArgument.accept(visitor, data) } - super.acceptChildren(visitor, data) + super.acceptChildren(visitor, data) } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirAccess.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccess.kt similarity index 88% rename from compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirAccess.kt rename to compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccess.kt index 1ba5b3ceae2..ac87f85edab 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirAccess.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccess.kt @@ -8,7 +8,7 @@ package org.jetbrains.kotlin.fir.expressions import org.jetbrains.kotlin.fir.FirReference import org.jetbrains.kotlin.fir.visitors.FirVisitor -interface FirAccess : FirStatement { +interface FirQualifiedAccess : FirStatement { val calleeReference: FirReference val safe: Boolean get() = false @@ -16,7 +16,7 @@ interface FirAccess : FirStatement { val explicitReceiver: FirExpression? get() = null override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitAccess(this, data) + visitor.visitQualifiedAccess(this, data) override fun acceptChildren(visitor: FirVisitor, data: D) { calleeReference.accept(visitor, data) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirAccessExpression.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccessExpression.kt similarity index 68% rename from compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirAccessExpression.kt rename to compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccessExpression.kt index e80b5273718..13c6b2bb107 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirAccessExpression.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccessExpression.kt @@ -8,11 +8,11 @@ package org.jetbrains.kotlin.fir.expressions import org.jetbrains.kotlin.fir.VisitedSupertype import org.jetbrains.kotlin.fir.visitors.FirVisitor -interface FirAccessExpression : @VisitedSupertype FirAccess, FirExpression { +interface FirQualifiedAccessExpression : @VisitedSupertype FirQualifiedAccess, FirExpression { override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitAccessExpression(this, data) + visitor.visitQualifiedAccessExpression(this, data) override fun acceptChildren(visitor: FirVisitor, data: D) { - super.acceptChildren(visitor, data) + super.acceptChildren(visitor, data) } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirPropertyAssignment.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirVariableAssignment.kt similarity index 76% rename from compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirPropertyAssignment.kt rename to compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirVariableAssignment.kt index 1ce69b6d035..cb223b05c92 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirPropertyAssignment.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/FirVariableAssignment.kt @@ -7,7 +7,8 @@ package org.jetbrains.kotlin.fir.expressions import org.jetbrains.kotlin.fir.visitors.FirVisitor -interface FirPropertyAssignment : FirAssignment { +interface FirVariableAssignment : FirAssignment { + override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitPropertyAssignment(this, data) + visitor.visitVariableAssignment(this, data) } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractAssignment.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractAssignment.kt index 4fa71dcc2ae..61c6d4f1b03 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractAssignment.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractAssignment.kt @@ -7,22 +7,30 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.FirReference import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirOperation -import org.jetbrains.kotlin.fir.expressions.FirPropertyAssignment +import org.jetbrains.kotlin.fir.expressions.FirVariableAssignment import org.jetbrains.kotlin.fir.transformSingle import org.jetbrains.kotlin.fir.visitors.FirTransformer abstract class FirAbstractAssignment( session: FirSession, psi: PsiElement?, - final override var value: FirExpression, + final override var rValue: FirExpression, final override val operation: FirOperation, safe: Boolean = false -) : FirAbstractAccess(session, psi, safe), FirPropertyAssignment { +) : FirAbstractQualifiedAccess(session, psi, safe), FirVariableAssignment { + + override var lValue: FirReference + get() = calleeReference + set(value) { + calleeReference = value + } + override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - value = value.transformSingle(transformer, data) - return super.transformChildren(transformer, data) + rValue = rValue.transformSingle(transformer, data) + return super.transformChildren(transformer, data) } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractAccess.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractQualifiedAccess.kt similarity index 89% rename from compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractAccess.kt rename to compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractQualifiedAccess.kt index 3db053656f1..b35fad87a79 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractAccess.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAbstractQualifiedAccess.kt @@ -10,11 +10,11 @@ import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.visitors.FirTransformer -abstract class FirAbstractAccess( +abstract class FirAbstractQualifiedAccess( session: FirSession, psi: PsiElement?, final override var safe: Boolean = false -) : FirAbstractStatement(session, psi), FirModifiableAccess { +) : FirAbstractStatement(session, psi), FirModifiableQualifiedAccess { final override lateinit var calleeReference: FirReference final override var explicitReceiver: FirExpression? = null diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirArraySetCallImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirArraySetCallImpl.kt index 3f1d79b28ed..0436706e29e 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirArraySetCallImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirArraySetCallImpl.kt @@ -22,13 +22,13 @@ class FirArraySetCallImpl( value: FirExpression, operation: FirOperation ) : FirAbstractAssignment(session, psi, value, operation, false), FirArraySetCall { - override val arguments = mutableListOf() + override val indexes = mutableListOf() override fun accept(visitor: FirVisitor, data: D): R = super.accept(visitor, data) override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - arguments.transformInplace(transformer, data) + indexes.transformInplace(transformer, data) return super.transformChildren(transformer, data) } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirCallableReferenceAccessImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirCallableReferenceAccessImpl.kt index 82afbbc4df3..2cc470649b8 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirCallableReferenceAccessImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirCallableReferenceAccessImpl.kt @@ -6,14 +6,10 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess -import org.jetbrains.kotlin.fir.transformInplace -import org.jetbrains.kotlin.fir.visitors.FirTransformer class FirCallableReferenceAccessImpl( session: FirSession, psi: PsiElement? -) : FirAbstractAccess(session, psi), FirCallableReferenceAccess \ No newline at end of file +) : FirAbstractQualifiedAccess(session, psi), FirCallableReferenceAccess \ 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 1e13baf0ee6..a04bad697d7 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 @@ -16,7 +16,7 @@ class FirFunctionCallImpl( session: FirSession, psi: PsiElement?, override var safe: Boolean = false -) : FirAbstractCall(session, psi), FirFunctionCall, FirModifiableAccess { +) : FirAbstractCall(session, psi), FirFunctionCall, FirModifiableQualifiedAccess { override val typeArguments = mutableListOf() override lateinit var calleeReference: FirNamedReference diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirModifiableAccess.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirModifiableQualifiedAccess.kt similarity index 78% rename from compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirModifiableAccess.kt rename to compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirModifiableQualifiedAccess.kt index 541fea97570..fd7607d1719 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirModifiableAccess.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirModifiableQualifiedAccess.kt @@ -6,9 +6,9 @@ package org.jetbrains.kotlin.fir.expressions.impl import org.jetbrains.kotlin.fir.expressions.FirExpression -import org.jetbrains.kotlin.fir.expressions.FirAccess +import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess -interface FirModifiableAccess : FirAccess { +interface FirModifiableQualifiedAccess : FirQualifiedAccess { override var safe: Boolean get() = super.safe set(_) {} diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAccessExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirQualifiedAccessExpressionImpl.kt similarity index 50% rename from compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAccessExpressionImpl.kt rename to compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirQualifiedAccessExpressionImpl.kt index 02e37f93104..774209ff10e 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAccessExpressionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirQualifiedAccessExpressionImpl.kt @@ -6,15 +6,11 @@ package org.jetbrains.kotlin.fir.expressions.impl import com.intellij.psi.PsiElement -import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.expressions.FirAccessExpression -import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall -import org.jetbrains.kotlin.fir.transformInplace -import org.jetbrains.kotlin.fir.visitors.FirTransformer +import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression -class FirAccessExpressionImpl( +class FirQualifiedAccessExpressionImpl( session: FirSession, psi: PsiElement?, safe: Boolean = false -) : FirAbstractAccess(session, psi, safe), FirAccessExpression \ No newline at end of file +) : FirAbstractQualifiedAccess(session, psi, safe), FirQualifiedAccessExpression \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirPropertyAssignmentImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirVariableAssignmentImpl.kt similarity index 83% rename from compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirPropertyAssignmentImpl.kt rename to compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirVariableAssignmentImpl.kt index 1f5b45c674d..58047f0204d 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirPropertyAssignmentImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirVariableAssignmentImpl.kt @@ -9,12 +9,12 @@ import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirOperation -import org.jetbrains.kotlin.fir.expressions.FirPropertyAssignment +import org.jetbrains.kotlin.fir.expressions.FirVariableAssignment -class FirPropertyAssignmentImpl( +class FirVariableAssignmentImpl( session: FirSession, psi: PsiElement?, value: FirExpression, operation: FirOperation, safe: Boolean = false -) : FirAbstractAssignment(session, psi, value, operation, safe), FirPropertyAssignment \ No newline at end of file +) : FirAbstractAssignment(session, psi, value, operation, safe), FirVariableAssignment \ No newline at end of file diff --git a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirTransformerGenerated.kt b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirTransformerGenerated.kt index 434af97fc41..04c33404035 100644 --- a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirTransformerGenerated.kt +++ b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirTransformerGenerated.kt @@ -152,30 +152,6 @@ abstract class FirTransformer : FirVisitor { - return transformStatement(access, data) - } - - open fun transformAccessExpression(accessExpression: FirAccessExpression, data: D): CompositeTransformResult { - return transformAccess(accessExpression, data) - } - - open fun transformCallableReferenceAccess(callableReferenceAccess: FirCallableReferenceAccess, data: D): CompositeTransformResult { - return transformAccessExpression(callableReferenceAccess, data) - } - - open fun transformAssignment(assignment: FirAssignment, data: D): CompositeTransformResult { - return transformAccess(assignment, data) - } - - open fun transformPropertyAssignment(propertyAssignment: FirPropertyAssignment, data: D): CompositeTransformResult { - return transformAssignment(propertyAssignment, data) - } - - open fun transformModifiableAccess(modifiableAccess: FirModifiableAccess, data: D): CompositeTransformResult { - return transformAccess(modifiableAccess, data) - } - open fun transformClass(klass: FirClass, data: D): CompositeTransformResult { return transformStatement(klass, data) } @@ -288,6 +264,30 @@ abstract class FirTransformer : FirVisitor { + return transformStatement(qualifiedAccess, data) + } + + open fun transformAssignment(assignment: FirAssignment, data: D): CompositeTransformResult { + return transformQualifiedAccess(assignment, data) + } + + open fun transformVariableAssignment(variableAssignment: FirVariableAssignment, data: D): CompositeTransformResult { + return transformAssignment(variableAssignment, data) + } + + open fun transformModifiableQualifiedAccess(modifiableQualifiedAccess: FirModifiableQualifiedAccess, data: D): CompositeTransformResult { + return transformQualifiedAccess(modifiableQualifiedAccess, data) + } + + open fun transformQualifiedAccessExpression(qualifiedAccessExpression: FirQualifiedAccessExpression, data: D): CompositeTransformResult { + return transformQualifiedAccess(qualifiedAccessExpression, data) + } + + open fun transformCallableReferenceAccess(callableReferenceAccess: FirCallableReferenceAccess, data: D): CompositeTransformResult { + return transformQualifiedAccessExpression(callableReferenceAccess, data) + } + open fun transformTargetElement(targetElement: E, data: D): CompositeTransformResult { return transformElement(targetElement, data) } @@ -352,14 +352,6 @@ abstract class FirTransformer : FirVisitor { - return transformAccess(access, data) - } - - final override fun visitAccessExpression(accessExpression: FirAccessExpression, data: D): CompositeTransformResult { - return transformAccessExpression(accessExpression, data) - } - final override fun visitAnnotationCall(annotationCall: FirAnnotationCall, data: D): CompositeTransformResult { return transformAnnotationCall(annotationCall, data) } @@ -532,10 +524,6 @@ abstract class FirTransformer : FirVisitor { - return transformModifiableAccess(modifiableAccess, data) - } - final override fun visitModifiableClass(modifiableClass: FirModifiableClass, data: D): CompositeTransformResult { return transformModifiableClass(modifiableClass, data) } @@ -544,6 +532,10 @@ abstract class FirTransformer : FirVisitor { + return transformModifiableQualifiedAccess(modifiableQualifiedAccess, data) + } + final override fun visitNamedDeclaration(namedDeclaration: FirNamedDeclaration, data: D): CompositeTransformResult { return transformNamedDeclaration(namedDeclaration, data) } @@ -572,8 +564,12 @@ abstract class FirTransformer : FirVisitor { - return transformPropertyAssignment(propertyAssignment, data) + final override fun visitQualifiedAccess(qualifiedAccess: FirQualifiedAccess, data: D): CompositeTransformResult { + return transformQualifiedAccess(qualifiedAccess, data) + } + + final override fun visitQualifiedAccessExpression(qualifiedAccessExpression: FirQualifiedAccessExpression, data: D): CompositeTransformResult { + return transformQualifiedAccessExpression(qualifiedAccessExpression, data) } final override fun visitReference(reference: FirReference, data: D): CompositeTransformResult { @@ -676,6 +672,10 @@ abstract class FirTransformer : FirVisitor { + return transformVariableAssignment(variableAssignment, data) + } + final override fun visitWhenBranch(whenBranch: FirWhenBranch, data: D): CompositeTransformResult { return transformWhenBranch(whenBranch, data) } diff --git a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorGenerated.kt b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorGenerated.kt index 622d35edc1e..bc07ef5a9d8 100644 --- a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorGenerated.kt +++ b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorGenerated.kt @@ -152,30 +152,6 @@ abstract class FirVisitor { return visitElement(statement, data) } - open fun visitAccess(access: FirAccess, data: D): R { - return visitStatement(access, data) - } - - open fun visitAccessExpression(accessExpression: FirAccessExpression, data: D): R { - return visitAccess(accessExpression, data) - } - - open fun visitCallableReferenceAccess(callableReferenceAccess: FirCallableReferenceAccess, data: D): R { - return visitAccessExpression(callableReferenceAccess, data) - } - - open fun visitAssignment(assignment: FirAssignment, data: D): R { - return visitAccess(assignment, data) - } - - open fun visitPropertyAssignment(propertyAssignment: FirPropertyAssignment, data: D): R { - return visitAssignment(propertyAssignment, data) - } - - open fun visitModifiableAccess(modifiableAccess: FirModifiableAccess, data: D): R { - return visitAccess(modifiableAccess, data) - } - open fun visitClass(klass: FirClass, data: D): R { return visitStatement(klass, data) } @@ -288,6 +264,30 @@ abstract class FirVisitor { return visitLoop(whileLoop, data) } + open fun visitQualifiedAccess(qualifiedAccess: FirQualifiedAccess, data: D): R { + return visitStatement(qualifiedAccess, data) + } + + open fun visitAssignment(assignment: FirAssignment, data: D): R { + return visitQualifiedAccess(assignment, data) + } + + open fun visitVariableAssignment(variableAssignment: FirVariableAssignment, data: D): R { + return visitAssignment(variableAssignment, data) + } + + open fun visitModifiableQualifiedAccess(modifiableQualifiedAccess: FirModifiableQualifiedAccess, data: D): R { + return visitQualifiedAccess(modifiableQualifiedAccess, data) + } + + open fun visitQualifiedAccessExpression(qualifiedAccessExpression: FirQualifiedAccessExpression, data: D): R { + return visitQualifiedAccess(qualifiedAccessExpression, data) + } + + open fun visitCallableReferenceAccess(callableReferenceAccess: FirCallableReferenceAccess, data: D): R { + return visitQualifiedAccessExpression(callableReferenceAccess, data) + } + open fun visitTargetElement(targetElement: FirTargetElement, data: D): R { return visitElement(targetElement, data) } diff --git a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorVoidGenerated.kt b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorVoidGenerated.kt index c212ffa0cab..69be742b090 100644 --- a/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorVoidGenerated.kt +++ b/compiler/fir/tree/visitors/org/jetbrains/kotlin/fir/visitors/FirVisitorVoidGenerated.kt @@ -152,30 +152,6 @@ abstract class FirVisitorVoid : FirVisitor() { visitElement(statement, null) } - open fun visitAccess(access: FirAccess) { - visitStatement(access, null) - } - - open fun visitAccessExpression(accessExpression: FirAccessExpression) { - visitAccess(accessExpression, null) - } - - open fun visitCallableReferenceAccess(callableReferenceAccess: FirCallableReferenceAccess) { - visitAccessExpression(callableReferenceAccess, null) - } - - open fun visitAssignment(assignment: FirAssignment) { - visitAccess(assignment, null) - } - - open fun visitPropertyAssignment(propertyAssignment: FirPropertyAssignment) { - visitAssignment(propertyAssignment, null) - } - - open fun visitModifiableAccess(modifiableAccess: FirModifiableAccess) { - visitAccess(modifiableAccess, null) - } - open fun visitClass(klass: FirClass) { visitStatement(klass, null) } @@ -288,6 +264,30 @@ abstract class FirVisitorVoid : FirVisitor() { visitLoop(whileLoop, null) } + open fun visitQualifiedAccess(qualifiedAccess: FirQualifiedAccess) { + visitStatement(qualifiedAccess, null) + } + + open fun visitAssignment(assignment: FirAssignment) { + visitQualifiedAccess(assignment, null) + } + + open fun visitVariableAssignment(variableAssignment: FirVariableAssignment) { + visitAssignment(variableAssignment, null) + } + + open fun visitModifiableQualifiedAccess(modifiableQualifiedAccess: FirModifiableQualifiedAccess) { + visitQualifiedAccess(modifiableQualifiedAccess, null) + } + + open fun visitQualifiedAccessExpression(qualifiedAccessExpression: FirQualifiedAccessExpression) { + visitQualifiedAccess(qualifiedAccessExpression, null) + } + + open fun visitCallableReferenceAccess(callableReferenceAccess: FirCallableReferenceAccess) { + visitQualifiedAccessExpression(callableReferenceAccess, null) + } + open fun visitTargetElement(targetElement: FirTargetElement) { visitElement(targetElement, null) } @@ -352,14 +352,6 @@ abstract class FirVisitorVoid : FirVisitor() { visitElement(whenBranch, null) } - final override fun visitAccess(access: FirAccess, data: Nothing?) { - visitAccess(access) - } - - final override fun visitAccessExpression(accessExpression: FirAccessExpression, data: Nothing?) { - visitAccessExpression(accessExpression) - } - final override fun visitAnnotationCall(annotationCall: FirAnnotationCall, data: Nothing?) { visitAnnotationCall(annotationCall) } @@ -532,10 +524,6 @@ abstract class FirVisitorVoid : FirVisitor() { visitMemberDeclaration(memberDeclaration) } - final override fun visitModifiableAccess(modifiableAccess: FirModifiableAccess, data: Nothing?) { - visitModifiableAccess(modifiableAccess) - } - final override fun visitModifiableClass(modifiableClass: FirModifiableClass, data: Nothing?) { visitModifiableClass(modifiableClass) } @@ -544,6 +532,10 @@ abstract class FirVisitorVoid : FirVisitor() { visitModifiableFunction(modifiableFunction) } + final override fun visitModifiableQualifiedAccess(modifiableQualifiedAccess: FirModifiableQualifiedAccess, data: Nothing?) { + visitModifiableQualifiedAccess(modifiableQualifiedAccess) + } + final override fun visitNamedDeclaration(namedDeclaration: FirNamedDeclaration, data: Nothing?) { visitNamedDeclaration(namedDeclaration) } @@ -572,8 +564,12 @@ abstract class FirVisitorVoid : FirVisitor() { visitPropertyAccessor(propertyAccessor) } - final override fun visitPropertyAssignment(propertyAssignment: FirPropertyAssignment, data: Nothing?) { - visitPropertyAssignment(propertyAssignment) + final override fun visitQualifiedAccess(qualifiedAccess: FirQualifiedAccess, data: Nothing?) { + visitQualifiedAccess(qualifiedAccess) + } + + final override fun visitQualifiedAccessExpression(qualifiedAccessExpression: FirQualifiedAccessExpression, data: Nothing?) { + visitQualifiedAccessExpression(qualifiedAccessExpression) } final override fun visitReference(reference: FirReference, data: Nothing?) { @@ -676,6 +672,10 @@ abstract class FirVisitorVoid : FirVisitor() { visitVariable(variable) } + final override fun visitVariableAssignment(variableAssignment: FirVariableAssignment, data: Nothing?) { + visitVariableAssignment(variableAssignment) + } + final override fun visitWhenBranch(whenBranch: FirWhenBranch, data: Nothing?) { visitWhenBranch(whenBranch) }