[FIR] Add lValueTypeRef to FirVariableAssignment, fix tests with ASSIGNMENT_TYPE_MISMATCH

This commit is contained in:
Ivan Kochurkin
2021-05-13 17:06:04 +03:00
committed by TeamCityServer
parent e57108d4e8
commit c3b8f3e859
28 changed files with 127 additions and 87 deletions
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.FirPureAbstractElement
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.types.FirTypeProjection
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.fir.FirImplementationDetail
@@ -27,6 +28,7 @@ abstract class FirVariableAssignment : FirPureAbstractElement(), FirQualifiedAcc
abstract override val extensionReceiver: FirExpression
abstract override val source: FirSourceElement?
abstract val lValue: FirReference
abstract val lValueTypeRef: FirTypeRef
abstract val rValue: FirExpression
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitVariableAssignment(this, data)
@@ -44,6 +46,8 @@ abstract class FirVariableAssignment : FirPureAbstractElement(), FirQualifiedAcc
@FirImplementationDetail
abstract override fun replaceSource(newSource: FirSourceElement?)
abstract fun replaceLValueTypeRef(newLValueTypeRef: FirTypeRef)
abstract override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirVariableAssignment
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirVariableAssignment
@@ -18,6 +18,8 @@ import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression
import org.jetbrains.kotlin.fir.expressions.impl.FirVariableAssignmentImpl
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.types.FirTypeProjection
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl
import org.jetbrains.kotlin.fir.visitors.*
/*
@@ -11,6 +11,8 @@ import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.FirVariableAssignment
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.types.FirTypeProjection
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl
import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.fir.FirImplementationDetail
@@ -34,6 +36,7 @@ internal class FirVariableAssignmentImpl(
set(value) {
calleeReference = value
}
override var lValueTypeRef: FirTypeRef = FirImplicitTypeRefImpl(null)
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
calleeReference.accept(visitor, data)
@@ -46,6 +49,7 @@ internal class FirVariableAssignmentImpl(
if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) {
extensionReceiver.accept(visitor, data)
}
lValueTypeRef.accept(visitor, data)
rValue.accept(visitor, data)
}
@@ -60,6 +64,7 @@ internal class FirVariableAssignmentImpl(
if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) {
extensionReceiver = extensionReceiver.transform(transformer, data)
}
lValueTypeRef = lValueTypeRef.transform(transformer, data)
transformRValue(transformer, data)
return this
}
@@ -116,4 +121,8 @@ internal class FirVariableAssignmentImpl(
override fun replaceSource(newSource: FirSourceElement?) {
source = newSource
}
override fun replaceLValueTypeRef(newLValueTypeRef: FirTypeRef) {
lValueTypeRef = newLValueTypeRef
}
}
@@ -495,5 +495,14 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
default(it, "FirImplicitTypeRefImpl(null)")
useTypes(implicitTypeRefType)
}
configureFieldInAllImplementations(
field = "lValueTypeRef",
implementationPredicate = { it.type in "FirVariableAssignmentImpl" },
fieldPredicate = { it.defaultValueInImplementation == null }
) {
default(it, "FirImplicitTypeRefImpl(null)")
useTypes(implicitTypeRefType)
}
}
}
@@ -521,6 +521,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
variableAssignment.configure {
+field("lValue", reference)
+field("lValueTypeRef", typeRef).withReplace()
+field("rValue", expression).withTransform()
}