[FIR] Make extensionReceiver and dispatchReceiver nullable

Get rid of FirNoReceiverExpression

^KT-59650 Fixed
This commit is contained in:
Dmitriy Novozhilov
2023-08-30 18:50:18 +03:00
committed by Space Team
parent 585c3fe4b5
commit f203681ffa
75 changed files with 292 additions and 320 deletions
@@ -26,8 +26,8 @@ abstract class FirCallableReferenceAccess : FirQualifiedAccessExpression() {
abstract override val contextReceiverArguments: List<FirExpression>
abstract override val typeArguments: List<FirTypeProjection>
abstract override val explicitReceiver: FirExpression?
abstract override val dispatchReceiver: FirExpression
abstract override val extensionReceiver: FirExpression
abstract override val dispatchReceiver: FirExpression?
abstract override val extensionReceiver: FirExpression?
abstract override val source: KtSourceElement?
abstract override val nonFatalDiagnostics: List<ConeDiagnostic>
abstract override val calleeReference: FirNamedReference
@@ -49,9 +49,9 @@ abstract class FirCallableReferenceAccess : FirQualifiedAccessExpression() {
abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?)
abstract override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression)
abstract override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression?)
abstract override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression)
abstract override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression?)
@FirImplementationDetail
abstract override fun replaceSource(newSource: KtSourceElement?)
@@ -25,8 +25,8 @@ abstract class FirComponentCall : FirFunctionCall() {
abstract override val annotations: List<FirAnnotation>
abstract override val contextReceiverArguments: List<FirExpression>
abstract override val typeArguments: List<FirTypeProjection>
abstract override val dispatchReceiver: FirExpression
abstract override val extensionReceiver: FirExpression
abstract override val dispatchReceiver: FirExpression?
abstract override val extensionReceiver: FirExpression?
abstract override val source: KtSourceElement?
abstract override val nonFatalDiagnostics: List<ConeDiagnostic>
abstract override val argumentList: FirArgumentList
@@ -49,9 +49,9 @@ abstract class FirComponentCall : FirFunctionCall() {
abstract override fun replaceTypeArguments(newTypeArguments: List<FirTypeProjection>)
abstract override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression)
abstract override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression?)
abstract override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression)
abstract override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression?)
@FirImplementationDetail
abstract override fun replaceSource(newSource: KtSourceElement?)
@@ -23,7 +23,7 @@ abstract class FirDelegatedConstructorCall : FirPureAbstractElement(), FirResolv
abstract override val argumentList: FirArgumentList
abstract override val contextReceiverArguments: List<FirExpression>
abstract val constructedTypeRef: FirTypeRef
abstract val dispatchReceiver: FirExpression
abstract val dispatchReceiver: FirExpression?
abstract override val calleeReference: FirReference
abstract val isThis: Boolean
abstract val isSuper: Boolean
@@ -42,7 +42,7 @@ abstract class FirDelegatedConstructorCall : FirPureAbstractElement(), FirResolv
abstract fun replaceConstructedTypeRef(newConstructedTypeRef: FirTypeRef)
abstract fun replaceDispatchReceiver(newDispatchReceiver: FirExpression)
abstract fun replaceDispatchReceiver(newDispatchReceiver: FirExpression?)
abstract override fun replaceCalleeReference(newCalleeReference: FirReference)
@@ -26,8 +26,8 @@ abstract class FirFunctionCall : FirQualifiedAccessExpression(), FirCall {
abstract override val contextReceiverArguments: List<FirExpression>
abstract override val typeArguments: List<FirTypeProjection>
abstract override val explicitReceiver: FirExpression?
abstract override val dispatchReceiver: FirExpression
abstract override val extensionReceiver: FirExpression
abstract override val dispatchReceiver: FirExpression?
abstract override val extensionReceiver: FirExpression?
abstract override val source: KtSourceElement?
abstract override val nonFatalDiagnostics: List<ConeDiagnostic>
abstract override val argumentList: FirArgumentList
@@ -50,9 +50,9 @@ abstract class FirFunctionCall : FirQualifiedAccessExpression(), FirCall {
abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?)
abstract override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression)
abstract override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression?)
abstract override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression)
abstract override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression?)
@FirImplementationDetail
abstract override fun replaceSource(newSource: KtSourceElement?)
@@ -26,8 +26,8 @@ abstract class FirImplicitInvokeCall : FirFunctionCall() {
abstract override val contextReceiverArguments: List<FirExpression>
abstract override val typeArguments: List<FirTypeProjection>
abstract override val explicitReceiver: FirExpression?
abstract override val dispatchReceiver: FirExpression
abstract override val extensionReceiver: FirExpression
abstract override val dispatchReceiver: FirExpression?
abstract override val extensionReceiver: FirExpression?
abstract override val source: KtSourceElement?
abstract override val nonFatalDiagnostics: List<ConeDiagnostic>
abstract override val argumentList: FirArgumentList
@@ -50,9 +50,9 @@ abstract class FirImplicitInvokeCall : FirFunctionCall() {
abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?)
abstract override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression)
abstract override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression?)
abstract override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression)
abstract override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression?)
@FirImplementationDetail
abstract override fun replaceSource(newSource: KtSourceElement?)
@@ -31,8 +31,8 @@ abstract class FirIntegerLiteralOperatorCall : FirFunctionCall() {
abstract override val argumentList: FirArgumentList
abstract override val calleeReference: FirNamedReference
abstract override val origin: FirFunctionCallOrigin
abstract override val dispatchReceiver: FirExpression
abstract override val extensionReceiver: FirExpression
abstract override val dispatchReceiver: FirExpression?
abstract override val extensionReceiver: FirExpression?
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitIntegerLiteralOperatorCall(this, data)
@@ -61,9 +61,9 @@ abstract class FirIntegerLiteralOperatorCall : FirFunctionCall() {
abstract override fun replaceCalleeReference(newCalleeReference: FirReference)
abstract override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression)
abstract override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression?)
abstract override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression)
abstract override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression?)
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirIntegerLiteralOperatorCall
@@ -22,7 +22,7 @@ abstract class FirMultiDelegatedConstructorCall : FirDelegatedConstructorCall()
abstract override val argumentList: FirArgumentList
abstract override val contextReceiverArguments: List<FirExpression>
abstract override val constructedTypeRef: FirTypeRef
abstract override val dispatchReceiver: FirExpression
abstract override val dispatchReceiver: FirExpression?
abstract override val calleeReference: FirReference
abstract override val isThis: Boolean
abstract override val isSuper: Boolean
@@ -42,7 +42,7 @@ abstract class FirMultiDelegatedConstructorCall : FirDelegatedConstructorCall()
abstract override fun replaceConstructedTypeRef(newConstructedTypeRef: FirTypeRef)
abstract override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression)
abstract override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression?)
abstract override fun replaceCalleeReference(newCalleeReference: FirReference)
@@ -26,8 +26,8 @@ abstract class FirPropertyAccessExpression : FirQualifiedAccessExpression() {
abstract override val contextReceiverArguments: List<FirExpression>
abstract override val typeArguments: List<FirTypeProjection>
abstract override val explicitReceiver: FirExpression?
abstract override val dispatchReceiver: FirExpression
abstract override val extensionReceiver: FirExpression
abstract override val dispatchReceiver: FirExpression?
abstract override val extensionReceiver: FirExpression?
abstract override val source: KtSourceElement?
abstract override val nonFatalDiagnostics: List<ConeDiagnostic>
@@ -49,9 +49,9 @@ abstract class FirPropertyAccessExpression : FirQualifiedAccessExpression() {
abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?)
abstract override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression)
abstract override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression?)
abstract override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression)
abstract override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression?)
@FirImplementationDetail
abstract override fun replaceSource(newSource: KtSourceElement?)
@@ -26,8 +26,8 @@ abstract class FirQualifiedAccessExpression : FirExpression(), FirResolvable, Fi
abstract override val contextReceiverArguments: List<FirExpression>
abstract val typeArguments: List<FirTypeProjection>
abstract val explicitReceiver: FirExpression?
abstract val dispatchReceiver: FirExpression
abstract val extensionReceiver: FirExpression
abstract val dispatchReceiver: FirExpression?
abstract val extensionReceiver: FirExpression?
abstract override val source: KtSourceElement?
abstract val nonFatalDiagnostics: List<ConeDiagnostic>
@@ -49,9 +49,9 @@ abstract class FirQualifiedAccessExpression : FirExpression(), FirResolvable, Fi
abstract fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?)
abstract fun replaceDispatchReceiver(newDispatchReceiver: FirExpression)
abstract fun replaceDispatchReceiver(newDispatchReceiver: FirExpression?)
abstract fun replaceExtensionReceiver(newExtensionReceiver: FirExpression)
abstract fun replaceExtensionReceiver(newExtensionReceiver: FirExpression?)
@FirImplementationDetail
abstract fun replaceSource(newSource: KtSourceElement?)
@@ -26,8 +26,8 @@ abstract class FirThisReceiverExpression : FirQualifiedAccessExpression() {
abstract override val contextReceiverArguments: List<FirExpression>
abstract override val typeArguments: List<FirTypeProjection>
abstract override val explicitReceiver: FirExpression?
abstract override val dispatchReceiver: FirExpression
abstract override val extensionReceiver: FirExpression
abstract override val dispatchReceiver: FirExpression?
abstract override val extensionReceiver: FirExpression?
abstract override val source: KtSourceElement?
abstract override val nonFatalDiagnostics: List<ConeDiagnostic>
abstract override val calleeReference: FirThisReference
@@ -49,9 +49,9 @@ abstract class FirThisReceiverExpression : FirQualifiedAccessExpression() {
abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?)
abstract override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression)
abstract override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression?)
abstract override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression)
abstract override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression?)
@FirImplementationDetail
abstract override fun replaceSource(newSource: KtSourceElement?)
@@ -34,8 +34,8 @@ interface FirAbstractFunctionCallBuilder : FirQualifiedAccessExpressionBuilder,
abstract override val contextReceiverArguments: MutableList<FirExpression>
abstract override val typeArguments: MutableList<FirTypeProjection>
abstract override var explicitReceiver: FirExpression?
abstract override var dispatchReceiver: FirExpression
abstract override var extensionReceiver: FirExpression
abstract override var dispatchReceiver: FirExpression?
abstract override var extensionReceiver: FirExpression?
abstract override var source: KtSourceElement?
abstract override val nonFatalDiagnostics: MutableList<ConeDiagnostic>
abstract override var argumentList: FirArgumentList
@@ -20,7 +20,6 @@ import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder
import org.jetbrains.kotlin.fir.expressions.builder.FirQualifiedAccessExpressionBuilder
import org.jetbrains.kotlin.fir.expressions.impl.FirCallableReferenceAccessImpl
import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression
import org.jetbrains.kotlin.fir.references.FirNamedReference
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.types.ConeKotlinType
@@ -39,8 +38,8 @@ class FirCallableReferenceAccessBuilder : FirQualifiedAccessExpressionBuilder, F
override val contextReceiverArguments: MutableList<FirExpression> = mutableListOf()
override val typeArguments: MutableList<FirTypeProjection> = mutableListOf()
override var explicitReceiver: FirExpression? = null
override var dispatchReceiver: FirExpression = FirNoReceiverExpression
override var extensionReceiver: FirExpression = FirNoReceiverExpression
override var dispatchReceiver: FirExpression? = null
override var extensionReceiver: FirExpression? = null
override var source: KtSourceElement? = null
override val nonFatalDiagnostics: MutableList<ConeDiagnostic> = mutableListOf()
lateinit var calleeReference: FirNamedReference
@@ -23,7 +23,6 @@ import org.jetbrains.kotlin.fir.expressions.FirFunctionCallOrigin
import org.jetbrains.kotlin.fir.expressions.builder.FirCallBuilder
import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder
import org.jetbrains.kotlin.fir.expressions.impl.FirComponentCallImpl
import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression
import org.jetbrains.kotlin.fir.references.FirNamedReference
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.references.impl.FirSimpleNamedReference
@@ -43,8 +42,8 @@ class FirComponentCallBuilder : FirCallBuilder, FirAnnotationContainerBuilder, F
override val annotations: MutableList<FirAnnotation> = mutableListOf()
val contextReceiverArguments: MutableList<FirExpression> = mutableListOf()
val typeArguments: MutableList<FirTypeProjection> = mutableListOf()
var dispatchReceiver: FirExpression = FirNoReceiverExpression
var extensionReceiver: FirExpression = FirNoReceiverExpression
var dispatchReceiver: FirExpression? = null
var extensionReceiver: FirExpression? = null
override var source: KtSourceElement? = null
val nonFatalDiagnostics: MutableList<ConeDiagnostic> = mutableListOf()
override var argumentList: FirArgumentList = FirEmptyArgumentList
@@ -19,7 +19,6 @@ import org.jetbrains.kotlin.fir.expressions.FirEmptyArgumentList
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.builder.FirCallBuilder
import org.jetbrains.kotlin.fir.expressions.impl.FirDelegatedConstructorCallImpl
import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.references.impl.FirExplicitSuperReference
import org.jetbrains.kotlin.fir.references.impl.FirExplicitThisReference
@@ -38,7 +37,7 @@ class FirDelegatedConstructorCallBuilder : FirCallBuilder, FirAnnotationContaine
override var argumentList: FirArgumentList = FirEmptyArgumentList
val contextReceiverArguments: MutableList<FirExpression> = mutableListOf()
lateinit var constructedTypeRef: FirTypeRef
var dispatchReceiver: FirExpression = FirNoReceiverExpression
var dispatchReceiver: FirExpression? = null
lateinit var calleeReference: FirReference
var isThis: Boolean by kotlin.properties.Delegates.notNull<Boolean>()
@@ -23,7 +23,6 @@ import org.jetbrains.kotlin.fir.expressions.FirFunctionCallOrigin
import org.jetbrains.kotlin.fir.expressions.builder.FirAbstractFunctionCallBuilder
import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder
import org.jetbrains.kotlin.fir.expressions.impl.FirFunctionCallImpl
import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression
import org.jetbrains.kotlin.fir.references.FirNamedReference
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.types.ConeKotlinType
@@ -42,8 +41,8 @@ open class FirFunctionCallBuilder : FirAbstractFunctionCallBuilder, FirAnnotatio
override val contextReceiverArguments: MutableList<FirExpression> = mutableListOf()
override val typeArguments: MutableList<FirTypeProjection> = mutableListOf()
override var explicitReceiver: FirExpression? = null
override var dispatchReceiver: FirExpression = FirNoReceiverExpression
override var extensionReceiver: FirExpression = FirNoReceiverExpression
override var dispatchReceiver: FirExpression? = null
override var extensionReceiver: FirExpression? = null
override var source: KtSourceElement? = null
override val nonFatalDiagnostics: MutableList<ConeDiagnostic> = mutableListOf()
override var argumentList: FirArgumentList = FirEmptyArgumentList
@@ -23,7 +23,6 @@ import org.jetbrains.kotlin.fir.expressions.FirImplicitInvokeCall
import org.jetbrains.kotlin.fir.expressions.builder.FirAbstractFunctionCallBuilder
import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder
import org.jetbrains.kotlin.fir.expressions.impl.FirImplicitInvokeCallImpl
import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression
import org.jetbrains.kotlin.fir.references.FirNamedReference
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.types.ConeKotlinType
@@ -42,8 +41,8 @@ open class FirImplicitInvokeCallBuilder : FirAbstractFunctionCallBuilder, FirAnn
override val contextReceiverArguments: MutableList<FirExpression> = mutableListOf()
override val typeArguments: MutableList<FirTypeProjection> = mutableListOf()
override var explicitReceiver: FirExpression? = null
override var dispatchReceiver: FirExpression = FirNoReceiverExpression
override var extensionReceiver: FirExpression = FirNoReceiverExpression
override var dispatchReceiver: FirExpression? = null
override var extensionReceiver: FirExpression? = null
override var source: KtSourceElement? = null
override val nonFatalDiagnostics: MutableList<ConeDiagnostic> = mutableListOf()
override var argumentList: FirArgumentList = FirEmptyArgumentList
@@ -23,7 +23,6 @@ import org.jetbrains.kotlin.fir.expressions.FirIntegerLiteralOperatorCall
import org.jetbrains.kotlin.fir.expressions.builder.FirAbstractFunctionCallBuilder
import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder
import org.jetbrains.kotlin.fir.expressions.impl.FirIntegerLiteralOperatorCallImpl
import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression
import org.jetbrains.kotlin.fir.references.FirNamedReference
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.types.ConeKotlinType
@@ -47,8 +46,8 @@ open class FirIntegerLiteralOperatorCallBuilder : FirAbstractFunctionCallBuilder
override var argumentList: FirArgumentList = FirEmptyArgumentList
override lateinit var calleeReference: FirNamedReference
override lateinit var origin: FirFunctionCallOrigin
override var dispatchReceiver: FirExpression = FirNoReceiverExpression
override var extensionReceiver: FirExpression = FirNoReceiverExpression
override var dispatchReceiver: FirExpression? = null
override var extensionReceiver: FirExpression? = null
override fun build(): FirIntegerLiteralOperatorCall {
return FirIntegerLiteralOperatorCallImpl(
@@ -19,7 +19,6 @@ import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.FirPropertyAccessExpression
import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder
import org.jetbrains.kotlin.fir.expressions.builder.FirQualifiedAccessExpressionBuilder
import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression
import org.jetbrains.kotlin.fir.expressions.impl.FirPropertyAccessExpressionImpl
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.types.ConeKotlinType
@@ -39,8 +38,8 @@ class FirPropertyAccessExpressionBuilder : FirQualifiedAccessExpressionBuilder,
override val contextReceiverArguments: MutableList<FirExpression> = mutableListOf()
override val typeArguments: MutableList<FirTypeProjection> = mutableListOf()
override var explicitReceiver: FirExpression? = null
override var dispatchReceiver: FirExpression = FirNoReceiverExpression
override var extensionReceiver: FirExpression = FirNoReceiverExpression
override var dispatchReceiver: FirExpression? = null
override var extensionReceiver: FirExpression? = null
override var source: KtSourceElement? = null
override val nonFatalDiagnostics: MutableList<ConeDiagnostic> = mutableListOf()
@@ -29,8 +29,8 @@ interface FirQualifiedAccessExpressionBuilder {
abstract val contextReceiverArguments: MutableList<FirExpression>
abstract val typeArguments: MutableList<FirTypeProjection>
abstract var explicitReceiver: FirExpression?
abstract var dispatchReceiver: FirExpression
abstract var extensionReceiver: FirExpression
abstract var dispatchReceiver: FirExpression?
abstract var extensionReceiver: FirExpression?
abstract var source: KtSourceElement?
abstract val nonFatalDiagnostics: MutableList<ConeDiagnostic>
@@ -19,7 +19,6 @@ import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.FirThisReceiverExpression
import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder
import org.jetbrains.kotlin.fir.expressions.builder.FirQualifiedAccessExpressionBuilder
import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression
import org.jetbrains.kotlin.fir.expressions.impl.FirThisReceiverExpressionImpl
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.references.FirThisReference
@@ -65,14 +64,14 @@ class FirThisReceiverExpressionBuilder : FirQualifiedAccessExpressionBuilder, Fi
}
@Deprecated("Modification of 'dispatchReceiver' has no impact for FirThisReceiverExpressionBuilder", level = DeprecationLevel.HIDDEN)
override var dispatchReceiver: FirExpression
override var dispatchReceiver: FirExpression?
get() = throw IllegalStateException()
set(_) {
throw IllegalStateException()
}
@Deprecated("Modification of 'extensionReceiver' has no impact for FirThisReceiverExpressionBuilder", level = DeprecationLevel.HIDDEN)
override var extensionReceiver: FirExpression
override var extensionReceiver: FirExpression?
get() = throw IllegalStateException()
set(_) {
throw IllegalStateException()
@@ -32,8 +32,8 @@ internal class FirCallableReferenceAccessImpl(
override var contextReceiverArguments: MutableOrEmptyList<FirExpression>,
override var typeArguments: MutableOrEmptyList<FirTypeProjection>,
override var explicitReceiver: FirExpression?,
override var dispatchReceiver: FirExpression,
override var extensionReceiver: FirExpression,
override var dispatchReceiver: FirExpression?,
override var extensionReceiver: FirExpression?,
override var source: KtSourceElement?,
override var nonFatalDiagnostics: MutableOrEmptyList<ConeDiagnostic>,
override var calleeReference: FirNamedReference,
@@ -45,10 +45,10 @@ internal class FirCallableReferenceAccessImpl(
typeArguments.forEach { it.accept(visitor, data) }
explicitReceiver?.accept(visitor, data)
if (dispatchReceiver !== explicitReceiver) {
dispatchReceiver.accept(visitor, data)
dispatchReceiver?.accept(visitor, data)
}
if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) {
extensionReceiver.accept(visitor, data)
extensionReceiver?.accept(visitor, data)
}
calleeReference.accept(visitor, data)
}
@@ -59,10 +59,10 @@ internal class FirCallableReferenceAccessImpl(
transformTypeArguments(transformer, data)
explicitReceiver = explicitReceiver?.transform(transformer, data)
if (dispatchReceiver !== explicitReceiver) {
dispatchReceiver = dispatchReceiver.transform(transformer, data)
dispatchReceiver = dispatchReceiver?.transform(transformer, data)
}
if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) {
extensionReceiver = extensionReceiver.transform(transformer, data)
extensionReceiver = extensionReceiver?.transform(transformer, data)
}
transformCalleeReference(transformer, data)
return this
@@ -108,11 +108,11 @@ internal class FirCallableReferenceAccessImpl(
explicitReceiver = newExplicitReceiver
}
override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression) {
override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression?) {
dispatchReceiver = newDispatchReceiver
}
override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression) {
override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression?) {
extensionReceiver = newExtensionReceiver
}
@@ -36,8 +36,8 @@ internal class FirComponentCallImpl(
override var annotations: MutableOrEmptyList<FirAnnotation>,
override var contextReceiverArguments: MutableOrEmptyList<FirExpression>,
override var typeArguments: MutableOrEmptyList<FirTypeProjection>,
override var dispatchReceiver: FirExpression,
override var extensionReceiver: FirExpression,
override var dispatchReceiver: FirExpression?,
override var extensionReceiver: FirExpression?,
override var source: KtSourceElement?,
override var nonFatalDiagnostics: MutableOrEmptyList<ConeDiagnostic>,
override var argumentList: FirArgumentList,
@@ -55,10 +55,10 @@ internal class FirComponentCallImpl(
calleeReference.accept(visitor, data)
explicitReceiver.accept(visitor, data)
if (dispatchReceiver !== explicitReceiver) {
dispatchReceiver.accept(visitor, data)
dispatchReceiver?.accept(visitor, data)
}
if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) {
extensionReceiver.accept(visitor, data)
extensionReceiver?.accept(visitor, data)
}
}
@@ -70,10 +70,10 @@ internal class FirComponentCallImpl(
transformCalleeReference(transformer, data)
explicitReceiver = explicitReceiver.transform(transformer, data)
if (dispatchReceiver !== explicitReceiver) {
dispatchReceiver = dispatchReceiver.transform(transformer, data)
dispatchReceiver = dispatchReceiver?.transform(transformer, data)
}
if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) {
extensionReceiver = extensionReceiver.transform(transformer, data)
extensionReceiver = extensionReceiver?.transform(transformer, data)
}
return this
}
@@ -114,11 +114,11 @@ internal class FirComponentCallImpl(
typeArguments = newTypeArguments.toMutableOrEmpty()
}
override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression) {
override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression?) {
dispatchReceiver = newDispatchReceiver
}
override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression) {
override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression?) {
extensionReceiver = newExtensionReceiver
}
@@ -31,7 +31,7 @@ internal class FirDelegatedConstructorCallImpl(
override var argumentList: FirArgumentList,
override var contextReceiverArguments: MutableOrEmptyList<FirExpression>,
override var constructedTypeRef: FirTypeRef,
override var dispatchReceiver: FirExpression,
override var dispatchReceiver: FirExpression?,
override var calleeReference: FirReference,
override val isThis: Boolean,
) : FirDelegatedConstructorCall() {
@@ -60,7 +60,7 @@ internal class FirDelegatedConstructorCallImpl(
}
override fun <D> transformDispatchReceiver(transformer: FirTransformer<D>, data: D): FirDelegatedConstructorCallImpl {
dispatchReceiver = dispatchReceiver.transform(transformer, data)
dispatchReceiver = dispatchReceiver?.transform(transformer, data)
return this
}
@@ -85,7 +85,7 @@ internal class FirDelegatedConstructorCallImpl(
constructedTypeRef = newConstructedTypeRef
}
override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression) {
override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression?) {
dispatchReceiver = newDispatchReceiver
}
@@ -34,8 +34,8 @@ open class FirFunctionCallImpl @FirImplementationDetail constructor(
override var contextReceiverArguments: MutableOrEmptyList<FirExpression>,
override var typeArguments: MutableOrEmptyList<FirTypeProjection>,
override var explicitReceiver: FirExpression?,
override var dispatchReceiver: FirExpression,
override var extensionReceiver: FirExpression,
override var dispatchReceiver: FirExpression?,
override var extensionReceiver: FirExpression?,
override var source: KtSourceElement?,
override var nonFatalDiagnostics: MutableOrEmptyList<ConeDiagnostic>,
override var argumentList: FirArgumentList,
@@ -48,10 +48,10 @@ open class FirFunctionCallImpl @FirImplementationDetail constructor(
typeArguments.forEach { it.accept(visitor, data) }
explicitReceiver?.accept(visitor, data)
if (dispatchReceiver !== explicitReceiver) {
dispatchReceiver.accept(visitor, data)
dispatchReceiver?.accept(visitor, data)
}
if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) {
extensionReceiver.accept(visitor, data)
extensionReceiver?.accept(visitor, data)
}
argumentList.accept(visitor, data)
calleeReference.accept(visitor, data)
@@ -63,10 +63,10 @@ open class FirFunctionCallImpl @FirImplementationDetail constructor(
transformTypeArguments(transformer, data)
explicitReceiver = explicitReceiver?.transform(transformer, data)
if (dispatchReceiver !== explicitReceiver) {
dispatchReceiver = dispatchReceiver.transform(transformer, data)
dispatchReceiver = dispatchReceiver?.transform(transformer, data)
}
if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) {
extensionReceiver = extensionReceiver.transform(transformer, data)
extensionReceiver = extensionReceiver?.transform(transformer, data)
}
argumentList = argumentList.transform(transformer, data)
transformCalleeReference(transformer, data)
@@ -113,11 +113,11 @@ open class FirFunctionCallImpl @FirImplementationDetail constructor(
explicitReceiver = newExplicitReceiver
}
override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression) {
override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression?) {
dispatchReceiver = newDispatchReceiver
}
override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression) {
override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression?) {
extensionReceiver = newExtensionReceiver
}
@@ -34,8 +34,8 @@ internal class FirImplicitInvokeCallImpl(
override var contextReceiverArguments: MutableOrEmptyList<FirExpression>,
override var typeArguments: MutableOrEmptyList<FirTypeProjection>,
override var explicitReceiver: FirExpression?,
override var dispatchReceiver: FirExpression,
override var extensionReceiver: FirExpression,
override var dispatchReceiver: FirExpression?,
override var extensionReceiver: FirExpression?,
override var source: KtSourceElement?,
override var nonFatalDiagnostics: MutableOrEmptyList<ConeDiagnostic>,
override var argumentList: FirArgumentList,
@@ -49,10 +49,10 @@ internal class FirImplicitInvokeCallImpl(
typeArguments.forEach { it.accept(visitor, data) }
explicitReceiver?.accept(visitor, data)
if (dispatchReceiver !== explicitReceiver) {
dispatchReceiver.accept(visitor, data)
dispatchReceiver?.accept(visitor, data)
}
if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) {
extensionReceiver.accept(visitor, data)
extensionReceiver?.accept(visitor, data)
}
argumentList.accept(visitor, data)
calleeReference.accept(visitor, data)
@@ -64,10 +64,10 @@ internal class FirImplicitInvokeCallImpl(
transformTypeArguments(transformer, data)
explicitReceiver = explicitReceiver?.transform(transformer, data)
if (dispatchReceiver !== explicitReceiver) {
dispatchReceiver = dispatchReceiver.transform(transformer, data)
dispatchReceiver = dispatchReceiver?.transform(transformer, data)
}
if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) {
extensionReceiver = extensionReceiver.transform(transformer, data)
extensionReceiver = extensionReceiver?.transform(transformer, data)
}
argumentList = argumentList.transform(transformer, data)
transformCalleeReference(transformer, data)
@@ -114,11 +114,11 @@ internal class FirImplicitInvokeCallImpl(
explicitReceiver = newExplicitReceiver
}
override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression) {
override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression?) {
dispatchReceiver = newDispatchReceiver
}
override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression) {
override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression?) {
extensionReceiver = newExtensionReceiver
}
@@ -39,8 +39,8 @@ internal class FirIntegerLiteralOperatorCallImpl(
override var argumentList: FirArgumentList,
override var calleeReference: FirNamedReference,
override val origin: FirFunctionCallOrigin,
override var dispatchReceiver: FirExpression,
override var extensionReceiver: FirExpression,
override var dispatchReceiver: FirExpression?,
override var extensionReceiver: FirExpression?,
) : FirIntegerLiteralOperatorCall() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
@@ -48,10 +48,10 @@ internal class FirIntegerLiteralOperatorCallImpl(
typeArguments.forEach { it.accept(visitor, data) }
explicitReceiver?.accept(visitor, data)
if (dispatchReceiver !== explicitReceiver) {
dispatchReceiver.accept(visitor, data)
dispatchReceiver?.accept(visitor, data)
}
if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) {
extensionReceiver.accept(visitor, data)
extensionReceiver?.accept(visitor, data)
}
argumentList.accept(visitor, data)
calleeReference.accept(visitor, data)
@@ -63,10 +63,10 @@ internal class FirIntegerLiteralOperatorCallImpl(
transformTypeArguments(transformer, data)
explicitReceiver = explicitReceiver?.transform(transformer, data)
if (dispatchReceiver !== explicitReceiver) {
dispatchReceiver = dispatchReceiver.transform(transformer, data)
dispatchReceiver = dispatchReceiver?.transform(transformer, data)
}
if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) {
extensionReceiver = extensionReceiver.transform(transformer, data)
extensionReceiver = extensionReceiver?.transform(transformer, data)
}
argumentList = argumentList.transform(transformer, data)
transformCalleeReference(transformer, data)
@@ -94,12 +94,12 @@ internal class FirIntegerLiteralOperatorCallImpl(
}
override fun <D> transformDispatchReceiver(transformer: FirTransformer<D>, data: D): FirIntegerLiteralOperatorCallImpl {
dispatchReceiver = dispatchReceiver.transform(transformer, data)
dispatchReceiver = dispatchReceiver?.transform(transformer, data)
return this
}
override fun <D> transformExtensionReceiver(transformer: FirTransformer<D>, data: D): FirIntegerLiteralOperatorCallImpl {
extensionReceiver = extensionReceiver.transform(transformer, data)
extensionReceiver = extensionReceiver?.transform(transformer, data)
return this
}
@@ -145,11 +145,11 @@ internal class FirIntegerLiteralOperatorCallImpl(
replaceCalleeReference(newCalleeReference)
}
override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression) {
override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression?) {
dispatchReceiver = newDispatchReceiver
}
override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression) {
override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression?) {
extensionReceiver = newExtensionReceiver
}
}
@@ -33,7 +33,7 @@ class FirLazyDelegatedConstructorCall @FirImplementationDetail constructor(
override val annotations: List<FirAnnotation> get() = error("FirLazyDelegatedConstructorCall should be calculated before accessing")
override val argumentList: FirArgumentList get() = error("FirLazyDelegatedConstructorCall should be calculated before accessing")
override val contextReceiverArguments: List<FirExpression> get() = error("FirLazyDelegatedConstructorCall should be calculated before accessing")
override val dispatchReceiver: FirExpression get() = error("FirLazyDelegatedConstructorCall should be calculated before accessing")
override val dispatchReceiver: FirExpression? get() = error("FirLazyDelegatedConstructorCall should be calculated before accessing")
override val isSuper: Boolean get() = !isThis
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
@@ -70,7 +70,7 @@ class FirLazyDelegatedConstructorCall @FirImplementationDetail constructor(
constructedTypeRef = newConstructedTypeRef
}
override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression) {}
override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression?) {}
override fun replaceCalleeReference(newCalleeReference: FirReference) {
calleeReference = newCalleeReference
@@ -33,7 +33,7 @@ class FirMultiDelegatedConstructorCallImpl @FirImplementationDetail constructor(
override val argumentList: FirArgumentList get() = delegatedConstructorCalls.last().argumentList
override val contextReceiverArguments: List<FirExpression> get() = delegatedConstructorCalls.last().contextReceiverArguments
override val constructedTypeRef: FirTypeRef get() = delegatedConstructorCalls.last().constructedTypeRef
override val dispatchReceiver: FirExpression get() = delegatedConstructorCalls.last().dispatchReceiver
override val dispatchReceiver: FirExpression? get() = delegatedConstructorCalls.last().dispatchReceiver
override val calleeReference: FirReference get() = delegatedConstructorCalls.last().calleeReference
override val isThis: Boolean get() = delegatedConstructorCalls.last().isThis
override val isSuper: Boolean get() = !isThis
@@ -72,7 +72,7 @@ class FirMultiDelegatedConstructorCallImpl @FirImplementationDetail constructor(
override fun replaceConstructedTypeRef(newConstructedTypeRef: FirTypeRef) {}
override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression) {}
override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression?) {}
override fun replaceCalleeReference(newCalleeReference: FirReference) {}
@@ -32,8 +32,8 @@ class FirPropertyAccessExpressionImpl @FirImplementationDetail constructor(
override var contextReceiverArguments: MutableOrEmptyList<FirExpression>,
override var typeArguments: MutableOrEmptyList<FirTypeProjection>,
override var explicitReceiver: FirExpression?,
override var dispatchReceiver: FirExpression,
override var extensionReceiver: FirExpression,
override var dispatchReceiver: FirExpression?,
override var extensionReceiver: FirExpression?,
override var source: KtSourceElement?,
override var nonFatalDiagnostics: MutableOrEmptyList<ConeDiagnostic>,
) : FirPropertyAccessExpression() {
@@ -44,10 +44,10 @@ class FirPropertyAccessExpressionImpl @FirImplementationDetail constructor(
typeArguments.forEach { it.accept(visitor, data) }
explicitReceiver?.accept(visitor, data)
if (dispatchReceiver !== explicitReceiver) {
dispatchReceiver.accept(visitor, data)
dispatchReceiver?.accept(visitor, data)
}
if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) {
extensionReceiver.accept(visitor, data)
extensionReceiver?.accept(visitor, data)
}
}
@@ -58,10 +58,10 @@ class FirPropertyAccessExpressionImpl @FirImplementationDetail constructor(
transformTypeArguments(transformer, data)
explicitReceiver = explicitReceiver?.transform(transformer, data)
if (dispatchReceiver !== explicitReceiver) {
dispatchReceiver = dispatchReceiver.transform(transformer, data)
dispatchReceiver = dispatchReceiver?.transform(transformer, data)
}
if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) {
extensionReceiver = extensionReceiver.transform(transformer, data)
extensionReceiver = extensionReceiver?.transform(transformer, data)
}
return this
}
@@ -110,11 +110,11 @@ class FirPropertyAccessExpressionImpl @FirImplementationDetail constructor(
explicitReceiver = newExplicitReceiver
}
override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression) {
override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression?) {
dispatchReceiver = newDispatchReceiver
}
override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression) {
override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression?) {
extensionReceiver = newExtensionReceiver
}
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.FirThisReceiverExpression
import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.references.FirThisReference
import org.jetbrains.kotlin.fir.types.ConeKotlinType
@@ -38,8 +37,8 @@ internal class FirThisReceiverExpressionImpl(
override val isImplicit: Boolean,
) : FirThisReceiverExpression() {
override var explicitReceiver: FirExpression? = null
override var dispatchReceiver: FirExpression = FirNoReceiverExpression
override var extensionReceiver: FirExpression = FirNoReceiverExpression
override var dispatchReceiver: FirExpression? = null
override var extensionReceiver: FirExpression? = null
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
@@ -47,10 +46,10 @@ internal class FirThisReceiverExpressionImpl(
typeArguments.forEach { it.accept(visitor, data) }
explicitReceiver?.accept(visitor, data)
if (dispatchReceiver !== explicitReceiver) {
dispatchReceiver.accept(visitor, data)
dispatchReceiver?.accept(visitor, data)
}
if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) {
extensionReceiver.accept(visitor, data)
extensionReceiver?.accept(visitor, data)
}
calleeReference.accept(visitor, data)
}
@@ -61,10 +60,10 @@ internal class FirThisReceiverExpressionImpl(
transformTypeArguments(transformer, data)
explicitReceiver = explicitReceiver?.transform(transformer, data)
if (dispatchReceiver !== explicitReceiver) {
dispatchReceiver = dispatchReceiver.transform(transformer, data)
dispatchReceiver = dispatchReceiver?.transform(transformer, data)
}
if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) {
extensionReceiver = extensionReceiver.transform(transformer, data)
extensionReceiver = extensionReceiver?.transform(transformer, data)
}
transformCalleeReference(transformer, data)
return this
@@ -110,11 +109,11 @@ internal class FirThisReceiverExpressionImpl(
explicitReceiver = newExplicitReceiver
}
override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression) {
override fun replaceDispatchReceiver(newDispatchReceiver: FirExpression?) {
dispatchReceiver = newDispatchReceiver
}
override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression) {
override fun replaceExtensionReceiver(newExtensionReceiver: FirExpression?) {
extensionReceiver = newExtensionReceiver
}
@@ -15,7 +15,6 @@ import org.jetbrains.kotlin.fir.expressions.builder.buildConstExpression
import org.jetbrains.kotlin.fir.expressions.builder.buildErrorExpression
import org.jetbrains.kotlin.fir.expressions.builder.buildErrorLoop
import org.jetbrains.kotlin.fir.expressions.impl.FirBlockImpl
import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression
import org.jetbrains.kotlin.fir.expressions.impl.FirResolvedArgumentList
import org.jetbrains.kotlin.fir.expressions.impl.FirSingleExpressionBlock
import org.jetbrains.kotlin.fir.references.*
@@ -135,9 +134,9 @@ private fun FirExpression.unwrapAndFlattenArgumentTo(list: MutableList<FirExpres
val FirVariableAssignment.explicitReceiver: FirExpression? get() = unwrapLValue()?.explicitReceiver
val FirVariableAssignment.dispatchReceiver: FirExpression get() = unwrapLValue()?.dispatchReceiver ?: FirNoReceiverExpression
val FirVariableAssignment.dispatchReceiver: FirExpression? get() = unwrapLValue()?.dispatchReceiver
val FirVariableAssignment.extensionReceiver: FirExpression get() = unwrapLValue()?.extensionReceiver ?: FirNoReceiverExpression
val FirVariableAssignment.extensionReceiver: FirExpression? get() = unwrapLValue()?.extensionReceiver
val FirVariableAssignment.calleeReference: FirReference? get() = lValue.toReference()
@@ -160,11 +159,11 @@ fun FirExpression.unwrapSmartcastExpression(): FirExpression =
/**
* A callable reference is bound iff
* - one of [dispatchReceiver] or [extensionReceiver] is **not** [FirNoReceiverExpression] and
* - one of [dispatchReceiver] or [extensionReceiver] is **not** null and
* - it's not referring to a static member.
*/
val FirCallableReferenceAccess.isBound: Boolean
get() = (dispatchReceiver != FirNoReceiverExpression || extensionReceiver != FirNoReceiverExpression) &&
get() = (dispatchReceiver != null || extensionReceiver != null) &&
calleeReference.toResolvedCallableSymbol()?.isStatic != true
val FirQualifiedAccessExpression.allReceiverExpressions: List<FirExpression>
@@ -1,35 +0,0 @@
/*
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir.expressions.impl
import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitor
object FirNoReceiverExpression : FirExpression() {
override val source: KtSourceElement? get() = null
override val coneTypeOrNull: ConeKotlinType? get() = null
override val annotations: List<FirAnnotation> get() = emptyList()
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirNoReceiverExpression {
return this
}
override fun replaceAnnotations(newAnnotations: List<FirAnnotation>) {
throw AssertionError("Mutating annotations of FirNoReceiverExpression is not supported")
}
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirExpression {
return this
}
override fun replaceConeTypeOrNull(newConeTypeOrNull: ConeKotlinType?) {}
}
@@ -662,7 +662,6 @@ class FirRenderer(
is FirExpressionStub -> "STUB"
is FirUnitExpression -> "Unit"
is FirElseIfTrueCondition -> "else"
is FirNoReceiverExpression -> ""
else -> "??? ${expression.javaClass}"
}
)
@@ -748,7 +747,7 @@ class FirRenderer(
override fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall) {
if (delegatedConstructorCall !is FirLazyDelegatedConstructorCall) {
val dispatchReceiver = delegatedConstructorCall.dispatchReceiver
if (dispatchReceiver !is FirNoReceiverExpression) {
if (dispatchReceiver != null) {
dispatchReceiver.accept(this)
print(".")
}
@@ -996,17 +995,17 @@ class FirRenderer(
val extensionReceiver = qualifiedAccess.extensionReceiver
var hasSomeReceiver = true
when {
dispatchReceiver !is FirNoReceiverExpression && extensionReceiver !is FirNoReceiverExpression -> {
dispatchReceiver != null && extensionReceiver != null -> {
print("(")
dispatchReceiver.accept(this)
print(", ")
extensionReceiver.accept(this)
print(")")
}
dispatchReceiver !is FirNoReceiverExpression -> {
dispatchReceiver != null -> {
dispatchReceiver.accept(this)
}
extensionReceiver !is FirNoReceiverExpression -> {
extensionReceiver != null -> {
extensionReceiver.accept(this)
}
explicitReceiver != null -> {
@@ -212,8 +212,7 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
default("argumentList") {
value = "FirEmptyArgumentList"
}
default("dispatchReceiver", "FirNoReceiverExpression")
useTypes(noReceiverExpressionType)
defaultNull("dispatchReceiver")
useTypes(emptyArgumentListType)
}
@@ -26,8 +26,8 @@ object FieldSets {
val receivers by lazy {
fieldSet(
field("explicitReceiver", expression, nullable = true, withReplace = true).withTransform(),
field("dispatchReceiver", expression, withReplace = true),
field("extensionReceiver", expression, withReplace = true)
field("dispatchReceiver", expression, nullable = true, withReplace = true),
field("extensionReceiver", expression, nullable = true, withReplace = true)
)
}
@@ -234,8 +234,8 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
integerLiteralOperatorCall.configure {
// we need methods for transformation of receivers
+field("dispatchReceiver", expression, withReplace = true).withTransform()
+field("extensionReceiver", expression, withReplace = true).withTransform()
+field("dispatchReceiver", expression, nullable = true, withReplace = true).withTransform()
+field("extensionReceiver", expression, nullable = true, withReplace = true).withTransform()
}
comparisonExpression.configure {
@@ -411,7 +411,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
delegatedConstructorCall.configure {
+field("constructedTypeRef", typeRef, withReplace = true)
+field("dispatchReceiver", expression, withReplace = true).withTransform()
+field("dispatchReceiver", expression, nullable = true, withReplace = true).withTransform()
+field("calleeReference", reference, withReplace = true)
generateBooleanFields("this", "super")
}
@@ -56,7 +56,6 @@ val referenceToSimpleExpressionType = generatedType("", "FirExpressionRef<FirExp
val safeCallCheckedSubjectReferenceType = generatedType("", "FirExpressionRef<FirCheckedSafeCallSubject>")
val firModuleDataType = type("fir", "FirModuleData")
val noReceiverExpressionType = generatedType("expressions.impl", "FirNoReceiverExpression", firType = true)
val firImplicitTypeWithoutSourceType = generatedType("types.impl", "FirImplicitTypeRefImplWithoutSource")
val firQualifierPartType = type("fir.types", "FirQualifierPart")
val simpleNamedReferenceType = generatedType("references.impl", "FirSimpleNamedReference")
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.fir.tree.generator.context
import org.jetbrains.kotlin.fir.tree.generator.model.*
import org.jetbrains.kotlin.fir.tree.generator.noReceiverExpressionType
import org.jetbrains.kotlin.fir.tree.generator.util.DummyDelegate
import kotlin.properties.ReadOnlyProperty
import kotlin.reflect.KProperty
@@ -27,9 +26,7 @@ abstract class AbstractBuilderConfigurator<T : AbstractFirTreeBuilder>(val firTr
if (!notNullExplicitReceiver) {
defaultNull("explicitReceiver")
}
default("dispatchReceiver", "FirNoReceiverExpression")
default("extensionReceiver", "FirNoReceiverExpression")
useTypes(noReceiverExpressionType)
defaultNull("dispatchReceiver", "extensionReceiver")
}
fun default(field: String, value: String) {
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.fir.tree.generator.context
import org.jetbrains.kotlin.fir.tree.generator.constructClassLikeTypeImport
import org.jetbrains.kotlin.fir.tree.generator.model.*
import org.jetbrains.kotlin.fir.tree.generator.noReceiverExpressionType
import org.jetbrains.kotlin.fir.tree.generator.printer.call
import org.jetbrains.kotlin.fir.tree.generator.standardClassIdsType
@@ -109,10 +108,7 @@ abstract class AbstractFirTreeImplementationConfigurator {
}
fun defaultNoReceivers() {
defaultNull("explicitReceiver")
default("dispatchReceiver", "FirNoReceiverExpression")
default("extensionReceiver", "FirNoReceiverExpression")
useTypes(noReceiverExpressionType)
defaultNull("explicitReceiver", "dispatchReceiver", "extensionReceiver")
}
fun default(field: String, value: String) {
@@ -223,7 +223,7 @@ fun SmartPrinter.printImplementation(implementation: Implementation) {
println(
"""
|if (dispatchReceiver !== explicitReceiver) {
| dispatchReceiver = dispatchReceiver.transform(transformer, data)
| dispatchReceiver = dispatchReceiver?.transform(transformer, data)
| }
""".trimMargin(),
)
@@ -232,7 +232,7 @@ fun SmartPrinter.printImplementation(implementation: Implementation) {
println(
"""
|if (extensionReceiver !== explicitReceiver && extensionReceiver !== dispatchReceiver) {
| extensionReceiver = extensionReceiver.transform(transformer, data)
| extensionReceiver = extensionReceiver?.transform(transformer, data)
| }
""".trimMargin(),
)