[FIR] Add lValueTypeRef to FirVariableAssignment, fix tests with ASSIGNMENT_TYPE_MISMATCH
This commit is contained in:
committed by
TeamCityServer
parent
e57108d4e8
commit
c3b8f3e859
@@ -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
|
||||
|
||||
+2
@@ -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.*
|
||||
|
||||
/*
|
||||
|
||||
+9
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
+9
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
@@ -521,6 +521,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
||||
|
||||
variableAssignment.configure {
|
||||
+field("lValue", reference)
|
||||
+field("lValueTypeRef", typeRef).withReplace()
|
||||
+field("rValue", expression).withTransform()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user