FIR tree: add context receivers helper properties

This commit is contained in:
Denis.Zharkov
2022-03-17 13:30:56 +03:00
committed by teamcity
parent 202413c2f4
commit c33f06b9e4
39 changed files with 130 additions and 0 deletions
@@ -27,6 +27,7 @@ abstract class FirCallableReferenceAccess : FirQualifiedAccessExpression() {
abstract override val explicitReceiver: FirExpression? abstract override val explicitReceiver: FirExpression?
abstract override val dispatchReceiver: FirExpression abstract override val dispatchReceiver: FirExpression
abstract override val extensionReceiver: FirExpression abstract override val extensionReceiver: FirExpression
abstract override val contextReceiverArguments: List<FirExpression>
abstract override val calleeReference: FirNamedReference abstract override val calleeReference: FirNamedReference
abstract val hasQuestionMarkAtLHS: Boolean abstract val hasQuestionMarkAtLHS: Boolean
@@ -45,6 +46,8 @@ abstract class FirCallableReferenceAccess : FirQualifiedAccessExpression() {
abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?) abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?)
abstract override fun replaceContextReceiverArguments(newContextReceiverArguments: List<FirExpression>)
abstract fun replaceCalleeReference(newCalleeReference: FirNamedReference) abstract fun replaceCalleeReference(newCalleeReference: FirNamedReference)
abstract override fun replaceCalleeReference(newCalleeReference: FirReference) abstract override fun replaceCalleeReference(newCalleeReference: FirReference)
@@ -26,6 +26,7 @@ abstract class FirComponentCall : FirFunctionCall() {
abstract override val typeArguments: List<FirTypeProjection> abstract override val typeArguments: List<FirTypeProjection>
abstract override val dispatchReceiver: FirExpression abstract override val dispatchReceiver: FirExpression
abstract override val extensionReceiver: FirExpression abstract override val extensionReceiver: FirExpression
abstract override val contextReceiverArguments: List<FirExpression>
abstract override val argumentList: FirArgumentList abstract override val argumentList: FirArgumentList
abstract override val calleeReference: FirNamedReference abstract override val calleeReference: FirNamedReference
abstract override val origin: FirFunctionCallOrigin abstract override val origin: FirFunctionCallOrigin
@@ -45,6 +46,8 @@ abstract class FirComponentCall : FirFunctionCall() {
abstract override fun replaceTypeArguments(newTypeArguments: List<FirTypeProjection>) abstract override fun replaceTypeArguments(newTypeArguments: List<FirTypeProjection>)
abstract override fun replaceContextReceiverArguments(newContextReceiverArguments: List<FirExpression>)
abstract override fun replaceArgumentList(newArgumentList: FirArgumentList) abstract override fun replaceArgumentList(newArgumentList: FirArgumentList)
abstract override fun replaceCalleeReference(newCalleeReference: FirNamedReference) abstract override fun replaceCalleeReference(newCalleeReference: FirNamedReference)
@@ -29,6 +29,7 @@ abstract class FirExpressionWithSmartcast : FirQualifiedAccessExpression(), FirW
abstract override val explicitReceiver: FirExpression? abstract override val explicitReceiver: FirExpression?
abstract override val dispatchReceiver: FirExpression abstract override val dispatchReceiver: FirExpression
abstract override val extensionReceiver: FirExpression abstract override val extensionReceiver: FirExpression
abstract override val contextReceiverArguments: List<FirExpression>
abstract override val originalExpression: FirQualifiedAccessExpression abstract override val originalExpression: FirQualifiedAccessExpression
abstract override val typesFromSmartCast: Collection<ConeKotlinType> abstract override val typesFromSmartCast: Collection<ConeKotlinType>
abstract override val originalType: FirTypeRef abstract override val originalType: FirTypeRef
@@ -53,6 +54,8 @@ abstract class FirExpressionWithSmartcast : FirQualifiedAccessExpression(), FirW
abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?) abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?)
abstract override fun replaceContextReceiverArguments(newContextReceiverArguments: List<FirExpression>)
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcast abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcast
abstract override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcast abstract override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcast
@@ -29,6 +29,7 @@ abstract class FirExpressionWithSmartcastToNull : FirExpressionWithSmartcast(),
abstract override val explicitReceiver: FirExpression? abstract override val explicitReceiver: FirExpression?
abstract override val dispatchReceiver: FirExpression abstract override val dispatchReceiver: FirExpression
abstract override val extensionReceiver: FirExpression abstract override val extensionReceiver: FirExpression
abstract override val contextReceiverArguments: List<FirExpression>
abstract override val originalExpression: FirQualifiedAccessExpression abstract override val originalExpression: FirQualifiedAccessExpression
abstract override val typesFromSmartCast: Collection<ConeKotlinType> abstract override val typesFromSmartCast: Collection<ConeKotlinType>
abstract override val originalType: FirTypeRef abstract override val originalType: FirTypeRef
@@ -54,6 +55,8 @@ abstract class FirExpressionWithSmartcastToNull : FirExpressionWithSmartcast(),
abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?) abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?)
abstract override fun replaceContextReceiverArguments(newContextReceiverArguments: List<FirExpression>)
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcastToNull abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcastToNull
abstract override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcastToNull abstract override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcastToNull
@@ -27,6 +27,7 @@ abstract class FirFunctionCall : FirQualifiedAccessExpression(), FirCall {
abstract override val explicitReceiver: FirExpression? abstract override val explicitReceiver: FirExpression?
abstract override val dispatchReceiver: FirExpression abstract override val dispatchReceiver: FirExpression
abstract override val extensionReceiver: FirExpression abstract override val extensionReceiver: FirExpression
abstract override val contextReceiverArguments: List<FirExpression>
abstract override val argumentList: FirArgumentList abstract override val argumentList: FirArgumentList
abstract override val calleeReference: FirNamedReference abstract override val calleeReference: FirNamedReference
abstract val origin: FirFunctionCallOrigin abstract val origin: FirFunctionCallOrigin
@@ -46,6 +47,8 @@ abstract class FirFunctionCall : FirQualifiedAccessExpression(), FirCall {
abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?) abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?)
abstract override fun replaceContextReceiverArguments(newContextReceiverArguments: List<FirExpression>)
abstract override fun replaceArgumentList(newArgumentList: FirArgumentList) abstract override fun replaceArgumentList(newArgumentList: FirArgumentList)
abstract fun replaceCalleeReference(newCalleeReference: FirNamedReference) abstract fun replaceCalleeReference(newCalleeReference: FirNamedReference)
@@ -27,6 +27,7 @@ abstract class FirImplicitInvokeCall : FirFunctionCall() {
abstract override val explicitReceiver: FirExpression? abstract override val explicitReceiver: FirExpression?
abstract override val dispatchReceiver: FirExpression abstract override val dispatchReceiver: FirExpression
abstract override val extensionReceiver: FirExpression abstract override val extensionReceiver: FirExpression
abstract override val contextReceiverArguments: List<FirExpression>
abstract override val argumentList: FirArgumentList abstract override val argumentList: FirArgumentList
abstract override val calleeReference: FirNamedReference abstract override val calleeReference: FirNamedReference
abstract override val origin: FirFunctionCallOrigin abstract override val origin: FirFunctionCallOrigin
@@ -46,6 +47,8 @@ abstract class FirImplicitInvokeCall : FirFunctionCall() {
abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?) abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?)
abstract override fun replaceContextReceiverArguments(newContextReceiverArguments: List<FirExpression>)
abstract override fun replaceArgumentList(newArgumentList: FirArgumentList) abstract override fun replaceArgumentList(newArgumentList: FirArgumentList)
abstract override fun replaceCalleeReference(newCalleeReference: FirNamedReference) abstract override fun replaceCalleeReference(newCalleeReference: FirNamedReference)
@@ -27,6 +27,7 @@ abstract class FirIntegerLiteralOperatorCall : FirFunctionCall() {
abstract override val explicitReceiver: FirExpression? abstract override val explicitReceiver: FirExpression?
abstract override val dispatchReceiver: FirExpression abstract override val dispatchReceiver: FirExpression
abstract override val extensionReceiver: FirExpression abstract override val extensionReceiver: FirExpression
abstract override val contextReceiverArguments: List<FirExpression>
abstract override val argumentList: FirArgumentList abstract override val argumentList: FirArgumentList
abstract override val calleeReference: FirNamedReference abstract override val calleeReference: FirNamedReference
abstract override val origin: FirFunctionCallOrigin abstract override val origin: FirFunctionCallOrigin
@@ -46,6 +47,8 @@ abstract class FirIntegerLiteralOperatorCall : FirFunctionCall() {
abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?) abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?)
abstract override fun replaceContextReceiverArguments(newContextReceiverArguments: List<FirExpression>)
abstract override fun replaceArgumentList(newArgumentList: FirArgumentList) abstract override fun replaceArgumentList(newArgumentList: FirArgumentList)
abstract override fun replaceCalleeReference(newCalleeReference: FirNamedReference) abstract override fun replaceCalleeReference(newCalleeReference: FirNamedReference)
@@ -28,6 +28,7 @@ abstract class FirPropertyAccessExpression : FirQualifiedAccessExpression() {
abstract override val explicitReceiver: FirExpression? abstract override val explicitReceiver: FirExpression?
abstract override val dispatchReceiver: FirExpression abstract override val dispatchReceiver: FirExpression
abstract override val extensionReceiver: FirExpression abstract override val extensionReceiver: FirExpression
abstract override val contextReceiverArguments: List<FirExpression>
abstract val nonFatalDiagnostics: List<ConeDiagnostic> abstract val nonFatalDiagnostics: List<ConeDiagnostic>
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitPropertyAccessExpression(this, data) override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitPropertyAccessExpression(this, data)
@@ -47,6 +48,8 @@ abstract class FirPropertyAccessExpression : FirQualifiedAccessExpression() {
abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?) abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?)
abstract override fun replaceContextReceiverArguments(newContextReceiverArguments: List<FirExpression>)
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirPropertyAccessExpression abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirPropertyAccessExpression
abstract override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirPropertyAccessExpression abstract override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirPropertyAccessExpression
@@ -25,6 +25,7 @@ interface FirQualifiedAccess : FirResolvable, FirStatement {
val dispatchReceiver: FirExpression val dispatchReceiver: FirExpression
val extensionReceiver: FirExpression val extensionReceiver: FirExpression
override val source: KtSourceElement? override val source: KtSourceElement?
val contextReceiverArguments: List<FirExpression>
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitQualifiedAccess(this, data) override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitQualifiedAccess(this, data)
@@ -41,6 +42,8 @@ interface FirQualifiedAccess : FirResolvable, FirStatement {
@FirImplementationDetail @FirImplementationDetail
fun replaceSource(newSource: KtSourceElement?) fun replaceSource(newSource: KtSourceElement?)
fun replaceContextReceiverArguments(newContextReceiverArguments: List<FirExpression>)
override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirQualifiedAccess override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirQualifiedAccess
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirQualifiedAccess override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirQualifiedAccess
@@ -27,6 +27,7 @@ abstract class FirQualifiedAccessExpression : FirExpression(), FirQualifiedAcces
abstract override val explicitReceiver: FirExpression? abstract override val explicitReceiver: FirExpression?
abstract override val dispatchReceiver: FirExpression abstract override val dispatchReceiver: FirExpression
abstract override val extensionReceiver: FirExpression abstract override val extensionReceiver: FirExpression
abstract override val contextReceiverArguments: List<FirExpression>
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitQualifiedAccessExpression(this, data) override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitQualifiedAccessExpression(this, data)
@@ -45,6 +46,8 @@ abstract class FirQualifiedAccessExpression : FirExpression(), FirQualifiedAcces
abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?) abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?)
abstract override fun replaceContextReceiverArguments(newContextReceiverArguments: List<FirExpression>)
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirQualifiedAccessExpression abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirQualifiedAccessExpression
abstract override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirQualifiedAccessExpression abstract override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirQualifiedAccessExpression
@@ -27,6 +27,7 @@ abstract class FirThisReceiverExpression : FirQualifiedAccessExpression() {
abstract override val explicitReceiver: FirExpression? abstract override val explicitReceiver: FirExpression?
abstract override val dispatchReceiver: FirExpression abstract override val dispatchReceiver: FirExpression
abstract override val extensionReceiver: FirExpression abstract override val extensionReceiver: FirExpression
abstract override val contextReceiverArguments: List<FirExpression>
abstract override val calleeReference: FirThisReference abstract override val calleeReference: FirThisReference
abstract val isImplicit: Boolean abstract val isImplicit: Boolean
@@ -45,6 +46,8 @@ abstract class FirThisReceiverExpression : FirQualifiedAccessExpression() {
abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?) abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?)
abstract override fun replaceContextReceiverArguments(newContextReceiverArguments: List<FirExpression>)
abstract fun replaceCalleeReference(newCalleeReference: FirThisReference) abstract fun replaceCalleeReference(newCalleeReference: FirThisReference)
abstract override fun replaceCalleeReference(newCalleeReference: FirReference) abstract override fun replaceCalleeReference(newCalleeReference: FirReference)
@@ -27,6 +27,7 @@ abstract class FirVariableAssignment : FirPureAbstractElement(), FirQualifiedAcc
abstract override val dispatchReceiver: FirExpression abstract override val dispatchReceiver: FirExpression
abstract override val extensionReceiver: FirExpression abstract override val extensionReceiver: FirExpression
abstract override val source: KtSourceElement? abstract override val source: KtSourceElement?
abstract override val contextReceiverArguments: List<FirExpression>
abstract val lValue: FirReference abstract val lValue: FirReference
abstract val lValueTypeRef: FirTypeRef abstract val lValueTypeRef: FirTypeRef
abstract val rValue: FirExpression abstract val rValue: FirExpression
@@ -46,6 +47,8 @@ abstract class FirVariableAssignment : FirPureAbstractElement(), FirQualifiedAcc
@FirImplementationDetail @FirImplementationDetail
abstract override fun replaceSource(newSource: KtSourceElement?) abstract override fun replaceSource(newSource: KtSourceElement?)
abstract override fun replaceContextReceiverArguments(newContextReceiverArguments: List<FirExpression>)
abstract fun replaceLValueTypeRef(newLValueTypeRef: FirTypeRef) abstract fun replaceLValueTypeRef(newLValueTypeRef: FirTypeRef)
abstract override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirVariableAssignment abstract override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirVariableAssignment
@@ -32,6 +32,7 @@ interface FirAbstractFunctionCallBuilder : FirQualifiedAccessBuilder, FirCallBui
abstract override var dispatchReceiver: FirExpression abstract override var dispatchReceiver: FirExpression
abstract override var extensionReceiver: FirExpression abstract override var extensionReceiver: FirExpression
abstract override var source: KtSourceElement? abstract override var source: KtSourceElement?
abstract override val contextReceiverArguments: MutableList<FirExpression>
abstract override var argumentList: FirArgumentList abstract override var argumentList: FirArgumentList
abstract var typeRef: FirTypeRef abstract var typeRef: FirTypeRef
abstract var calleeReference: FirNamedReference abstract var calleeReference: FirNamedReference
@@ -38,6 +38,7 @@ class FirCallableReferenceAccessBuilder : FirQualifiedAccessBuilder, FirAnnotati
override var explicitReceiver: FirExpression? = null override var explicitReceiver: FirExpression? = null
override var dispatchReceiver: FirExpression = FirNoReceiverExpression override var dispatchReceiver: FirExpression = FirNoReceiverExpression
override var extensionReceiver: FirExpression = FirNoReceiverExpression override var extensionReceiver: FirExpression = FirNoReceiverExpression
override val contextReceiverArguments: MutableList<FirExpression> = mutableListOf()
lateinit var calleeReference: FirNamedReference lateinit var calleeReference: FirNamedReference
var hasQuestionMarkAtLHS: Boolean = false var hasQuestionMarkAtLHS: Boolean = false
@@ -50,6 +51,7 @@ class FirCallableReferenceAccessBuilder : FirQualifiedAccessBuilder, FirAnnotati
explicitReceiver, explicitReceiver,
dispatchReceiver, dispatchReceiver,
extensionReceiver, extensionReceiver,
contextReceiverArguments,
calleeReference, calleeReference,
hasQuestionMarkAtLHS, hasQuestionMarkAtLHS,
) )
@@ -41,6 +41,7 @@ class FirComponentCallBuilder : FirCallBuilder, FirAnnotationContainerBuilder, F
val typeArguments: MutableList<FirTypeProjection> = mutableListOf() val typeArguments: MutableList<FirTypeProjection> = mutableListOf()
var dispatchReceiver: FirExpression = FirNoReceiverExpression var dispatchReceiver: FirExpression = FirNoReceiverExpression
var extensionReceiver: FirExpression = FirNoReceiverExpression var extensionReceiver: FirExpression = FirNoReceiverExpression
val contextReceiverArguments: MutableList<FirExpression> = mutableListOf()
override var argumentList: FirArgumentList = FirEmptyArgumentList override var argumentList: FirArgumentList = FirEmptyArgumentList
lateinit var explicitReceiver: FirExpression lateinit var explicitReceiver: FirExpression
var componentIndex: Int by kotlin.properties.Delegates.notNull<Int>() var componentIndex: Int by kotlin.properties.Delegates.notNull<Int>()
@@ -52,6 +53,7 @@ class FirComponentCallBuilder : FirCallBuilder, FirAnnotationContainerBuilder, F
typeArguments, typeArguments,
dispatchReceiver, dispatchReceiver,
extensionReceiver, extensionReceiver,
contextReceiverArguments,
argumentList, argumentList,
explicitReceiver, explicitReceiver,
componentIndex, componentIndex,
@@ -41,6 +41,7 @@ open class FirFunctionCallBuilder : FirAbstractFunctionCallBuilder, FirAnnotatio
override var explicitReceiver: FirExpression? = null override var explicitReceiver: FirExpression? = null
override var dispatchReceiver: FirExpression = FirNoReceiverExpression override var dispatchReceiver: FirExpression = FirNoReceiverExpression
override var extensionReceiver: FirExpression = FirNoReceiverExpression override var extensionReceiver: FirExpression = FirNoReceiverExpression
override val contextReceiverArguments: MutableList<FirExpression> = mutableListOf()
override var argumentList: FirArgumentList = FirEmptyArgumentList override var argumentList: FirArgumentList = FirEmptyArgumentList
override lateinit var calleeReference: FirNamedReference override lateinit var calleeReference: FirNamedReference
override var origin: FirFunctionCallOrigin = FirFunctionCallOrigin.Regular override var origin: FirFunctionCallOrigin = FirFunctionCallOrigin.Regular
@@ -55,6 +56,7 @@ open class FirFunctionCallBuilder : FirAbstractFunctionCallBuilder, FirAnnotatio
explicitReceiver, explicitReceiver,
dispatchReceiver, dispatchReceiver,
extensionReceiver, extensionReceiver,
contextReceiverArguments,
argumentList, argumentList,
calleeReference, calleeReference,
origin, origin,
@@ -40,6 +40,7 @@ open class FirImplicitInvokeCallBuilder : FirAbstractFunctionCallBuilder, FirAnn
override var explicitReceiver: FirExpression? = null override var explicitReceiver: FirExpression? = null
override var dispatchReceiver: FirExpression = FirNoReceiverExpression override var dispatchReceiver: FirExpression = FirNoReceiverExpression
override var extensionReceiver: FirExpression = FirNoReceiverExpression override var extensionReceiver: FirExpression = FirNoReceiverExpression
override val contextReceiverArguments: MutableList<FirExpression> = mutableListOf()
override var argumentList: FirArgumentList = FirEmptyArgumentList override var argumentList: FirArgumentList = FirEmptyArgumentList
override lateinit var calleeReference: FirNamedReference override lateinit var calleeReference: FirNamedReference
@@ -51,6 +52,7 @@ open class FirImplicitInvokeCallBuilder : FirAbstractFunctionCallBuilder, FirAnn
explicitReceiver, explicitReceiver,
dispatchReceiver, dispatchReceiver,
extensionReceiver, extensionReceiver,
contextReceiverArguments,
argumentList, argumentList,
calleeReference, calleeReference,
) )
@@ -40,6 +40,7 @@ open class FirIntegerLiteralOperatorCallBuilder : FirAbstractFunctionCallBuilder
override var explicitReceiver: FirExpression? = null override var explicitReceiver: FirExpression? = null
override var dispatchReceiver: FirExpression = FirNoReceiverExpression override var dispatchReceiver: FirExpression = FirNoReceiverExpression
override var extensionReceiver: FirExpression = FirNoReceiverExpression override var extensionReceiver: FirExpression = FirNoReceiverExpression
override val contextReceiverArguments: MutableList<FirExpression> = mutableListOf()
override var argumentList: FirArgumentList = FirEmptyArgumentList override var argumentList: FirArgumentList = FirEmptyArgumentList
override lateinit var calleeReference: FirNamedReference override lateinit var calleeReference: FirNamedReference
override lateinit var origin: FirFunctionCallOrigin override lateinit var origin: FirFunctionCallOrigin
@@ -53,6 +54,7 @@ open class FirIntegerLiteralOperatorCallBuilder : FirAbstractFunctionCallBuilder
explicitReceiver, explicitReceiver,
dispatchReceiver, dispatchReceiver,
extensionReceiver, extensionReceiver,
contextReceiverArguments,
argumentList, argumentList,
calleeReference, calleeReference,
origin, origin,
@@ -39,6 +39,7 @@ class FirPropertyAccessExpressionBuilder : FirQualifiedAccessBuilder, FirAnnotat
override var explicitReceiver: FirExpression? = null override var explicitReceiver: FirExpression? = null
override var dispatchReceiver: FirExpression = FirNoReceiverExpression override var dispatchReceiver: FirExpression = FirNoReceiverExpression
override var extensionReceiver: FirExpression = FirNoReceiverExpression override var extensionReceiver: FirExpression = FirNoReceiverExpression
override val contextReceiverArguments: MutableList<FirExpression> = mutableListOf()
val nonFatalDiagnostics: MutableList<ConeDiagnostic> = mutableListOf() val nonFatalDiagnostics: MutableList<ConeDiagnostic> = mutableListOf()
@OptIn(FirImplementationDetail::class) @OptIn(FirImplementationDetail::class)
@@ -52,6 +53,7 @@ class FirPropertyAccessExpressionBuilder : FirQualifiedAccessBuilder, FirAnnotat
explicitReceiver, explicitReceiver,
dispatchReceiver, dispatchReceiver,
extensionReceiver, extensionReceiver,
contextReceiverArguments,
nonFatalDiagnostics, nonFatalDiagnostics,
) )
} }
@@ -26,5 +26,7 @@ interface FirQualifiedAccessBuilder {
abstract var dispatchReceiver: FirExpression abstract var dispatchReceiver: FirExpression
abstract var extensionReceiver: FirExpression abstract var extensionReceiver: FirExpression
abstract var source: KtSourceElement? abstract var source: KtSourceElement?
abstract val contextReceiverArguments: MutableList<FirExpression>
fun build(): FirQualifiedAccess fun build(): FirQualifiedAccess
} }
@@ -35,6 +35,7 @@ class FirThisReceiverExpressionBuilder : FirQualifiedAccessBuilder, FirAnnotatio
override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null) override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null)
override val annotations: MutableList<FirAnnotation> = mutableListOf() override val annotations: MutableList<FirAnnotation> = mutableListOf()
override val typeArguments: MutableList<FirTypeProjection> = mutableListOf() override val typeArguments: MutableList<FirTypeProjection> = mutableListOf()
override val contextReceiverArguments: MutableList<FirExpression> = mutableListOf()
lateinit var calleeReference: FirThisReference lateinit var calleeReference: FirThisReference
var isImplicit: Boolean = false var isImplicit: Boolean = false
@@ -44,6 +45,7 @@ class FirThisReceiverExpressionBuilder : FirQualifiedAccessBuilder, FirAnnotatio
typeRef, typeRef,
annotations, annotations,
typeArguments, typeArguments,
contextReceiverArguments,
calleeReference, calleeReference,
isImplicit, isImplicit,
) )
@@ -36,6 +36,7 @@ class FirVariableAssignmentBuilder : FirQualifiedAccessBuilder, FirAnnotationCon
override var dispatchReceiver: FirExpression = FirNoReceiverExpression override var dispatchReceiver: FirExpression = FirNoReceiverExpression
override var extensionReceiver: FirExpression = FirNoReceiverExpression override var extensionReceiver: FirExpression = FirNoReceiverExpression
override var source: KtSourceElement? = null override var source: KtSourceElement? = null
override val contextReceiverArguments: MutableList<FirExpression> = mutableListOf()
lateinit var rValue: FirExpression lateinit var rValue: FirExpression
override fun build(): FirVariableAssignment { override fun build(): FirVariableAssignment {
@@ -47,6 +48,7 @@ class FirVariableAssignmentBuilder : FirQualifiedAccessBuilder, FirAnnotationCon
dispatchReceiver, dispatchReceiver,
extensionReceiver, extensionReceiver,
source, source,
contextReceiverArguments,
rValue, rValue,
) )
} }
@@ -29,6 +29,7 @@ internal class FirCallableReferenceAccessImpl(
override var explicitReceiver: FirExpression?, override var explicitReceiver: FirExpression?,
override var dispatchReceiver: FirExpression, override var dispatchReceiver: FirExpression,
override var extensionReceiver: FirExpression, override var extensionReceiver: FirExpression,
override val contextReceiverArguments: MutableList<FirExpression>,
override var calleeReference: FirNamedReference, override var calleeReference: FirNamedReference,
override var hasQuestionMarkAtLHS: Boolean, override var hasQuestionMarkAtLHS: Boolean,
) : FirCallableReferenceAccess() { ) : FirCallableReferenceAccess() {
@@ -109,6 +110,11 @@ internal class FirCallableReferenceAccessImpl(
explicitReceiver = newExplicitReceiver explicitReceiver = newExplicitReceiver
} }
override fun replaceContextReceiverArguments(newContextReceiverArguments: List<FirExpression>) {
contextReceiverArguments.clear()
contextReceiverArguments.addAll(newContextReceiverArguments)
}
override fun replaceCalleeReference(newCalleeReference: FirNamedReference) { override fun replaceCalleeReference(newCalleeReference: FirNamedReference) {
calleeReference = newCalleeReference calleeReference = newCalleeReference
} }
@@ -33,6 +33,7 @@ internal class FirComponentCallImpl(
override val typeArguments: MutableList<FirTypeProjection>, override val typeArguments: MutableList<FirTypeProjection>,
override var dispatchReceiver: FirExpression, override var dispatchReceiver: FirExpression,
override var extensionReceiver: FirExpression, override var extensionReceiver: FirExpression,
override val contextReceiverArguments: MutableList<FirExpression>,
override var argumentList: FirArgumentList, override var argumentList: FirArgumentList,
override var explicitReceiver: FirExpression, override var explicitReceiver: FirExpression,
override val componentIndex: Int, override val componentIndex: Int,
@@ -116,6 +117,11 @@ internal class FirComponentCallImpl(
typeArguments.addAll(newTypeArguments) typeArguments.addAll(newTypeArguments)
} }
override fun replaceContextReceiverArguments(newContextReceiverArguments: List<FirExpression>) {
contextReceiverArguments.clear()
contextReceiverArguments.addAll(newContextReceiverArguments)
}
override fun replaceArgumentList(newArgumentList: FirArgumentList) { override fun replaceArgumentList(newArgumentList: FirArgumentList) {
argumentList = newArgumentList argumentList = newArgumentList
} }
@@ -31,6 +31,7 @@ open class FirFunctionCallImpl @FirImplementationDetail constructor(
override var explicitReceiver: FirExpression?, override var explicitReceiver: FirExpression?,
override var dispatchReceiver: FirExpression, override var dispatchReceiver: FirExpression,
override var extensionReceiver: FirExpression, override var extensionReceiver: FirExpression,
override val contextReceiverArguments: MutableList<FirExpression>,
override var argumentList: FirArgumentList, override var argumentList: FirArgumentList,
override var calleeReference: FirNamedReference, override var calleeReference: FirNamedReference,
override val origin: FirFunctionCallOrigin, override val origin: FirFunctionCallOrigin,
@@ -114,6 +115,11 @@ open class FirFunctionCallImpl @FirImplementationDetail constructor(
explicitReceiver = newExplicitReceiver explicitReceiver = newExplicitReceiver
} }
override fun replaceContextReceiverArguments(newContextReceiverArguments: List<FirExpression>) {
contextReceiverArguments.clear()
contextReceiverArguments.addAll(newContextReceiverArguments)
}
override fun replaceArgumentList(newArgumentList: FirArgumentList) { override fun replaceArgumentList(newArgumentList: FirArgumentList) {
argumentList = newArgumentList argumentList = newArgumentList
} }
@@ -31,6 +31,7 @@ internal class FirImplicitInvokeCallImpl(
override var explicitReceiver: FirExpression?, override var explicitReceiver: FirExpression?,
override var dispatchReceiver: FirExpression, override var dispatchReceiver: FirExpression,
override var extensionReceiver: FirExpression, override var extensionReceiver: FirExpression,
override val contextReceiverArguments: MutableList<FirExpression>,
override var argumentList: FirArgumentList, override var argumentList: FirArgumentList,
override var calleeReference: FirNamedReference, override var calleeReference: FirNamedReference,
) : FirImplicitInvokeCall() { ) : FirImplicitInvokeCall() {
@@ -116,6 +117,11 @@ internal class FirImplicitInvokeCallImpl(
explicitReceiver = newExplicitReceiver explicitReceiver = newExplicitReceiver
} }
override fun replaceContextReceiverArguments(newContextReceiverArguments: List<FirExpression>) {
contextReceiverArguments.clear()
contextReceiverArguments.addAll(newContextReceiverArguments)
}
override fun replaceArgumentList(newArgumentList: FirArgumentList) { override fun replaceArgumentList(newArgumentList: FirArgumentList) {
argumentList = newArgumentList argumentList = newArgumentList
} }
@@ -31,6 +31,7 @@ internal class FirIntegerLiteralOperatorCallImpl(
override var explicitReceiver: FirExpression?, override var explicitReceiver: FirExpression?,
override var dispatchReceiver: FirExpression, override var dispatchReceiver: FirExpression,
override var extensionReceiver: FirExpression, override var extensionReceiver: FirExpression,
override val contextReceiverArguments: MutableList<FirExpression>,
override var argumentList: FirArgumentList, override var argumentList: FirArgumentList,
override var calleeReference: FirNamedReference, override var calleeReference: FirNamedReference,
override val origin: FirFunctionCallOrigin, override val origin: FirFunctionCallOrigin,
@@ -114,6 +115,11 @@ internal class FirIntegerLiteralOperatorCallImpl(
explicitReceiver = newExplicitReceiver explicitReceiver = newExplicitReceiver
} }
override fun replaceContextReceiverArguments(newContextReceiverArguments: List<FirExpression>) {
contextReceiverArguments.clear()
contextReceiverArguments.addAll(newContextReceiverArguments)
}
override fun replaceArgumentList(newArgumentList: FirArgumentList) { override fun replaceArgumentList(newArgumentList: FirArgumentList) {
argumentList = newArgumentList argumentList = newArgumentList
} }
@@ -30,6 +30,7 @@ class FirPropertyAccessExpressionImpl @FirImplementationDetail constructor(
override var explicitReceiver: FirExpression?, override var explicitReceiver: FirExpression?,
override var dispatchReceiver: FirExpression, override var dispatchReceiver: FirExpression,
override var extensionReceiver: FirExpression, override var extensionReceiver: FirExpression,
override val contextReceiverArguments: MutableList<FirExpression>,
override val nonFatalDiagnostics: MutableList<ConeDiagnostic>, override val nonFatalDiagnostics: MutableList<ConeDiagnostic>,
) : FirPropertyAccessExpression() { ) : FirPropertyAccessExpression() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) { override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
@@ -112,4 +113,9 @@ class FirPropertyAccessExpressionImpl @FirImplementationDetail constructor(
override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?) { override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?) {
explicitReceiver = newExplicitReceiver explicitReceiver = newExplicitReceiver
} }
override fun replaceContextReceiverArguments(newContextReceiverArguments: List<FirExpression>) {
contextReceiverArguments.clear()
contextReceiverArguments.addAll(newContextReceiverArguments)
}
} }
@@ -27,6 +27,7 @@ internal class FirThisReceiverExpressionImpl(
override var typeRef: FirTypeRef, override var typeRef: FirTypeRef,
override val annotations: MutableList<FirAnnotation>, override val annotations: MutableList<FirAnnotation>,
override val typeArguments: MutableList<FirTypeProjection>, override val typeArguments: MutableList<FirTypeProjection>,
override val contextReceiverArguments: MutableList<FirExpression>,
override var calleeReference: FirThisReference, override var calleeReference: FirThisReference,
override val isImplicit: Boolean, override val isImplicit: Boolean,
) : FirThisReceiverExpression() { ) : FirThisReceiverExpression() {
@@ -111,6 +112,11 @@ internal class FirThisReceiverExpressionImpl(
explicitReceiver = newExplicitReceiver explicitReceiver = newExplicitReceiver
} }
override fun replaceContextReceiverArguments(newContextReceiverArguments: List<FirExpression>) {
contextReceiverArguments.clear()
contextReceiverArguments.addAll(newContextReceiverArguments)
}
override fun replaceCalleeReference(newCalleeReference: FirThisReference) { override fun replaceCalleeReference(newCalleeReference: FirThisReference) {
calleeReference = newCalleeReference calleeReference = newCalleeReference
} }
@@ -29,6 +29,7 @@ internal class FirVariableAssignmentImpl(
override var dispatchReceiver: FirExpression, override var dispatchReceiver: FirExpression,
override var extensionReceiver: FirExpression, override var extensionReceiver: FirExpression,
override var source: KtSourceElement?, override var source: KtSourceElement?,
override val contextReceiverArguments: MutableList<FirExpression>,
override var rValue: FirExpression, override var rValue: FirExpression,
) : FirVariableAssignment() { ) : FirVariableAssignment() {
override var lValue: FirReference override var lValue: FirReference
@@ -122,6 +123,11 @@ internal class FirVariableAssignmentImpl(
source = newSource source = newSource
} }
override fun replaceContextReceiverArguments(newContextReceiverArguments: List<FirExpression>) {
contextReceiverArguments.clear()
contextReceiverArguments.addAll(newContextReceiverArguments)
}
override fun replaceLValueTypeRef(newLValueTypeRef: FirTypeRef) { override fun replaceLValueTypeRef(newLValueTypeRef: FirTypeRef) {
lValueTypeRef = newLValueTypeRef lValueTypeRef = newLValueTypeRef
} }
@@ -19,6 +19,7 @@ abstract class FirThisReference : FirReference() {
abstract override val source: KtSourceElement? abstract override val source: KtSourceElement?
abstract val labelName: String? abstract val labelName: String?
abstract val boundSymbol: FirBasedSymbol<*>? abstract val boundSymbol: FirBasedSymbol<*>?
abstract val contextReceiverNumber: Int
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitThisReference(this, data) override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitThisReference(this, data)
@@ -22,11 +22,13 @@ import org.jetbrains.kotlin.fir.visitors.*
class FirExplicitThisReferenceBuilder { class FirExplicitThisReferenceBuilder {
var source: KtSourceElement? = null var source: KtSourceElement? = null
var labelName: String? = null var labelName: String? = null
var contextReceiverNumber: Int = -1
fun build(): FirThisReference { fun build(): FirThisReference {
return FirExplicitThisReference( return FirExplicitThisReference(
source, source,
labelName, labelName,
contextReceiverNumber,
) )
} }
@@ -21,10 +21,12 @@ import org.jetbrains.kotlin.fir.visitors.*
@FirBuilderDsl @FirBuilderDsl
class FirImplicitThisReferenceBuilder { class FirImplicitThisReferenceBuilder {
var boundSymbol: FirBasedSymbol<*>? = null var boundSymbol: FirBasedSymbol<*>? = null
var contextReceiverNumber: Int = -1
fun build(): FirThisReference { fun build(): FirThisReference {
return FirImplicitThisReference( return FirImplicitThisReference(
boundSymbol, boundSymbol,
contextReceiverNumber,
) )
} }
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.fir.visitors.*
internal class FirExplicitThisReference( internal class FirExplicitThisReference(
override val source: KtSourceElement?, override val source: KtSourceElement?,
override val labelName: String?, override val labelName: String?,
override val contextReceiverNumber: Int,
) : FirThisReference() { ) : FirThisReference() {
override var boundSymbol: FirBasedSymbol<*>? = null override var boundSymbol: FirBasedSymbol<*>? = null
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.visitors.*
internal class FirImplicitThisReference( internal class FirImplicitThisReference(
override val boundSymbol: FirBasedSymbol<*>?, override val boundSymbol: FirBasedSymbol<*>?,
override val contextReceiverNumber: Int,
) : FirThisReference() { ) : FirThisReference() {
override val source: KtSourceElement? get() = null override val source: KtSourceElement? get() = null
override val labelName: String? get() = null override val labelName: String? get() = null
@@ -37,6 +37,7 @@ internal class FirExpressionWithSmartcastImpl(
override val explicitReceiver: FirExpression? get() = originalExpression.explicitReceiver override val explicitReceiver: FirExpression? get() = originalExpression.explicitReceiver
override val dispatchReceiver: FirExpression get() = originalExpression.dispatchReceiver override val dispatchReceiver: FirExpression get() = originalExpression.dispatchReceiver
override val extensionReceiver: FirExpression get() = originalExpression.extensionReceiver override val extensionReceiver: FirExpression get() = originalExpression.extensionReceiver
override val contextReceiverArguments: List<FirExpression> get() = originalExpression.contextReceiverArguments
override val calleeReference: FirReference get() = originalExpression.calleeReference override val calleeReference: FirReference get() = originalExpression.calleeReference
override val originalType: FirTypeRef get() = originalExpression.typeRef override val originalType: FirTypeRef get() = originalExpression.typeRef
override val isStable: Boolean get() = smartcastStability == SmartcastStability.STABLE_VALUE override val isStable: Boolean get() = smartcastStability == SmartcastStability.STABLE_VALUE
@@ -96,4 +97,8 @@ internal class FirExpressionWithSmartcastImpl(
@FirImplementationDetail @FirImplementationDetail
override fun replaceSource(newSource: KtSourceElement?) { override fun replaceSource(newSource: KtSourceElement?) {
} }
override fun replaceContextReceiverArguments(newContextReceiverArguments: List<FirExpression>) {
throw IllegalStateException()
}
} }
@@ -38,6 +38,7 @@ class FirExpressionWithSmartcastToNullImpl(
override val explicitReceiver: FirExpression? get() = originalExpression.explicitReceiver override val explicitReceiver: FirExpression? get() = originalExpression.explicitReceiver
override val dispatchReceiver: FirExpression get() = originalExpression.dispatchReceiver override val dispatchReceiver: FirExpression get() = originalExpression.dispatchReceiver
override val extensionReceiver: FirExpression get() = originalExpression.extensionReceiver override val extensionReceiver: FirExpression get() = originalExpression.extensionReceiver
override val contextReceiverArguments: List<FirExpression> get() = originalExpression.contextReceiverArguments
override val isStable: Boolean get() = smartcastStability == SmartcastStability.STABLE_VALUE override val isStable: Boolean get() = smartcastStability == SmartcastStability.STABLE_VALUE
override val calleeReference: FirReference get() = originalExpression.calleeReference override val calleeReference: FirReference get() = originalExpression.calleeReference
override val originalType: FirTypeRef get() = originalExpression.typeRef override val originalType: FirTypeRef get() = originalExpression.typeRef
@@ -97,4 +98,8 @@ class FirExpressionWithSmartcastToNullImpl(
@FirImplementationDetail @FirImplementationDetail
override fun replaceSource(newSource: KtSourceElement?) { override fun replaceSource(newSource: KtSourceElement?) {
} }
override fun replaceContextReceiverArguments(newContextReceiverArguments: List<FirExpression>) {
throw IllegalStateException()
}
} }
@@ -225,6 +225,14 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
default("isImplicit", "false") default("isImplicit", "false")
} }
builder(thisReference, "FirExplicitThisReference") {
default("contextReceiverNumber", "-1")
}
builder(thisReference, "FirImplicitThisReference") {
default("contextReceiverNumber", "-1")
}
builder(variableAssignment) { builder(variableAssignment) {
parents += qualifiedAccessBuilder parents += qualifiedAccessBuilder
defaultNoReceivers() defaultNoReceivers()
@@ -195,6 +195,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
+typeArguments.withTransform() +typeArguments.withTransform()
+receivers +receivers
+field("source", sourceElementType, nullable = true, withReplace = true) +field("source", sourceElementType, nullable = true, withReplace = true)
+fieldList("contextReceiverArguments", expressionType, withReplace = true)
} }
propertyAccessExpression.configure { propertyAccessExpression.configure {
@@ -622,6 +623,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
thisReference.configure { thisReference.configure {
+stringField("labelName", nullable = true) +stringField("labelName", nullable = true)
+field("boundSymbol", firBasedSymbolType, "*", nullable = true, withReplace = true) +field("boundSymbol", firBasedSymbolType, "*", nullable = true, withReplace = true)
+intField("contextReceiverNumber")
} }
typeRef.configure { typeRef.configure {