FIR tree generator: merge fields from parents properly

This commit is contained in:
Mikhail Glukhikh
2021-03-15 12:41:16 +03:00
parent 7f7a964b2e
commit 06a80c0b34
22 changed files with 94 additions and 88 deletions
@@ -34,6 +34,7 @@ class FirIntegerOperatorCall @FirImplementationDetail constructor(
argumentList: FirArgumentList,
calleeReference: FirNamedReference,
) : FirFunctionCallImpl(
source,
typeRef,
annotations,
typeArguments,
@@ -42,7 +43,6 @@ class FirIntegerOperatorCall @FirImplementationDetail constructor(
extensionReceiver,
argumentList,
calleeReference,
source,
)
@FirBuilderDsl
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail
*/
abstract class FirCallableReferenceAccess : FirQualifiedAccessExpression() {
abstract override val source: FirSourceElement?
abstract override val typeRef: FirTypeRef
abstract override val annotations: List<FirAnnotationCall>
abstract override val typeArguments: List<FirTypeProjection>
@@ -27,10 +28,12 @@ abstract class FirCallableReferenceAccess : FirQualifiedAccessExpression() {
abstract override val extensionReceiver: FirExpression
abstract override val calleeReference: FirNamedReference
abstract val hasQuestionMarkAtLHS: Boolean
abstract override val source: FirSourceElement?
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitCallableReferenceAccess(this, data)
@FirImplementationDetail
abstract override fun replaceSource(newSource: FirSourceElement?)
abstract override fun replaceTypeRef(newTypeRef: FirTypeRef)
abstract override fun replaceTypeArguments(newTypeArguments: List<FirTypeProjection>)
@@ -43,9 +46,6 @@ abstract class FirCallableReferenceAccess : FirQualifiedAccessExpression() {
abstract fun replaceHasQuestionMarkAtLHS(newHasQuestionMarkAtLHS: Boolean)
@FirImplementationDetail
abstract override fun replaceSource(newSource: FirSourceElement?)
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirCallableReferenceAccess
abstract override fun <D> transformTypeArguments(transformer: FirTransformer<D>, data: D): FirCallableReferenceAccess
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail
*/
abstract class FirComponentCall : FirFunctionCall() {
abstract override val source: FirSourceElement?
abstract override val typeRef: FirTypeRef
abstract override val annotations: List<FirAnnotationCall>
abstract override val typeArguments: List<FirTypeProjection>
@@ -26,12 +27,14 @@ abstract class FirComponentCall : FirFunctionCall() {
abstract override val extensionReceiver: FirExpression
abstract override val argumentList: FirArgumentList
abstract override val calleeReference: FirNamedReference
abstract override val source: FirSourceElement?
abstract override val explicitReceiver: FirExpression
abstract val componentIndex: Int
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitComponentCall(this, data)
@FirImplementationDetail
abstract override fun replaceSource(newSource: FirSourceElement?)
abstract override fun replaceTypeRef(newTypeRef: FirTypeRef)
abstract override fun replaceTypeArguments(newTypeArguments: List<FirTypeProjection>)
@@ -42,9 +45,6 @@ abstract class FirComponentCall : FirFunctionCall() {
abstract override fun replaceCalleeReference(newCalleeReference: FirReference)
@FirImplementationDetail
abstract override fun replaceSource(newSource: FirSourceElement?)
abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?)
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirComponentCall
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail
*/
abstract class FirExpressionWithSmartcast : FirQualifiedAccessExpression() {
abstract override val source: FirSourceElement?
abstract override val typeRef: FirTypeRef
abstract override val annotations: List<FirAnnotationCall>
abstract override val calleeReference: FirReference
@@ -29,10 +30,12 @@ abstract class FirExpressionWithSmartcast : FirQualifiedAccessExpression() {
abstract val originalExpression: FirQualifiedAccessExpression
abstract val typesFromSmartCast: Collection<ConeKotlinType>
abstract val originalType: FirTypeRef
abstract override val source: FirSourceElement?
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitExpressionWithSmartcast(this, data)
@FirImplementationDetail
abstract override fun replaceSource(newSource: FirSourceElement?)
abstract override fun replaceTypeRef(newTypeRef: FirTypeRef)
abstract override fun replaceCalleeReference(newCalleeReference: FirReference)
@@ -41,9 +44,6 @@ abstract class FirExpressionWithSmartcast : FirQualifiedAccessExpression() {
abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?)
@FirImplementationDetail
abstract override fun replaceSource(newSource: FirSourceElement?)
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcast
abstract override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcast
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail
*/
abstract class FirFunctionCall : FirQualifiedAccessExpression(), FirCall {
abstract override val source: FirSourceElement?
abstract override val typeRef: FirTypeRef
abstract override val annotations: List<FirAnnotationCall>
abstract override val typeArguments: List<FirTypeProjection>
@@ -27,10 +28,12 @@ abstract class FirFunctionCall : FirQualifiedAccessExpression(), FirCall {
abstract override val extensionReceiver: FirExpression
abstract override val argumentList: FirArgumentList
abstract override val calleeReference: FirNamedReference
abstract override val source: FirSourceElement?
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitFunctionCall(this, data)
@FirImplementationDetail
abstract override fun replaceSource(newSource: FirSourceElement?)
abstract override fun replaceTypeRef(newTypeRef: FirTypeRef)
abstract override fun replaceTypeArguments(newTypeArguments: List<FirTypeProjection>)
@@ -43,9 +46,6 @@ abstract class FirFunctionCall : FirQualifiedAccessExpression(), FirCall {
abstract override fun replaceCalleeReference(newCalleeReference: FirReference)
@FirImplementationDetail
abstract override fun replaceSource(newSource: FirSourceElement?)
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirFunctionCall
abstract override fun <D> transformTypeArguments(transformer: FirTransformer<D>, data: D): FirFunctionCall
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail
*/
abstract class FirImplicitInvokeCall : FirFunctionCall() {
abstract override val source: FirSourceElement?
abstract override val typeRef: FirTypeRef
abstract override val annotations: List<FirAnnotationCall>
abstract override val typeArguments: List<FirTypeProjection>
@@ -27,10 +28,12 @@ abstract class FirImplicitInvokeCall : FirFunctionCall() {
abstract override val extensionReceiver: FirExpression
abstract override val argumentList: FirArgumentList
abstract override val calleeReference: FirNamedReference
abstract override val source: FirSourceElement?
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitImplicitInvokeCall(this, data)
@FirImplementationDetail
abstract override fun replaceSource(newSource: FirSourceElement?)
abstract override fun replaceTypeRef(newTypeRef: FirTypeRef)
abstract override fun replaceTypeArguments(newTypeArguments: List<FirTypeProjection>)
@@ -43,9 +46,6 @@ abstract class FirImplicitInvokeCall : FirFunctionCall() {
abstract override fun replaceCalleeReference(newCalleeReference: FirReference)
@FirImplementationDetail
abstract override fun replaceSource(newSource: FirSourceElement?)
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirImplicitInvokeCall
abstract override fun <D> transformTypeArguments(transformer: FirTransformer<D>, data: D): FirImplicitInvokeCall
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail
*/
abstract class FirQualifiedAccessExpression : FirExpression(), FirQualifiedAccess {
abstract override val source: FirSourceElement?
abstract override val typeRef: FirTypeRef
abstract override val annotations: List<FirAnnotationCall>
abstract override val calleeReference: FirReference
@@ -25,10 +26,12 @@ abstract class FirQualifiedAccessExpression : FirExpression(), FirQualifiedAcces
abstract override val explicitReceiver: FirExpression?
abstract override val dispatchReceiver: FirExpression
abstract override val extensionReceiver: FirExpression
abstract override val source: FirSourceElement?
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitQualifiedAccessExpression(this, data)
@FirImplementationDetail
abstract override fun replaceSource(newSource: FirSourceElement?)
abstract override fun replaceTypeRef(newTypeRef: FirTypeRef)
abstract override fun replaceCalleeReference(newCalleeReference: FirReference)
@@ -37,9 +40,6 @@ abstract class FirQualifiedAccessExpression : FirExpression(), FirQualifiedAcces
abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?)
@FirImplementationDetail
abstract override fun replaceSource(newSource: FirSourceElement?)
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirQualifiedAccessExpression
abstract override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirQualifiedAccessExpression
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail
*/
abstract class FirThisReceiverExpression : FirQualifiedAccessExpression() {
abstract override val source: FirSourceElement?
abstract override val typeRef: FirTypeRef
abstract override val annotations: List<FirAnnotationCall>
abstract override val typeArguments: List<FirTypeProjection>
@@ -26,10 +27,12 @@ abstract class FirThisReceiverExpression : FirQualifiedAccessExpression() {
abstract override val dispatchReceiver: FirExpression
abstract override val extensionReceiver: FirExpression
abstract override val calleeReference: FirThisReference
abstract override val source: FirSourceElement?
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitThisReceiverExpression(this, data)
@FirImplementationDetail
abstract override fun replaceSource(newSource: FirSourceElement?)
abstract override fun replaceTypeRef(newTypeRef: FirTypeRef)
abstract override fun replaceTypeArguments(newTypeArguments: List<FirTypeProjection>)
@@ -40,9 +43,6 @@ abstract class FirThisReceiverExpression : FirQualifiedAccessExpression() {
abstract override fun replaceCalleeReference(newCalleeReference: FirReference)
@FirImplementationDetail
abstract override fun replaceSource(newSource: FirSourceElement?)
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirThisReceiverExpression
abstract override fun <D> transformTypeArguments(transformer: FirTransformer<D>, data: D): FirThisReceiverExpression
@@ -31,6 +31,7 @@ import org.jetbrains.kotlin.fir.visitors.*
@FirBuilderDsl
class FirCallableReferenceAccessBuilder : FirQualifiedAccessBuilder, FirAnnotationContainerBuilder, FirExpressionBuilder {
override var source: FirSourceElement? = null
override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null)
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
override val typeArguments: MutableList<FirTypeProjection> = mutableListOf()
@@ -39,10 +40,10 @@ class FirCallableReferenceAccessBuilder : FirQualifiedAccessBuilder, FirAnnotati
override var extensionReceiver: FirExpression = FirNoReceiverExpression
lateinit var calleeReference: FirNamedReference
var hasQuestionMarkAtLHS: Boolean = false
override var source: FirSourceElement? = null
override fun build(): FirCallableReferenceAccess {
return FirCallableReferenceAccessImpl(
source,
typeRef,
annotations,
typeArguments,
@@ -51,7 +52,6 @@ class FirCallableReferenceAccessBuilder : FirQualifiedAccessBuilder, FirAnnotati
extensionReceiver,
calleeReference,
hasQuestionMarkAtLHS,
source,
)
}
@@ -35,23 +35,23 @@ import org.jetbrains.kotlin.name.Name
@FirBuilderDsl
class FirComponentCallBuilder : FirCallBuilder, FirAnnotationContainerBuilder, FirExpressionBuilder {
override var source: FirSourceElement? = null
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
val typeArguments: MutableList<FirTypeProjection> = mutableListOf()
var dispatchReceiver: FirExpression = FirNoReceiverExpression
var extensionReceiver: FirExpression = FirNoReceiverExpression
override var argumentList: FirArgumentList = FirEmptyArgumentList
override var source: FirSourceElement? = null
lateinit var explicitReceiver: FirExpression
var componentIndex: Int by kotlin.properties.Delegates.notNull<Int>()
override fun build(): FirComponentCall {
return FirComponentCallImpl(
source,
annotations,
typeArguments,
dispatchReceiver,
extensionReceiver,
argumentList,
source,
explicitReceiver,
componentIndex,
)
@@ -33,6 +33,7 @@ import org.jetbrains.kotlin.fir.visitors.*
@FirBuilderDsl
open class FirFunctionCallBuilder : FirAbstractFunctionCallBuilder, FirAnnotationContainerBuilder, FirExpressionBuilder {
override var source: FirSourceElement? = null
override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null)
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
override val typeArguments: MutableList<FirTypeProjection> = mutableListOf()
@@ -41,11 +42,11 @@ open class FirFunctionCallBuilder : FirAbstractFunctionCallBuilder, FirAnnotatio
override var extensionReceiver: FirExpression = FirNoReceiverExpression
override var argumentList: FirArgumentList = FirEmptyArgumentList
override lateinit var calleeReference: FirNamedReference
override var source: FirSourceElement? = null
@OptIn(FirImplementationDetail::class)
override fun build(): FirFunctionCall {
return FirFunctionCallImpl(
source,
typeRef,
annotations,
typeArguments,
@@ -54,7 +55,6 @@ open class FirFunctionCallBuilder : FirAbstractFunctionCallBuilder, FirAnnotatio
extensionReceiver,
argumentList,
calleeReference,
source,
)
}
@@ -33,6 +33,7 @@ import org.jetbrains.kotlin.fir.visitors.*
@FirBuilderDsl
open class FirImplicitInvokeCallBuilder : FirAbstractFunctionCallBuilder, FirAnnotationContainerBuilder, FirExpressionBuilder {
override var source: FirSourceElement? = null
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
override val typeArguments: MutableList<FirTypeProjection> = mutableListOf()
override var explicitReceiver: FirExpression? = null
@@ -40,10 +41,10 @@ open class FirImplicitInvokeCallBuilder : FirAbstractFunctionCallBuilder, FirAnn
override var extensionReceiver: FirExpression = FirNoReceiverExpression
override var argumentList: FirArgumentList = FirEmptyArgumentList
override lateinit var calleeReference: FirNamedReference
override var source: FirSourceElement? = null
override fun build(): FirImplicitInvokeCall {
return FirImplicitInvokeCallImpl(
source,
annotations,
typeArguments,
explicitReceiver,
@@ -51,7 +52,6 @@ open class FirImplicitInvokeCallBuilder : FirAbstractFunctionCallBuilder, FirAnn
extensionReceiver,
argumentList,
calleeReference,
source,
)
}
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.fir.visitors.*
@FirBuilderDsl
class FirQualifiedAccessExpressionBuilder : FirQualifiedAccessBuilder, FirAnnotationContainerBuilder, FirExpressionBuilder {
override var source: FirSourceElement? = null
override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null)
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
lateinit var calleeReference: FirReference
@@ -37,10 +38,10 @@ class FirQualifiedAccessExpressionBuilder : FirQualifiedAccessBuilder, FirAnnota
override var explicitReceiver: FirExpression? = null
override var dispatchReceiver: FirExpression = FirNoReceiverExpression
override var extensionReceiver: FirExpression = FirNoReceiverExpression
override var source: FirSourceElement? = null
override fun build(): FirQualifiedAccessExpression {
return FirQualifiedAccessExpressionImpl(
source,
typeRef,
annotations,
calleeReference,
@@ -48,7 +49,6 @@ class FirQualifiedAccessExpressionBuilder : FirQualifiedAccessBuilder, FirAnnota
explicitReceiver,
dispatchReceiver,
extensionReceiver,
source,
)
}
@@ -31,19 +31,19 @@ import org.jetbrains.kotlin.fir.visitors.*
@FirBuilderDsl
class FirThisReceiverExpressionBuilder : FirQualifiedAccessBuilder, FirAnnotationContainerBuilder, FirExpressionBuilder {
override var source: FirSourceElement? = null
override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null)
override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
override val typeArguments: MutableList<FirTypeProjection> = mutableListOf()
lateinit var calleeReference: FirThisReference
override var source: FirSourceElement? = null
override fun build(): FirThisReceiverExpression {
return FirThisReceiverExpressionImpl(
source,
typeRef,
annotations,
typeArguments,
calleeReference,
source,
)
}
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail
*/
internal class FirCallableReferenceAccessImpl(
override var source: FirSourceElement?,
override var typeRef: FirTypeRef,
override val annotations: MutableList<FirAnnotationCall>,
override val typeArguments: MutableList<FirTypeProjection>,
@@ -30,7 +31,6 @@ internal class FirCallableReferenceAccessImpl(
override var extensionReceiver: FirExpression,
override var calleeReference: FirNamedReference,
override var hasQuestionMarkAtLHS: Boolean,
override var source: FirSourceElement?,
) : FirCallableReferenceAccess() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
typeRef.accept(visitor, data)
@@ -91,6 +91,11 @@ internal class FirCallableReferenceAccessImpl(
return this
}
@FirImplementationDetail
override fun replaceSource(newSource: FirSourceElement?) {
source = newSource
}
override fun replaceTypeRef(newTypeRef: FirTypeRef) {
typeRef = newTypeRef
}
@@ -116,9 +121,4 @@ internal class FirCallableReferenceAccessImpl(
override fun replaceHasQuestionMarkAtLHS(newHasQuestionMarkAtLHS: Boolean) {
hasQuestionMarkAtLHS = newHasQuestionMarkAtLHS
}
@FirImplementationDetail
override fun replaceSource(newSource: FirSourceElement?) {
source = newSource
}
}
@@ -27,12 +27,12 @@ import org.jetbrains.kotlin.fir.visitors.*
@OptIn(FirImplementationDetail::class)
internal class FirComponentCallImpl(
override var source: FirSourceElement?,
override val annotations: MutableList<FirAnnotationCall>,
override val typeArguments: MutableList<FirTypeProjection>,
override var dispatchReceiver: FirExpression,
override var extensionReceiver: FirExpression,
override var argumentList: FirArgumentList,
override var source: FirSourceElement?,
override var explicitReceiver: FirExpression,
override val componentIndex: Int,
) : FirComponentCall() {
@@ -100,6 +100,11 @@ internal class FirComponentCallImpl(
return this
}
@FirImplementationDetail
override fun replaceSource(newSource: FirSourceElement?) {
source = newSource
}
override fun replaceTypeRef(newTypeRef: FirTypeRef) {
typeRef = newTypeRef
}
@@ -122,11 +127,6 @@ internal class FirComponentCallImpl(
replaceCalleeReference(newCalleeReference)
}
@FirImplementationDetail
override fun replaceSource(newSource: FirSourceElement?) {
source = newSource
}
override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?) {
require(newExplicitReceiver != null)
explicitReceiver = newExplicitReceiver
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.fir.visitors.*
*/
open class FirFunctionCallImpl @FirImplementationDetail constructor(
override var source: FirSourceElement?,
override var typeRef: FirTypeRef,
override val annotations: MutableList<FirAnnotationCall>,
override val typeArguments: MutableList<FirTypeProjection>,
@@ -31,7 +32,6 @@ open class FirFunctionCallImpl @FirImplementationDetail constructor(
override var extensionReceiver: FirExpression,
override var argumentList: FirArgumentList,
override var calleeReference: FirNamedReference,
override var source: FirSourceElement?,
) : FirFunctionCall() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
typeRef.accept(visitor, data)
@@ -94,6 +94,11 @@ open class FirFunctionCallImpl @FirImplementationDetail constructor(
return this
}
@FirImplementationDetail
override fun replaceSource(newSource: FirSourceElement?) {
source = newSource
}
override fun replaceTypeRef(newTypeRef: FirTypeRef) {
typeRef = newTypeRef
}
@@ -119,9 +124,4 @@ open class FirFunctionCallImpl @FirImplementationDetail constructor(
require(newCalleeReference is FirNamedReference)
replaceCalleeReference(newCalleeReference)
}
@FirImplementationDetail
override fun replaceSource(newSource: FirSourceElement?) {
source = newSource
}
}
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail
*/
internal class FirImplicitInvokeCallImpl(
override var source: FirSourceElement?,
override val annotations: MutableList<FirAnnotationCall>,
override val typeArguments: MutableList<FirTypeProjection>,
override var explicitReceiver: FirExpression?,
@@ -31,7 +32,6 @@ internal class FirImplicitInvokeCallImpl(
override var extensionReceiver: FirExpression,
override var argumentList: FirArgumentList,
override var calleeReference: FirNamedReference,
override var source: FirSourceElement?,
) : FirImplicitInvokeCall() {
override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null)
@@ -96,6 +96,11 @@ internal class FirImplicitInvokeCallImpl(
return this
}
@FirImplementationDetail
override fun replaceSource(newSource: FirSourceElement?) {
source = newSource
}
override fun replaceTypeRef(newTypeRef: FirTypeRef) {
typeRef = newTypeRef
}
@@ -121,9 +126,4 @@ internal class FirImplicitInvokeCallImpl(
require(newCalleeReference is FirNamedReference)
replaceCalleeReference(newCalleeReference)
}
@FirImplementationDetail
override fun replaceSource(newSource: FirSourceElement?) {
source = newSource
}
}
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail
*/
internal class FirQualifiedAccessExpressionImpl(
override var source: FirSourceElement?,
override var typeRef: FirTypeRef,
override val annotations: MutableList<FirAnnotationCall>,
override var calleeReference: FirReference,
@@ -28,7 +29,6 @@ internal class FirQualifiedAccessExpressionImpl(
override var explicitReceiver: FirExpression?,
override var dispatchReceiver: FirExpression,
override var extensionReceiver: FirExpression,
override var source: FirSourceElement?,
) : FirQualifiedAccessExpression() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
typeRef.accept(visitor, data)
@@ -89,6 +89,11 @@ internal class FirQualifiedAccessExpressionImpl(
return this
}
@FirImplementationDetail
override fun replaceSource(newSource: FirSourceElement?) {
source = newSource
}
override fun replaceTypeRef(newTypeRef: FirTypeRef) {
typeRef = newTypeRef
}
@@ -105,9 +110,4 @@ internal class FirQualifiedAccessExpressionImpl(
override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?) {
explicitReceiver = newExplicitReceiver
}
@FirImplementationDetail
override fun replaceSource(newSource: FirSourceElement?) {
source = newSource
}
}
@@ -23,11 +23,11 @@ import org.jetbrains.kotlin.fir.FirImplementationDetail
*/
internal class FirThisReceiverExpressionImpl(
override var source: FirSourceElement?,
override var typeRef: FirTypeRef,
override val annotations: MutableList<FirAnnotationCall>,
override val typeArguments: MutableList<FirTypeProjection>,
override var calleeReference: FirThisReference,
override var source: FirSourceElement?,
) : FirThisReceiverExpression() {
override var explicitReceiver: FirExpression? = null
override var dispatchReceiver: FirExpression = FirNoReceiverExpression
@@ -92,6 +92,11 @@ internal class FirThisReceiverExpressionImpl(
return this
}
@FirImplementationDetail
override fun replaceSource(newSource: FirSourceElement?) {
source = newSource
}
override fun replaceTypeRef(newTypeRef: FirTypeRef) {
typeRef = newTypeRef
}
@@ -113,9 +118,4 @@ internal class FirThisReceiverExpressionImpl(
require(newCalleeReference is FirThisReference)
replaceCalleeReference(newCalleeReference)
}
@FirImplementationDetail
override fun replaceSource(newSource: FirSourceElement?) {
source = newSource
}
}
@@ -204,13 +204,8 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
+field("value", "T", null)
}
qualifiedAccessExpression.configure {
+field("source", sourceElementType, nullable = true, withReplace = true)
}
functionCall.configure {
+field("calleeReference", namedReference)
+field("source", sourceElementType, nullable = true, withReplace = true)
}
comparisonExpression.configure {
@@ -457,7 +452,6 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
+field("originalExpression", qualifiedAccessExpression)
+field("typesFromSmartCast", "Collection<ConeKotlinType>", null, customType = coneKotlinTypeType)
+field("originalType", typeRef)
+field("source", sourceElementType, nullable = true, withReplace = true)
}
safeCallExpression.configure {
@@ -475,7 +469,6 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
callableReferenceAccess.configure {
+field("calleeReference", namedReference, withReplace = true).withTransform()
+booleanField("hasQuestionMarkAtLHS", withReplace = true)
+field("source", sourceElementType, nullable = true, withReplace = true)
}
getClassCall.configure {
@@ -591,7 +584,6 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
thisReceiverExpression.configure {
+field("calleeReference", thisReference)
+field("source", sourceElementType, nullable = true, withReplace = true)
}
whenExpression.configure {
@@ -104,7 +104,7 @@ class Element(val name: String, kind: Kind) : AbstractElement {
}
val parentFields: List<Field> by lazy {
val result = LinkedHashSet<Field>()
val result = LinkedHashMap<String, Field>()
parents.forEach { parent ->
val fields = parent.allFields.map { field ->
val copy = (field as? SimpleField)?.let { simpleField ->
@@ -119,9 +119,23 @@ class Element(val name: String, kind: Kind) : AbstractElement {
fromParent = true
}
}
result.addAll(fields)
fields.forEach {
result.merge(it.name, it) { previousField, thisField ->
val resultField = previousField.copy()
if (thisField.withReplace) {
resultField.withReplace = true
}
if (thisField.useNullableForReplace) {
resultField.useNullableForReplace = true
}
if (thisField.isMutable) {
resultField.isMutable = true
}
resultField
}
}
}
result.toList()
result.values.toList()
}
override val allFirFields: List<Field> by lazy {