[FIR] Get rid of operation in FirVariableAssignment

`FirVariableAssignment` is creates only for expressions `x = y`
For other assign operators there is a `FirOperatorCall`
This commit is contained in:
Dmitriy Novozhilov
2019-11-07 14:46:10 +03:00
parent b5210e6a9b
commit 18dc652404
9 changed files with 7 additions and 14 deletions
@@ -639,9 +639,7 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver
private fun FlowContent.generate(variableAssignment: FirVariableAssignment) {
generateReceiver(variableAssignment)
generate(variableAssignment.lValue)
+" "
+variableAssignment.operation.operator
+" "
+" = "
generate(variableAssignment.rValue)
}
@@ -471,8 +471,8 @@ abstract class BaseFirBuilder<T>(val session: FirSession, val context: Context =
arguments += value
}
}
return FirVariableAssignmentImpl(source, false, value, operation).apply {
require(operation == FirOperation.ASSIGN)
return FirVariableAssignmentImpl(source, false, value).apply {
lValue = initializeLValue(this@generateAssignment) { convert() as? FirQualifiedAccess }
}
}
@@ -246,7 +246,7 @@ class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransformer) :
operatorCallReference == null || (!lhsIsVar && !assignIsError) -> resolvedAssignCall.compose()
assignCallReference == null -> {
val assignment =
FirVariableAssignmentImpl(operatorCall.source, false, resolvedOperatorCall, FirOperation.ASSIGN).apply {
FirVariableAssignmentImpl(operatorCall.source, false, resolvedOperatorCall).apply {
lValue = if (lhsIsVar)
lhsReference!!
else
@@ -928,7 +928,7 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
visitQualifiedAccess(variableAssignment)
variableAssignment.lValue.accept(this)
print(" ")
visitAssignment(variableAssignment.operation, variableAssignment.rValue)
visitAssignment(FirOperation.ASSIGN, variableAssignment.rValue)
}
override fun visitArraySetCall(arraySetCall: FirArraySetCall) {
@@ -25,7 +25,6 @@ abstract class FirVariableAssignment : FirPureAbstractElement(), FirQualifiedAcc
abstract override val calleeReference: FirReference
abstract val lValue: FirReference
abstract val rValue: FirExpression
abstract val operation: FirOperation
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitVariableAssignment(this, data)
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.fir.expressions.impl
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.FirOperation
import org.jetbrains.kotlin.fir.expressions.FirVariableAssignment
import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement
import org.jetbrains.kotlin.fir.references.FirReference
@@ -22,8 +21,7 @@ import org.jetbrains.kotlin.fir.visitors.*
class FirVariableAssignmentImpl(
override val source: FirSourceElement?,
override var safe: Boolean,
override var rValue: FirExpression,
override var operation: FirOperation
override var rValue: FirExpression
) : FirVariableAssignment(), FirModifiableQualifiedAccess, FirAbstractAnnotatedElement {
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
override var explicitReceiver: FirExpression? = null
@@ -383,7 +383,6 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
impl(variableAssignment) {
parents += modifiableQualifiedAccess
isMutable("operation")
lateinit("calleeReference")
defaultNoReceivers()
@@ -439,7 +439,6 @@ object NodeConfigurator : AbstractFieldConfigurator() {
variableAssignment.configure {
+field("lValue", reference)
+field("rValue", expression).withTransform()
+field("operation", operationType)
}
whenSubjectExpression.configure {
@@ -445,7 +445,7 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
}
override fun visitVariableAssignment(variableAssignment: FirVariableAssignment, data: StringBuilder) {
data.append("qualified access: \"${variableAssignment.operation}\"")
data.append("variable assignment")
}
override fun visitStarProjection(starProjection: FirStarProjection, data: StringBuilder) {