From 6507656496c4c7b335b550abad2f435348ecef15 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Tue, 2 Jun 2020 12:38:09 +0300 Subject: [PATCH] FIR: Remove FirQualifiedAccessWithoutCallee.safe from generated code ^KT-38444 In Progress --- .../kotlin/fir/expressions/FirComponentCall.kt | 1 - .../fir/expressions/FirExpressionWithSmartcast.kt | 1 - .../kotlin/fir/expressions/FirFunctionCall.kt | 1 - .../kotlin/fir/expressions/FirQualifiedAccess.kt | 1 - .../fir/expressions/FirQualifiedAccessExpression.kt | 1 - .../expressions/FirQualifiedAccessWithoutCallee.kt | 1 - .../fir/expressions/FirThisReceiverExpression.kt | 1 - .../kotlin/fir/expressions/FirVariableAssignment.kt | 1 - .../expressions/builder/FirFunctionCallBuilder.kt | 2 -- .../expressions/builder/FirQualifiedAccessBuilder.kt | 1 - .../builder/FirQualifiedAccessExpressionBuilder.kt | 2 -- .../builder/FirThisReceiverExpressionBuilder.kt | 7 ------- .../builder/FirVariableAssignmentBuilder.kt | 2 -- .../fir/expressions/impl/FirComponentCallImpl.kt | 1 - .../fir/expressions/impl/FirFunctionCallImpl.kt | 1 - .../expressions/impl/FirModifiableQualifiedAccess.kt | 1 - .../impl/FirQualifiedAccessExpressionImpl.kt | 1 - .../impl/FirThisReceiverExpressionImpl.kt | 1 - .../expressions/impl/FirVariableAssignmentImpl.kt | 1 - .../kotlin/fir/tree/generator/BuilderConfigurator.kt | 2 -- .../fir/tree/generator/ImplementationConfigurator.kt | 12 +----------- .../kotlin/fir/tree/generator/NodeConfigurator.kt | 1 - 22 files changed, 1 insertion(+), 42 deletions(-) diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirComponentCall.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirComponentCall.kt index 795c0b3ce8a..a89bb85a35c 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirComponentCall.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirComponentCall.kt @@ -21,7 +21,6 @@ abstract class FirComponentCall : FirFunctionCall() { abstract override val source: FirSourceElement? abstract override val typeRef: FirTypeRef abstract override val annotations: List - abstract override val safe: Boolean abstract override val typeArguments: List abstract override val dispatchReceiver: FirExpression abstract override val extensionReceiver: FirExpression diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirExpressionWithSmartcast.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirExpressionWithSmartcast.kt index 7ecf83270cc..c75f30164b0 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirExpressionWithSmartcast.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirExpressionWithSmartcast.kt @@ -21,7 +21,6 @@ abstract class FirExpressionWithSmartcast : FirQualifiedAccessExpression() { abstract override val source: FirSourceElement? abstract override val typeRef: FirTypeRef abstract override val annotations: List - abstract override val safe: Boolean abstract override val typeArguments: List abstract override val explicitReceiver: FirExpression? abstract override val dispatchReceiver: FirExpression diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirFunctionCall.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirFunctionCall.kt index 9a16d8c161e..331c9159560 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirFunctionCall.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirFunctionCall.kt @@ -21,7 +21,6 @@ abstract class FirFunctionCall : FirQualifiedAccessExpression(), FirCall { abstract override val source: FirSourceElement? abstract override val typeRef: FirTypeRef abstract override val annotations: List - abstract override val safe: Boolean abstract override val typeArguments: List abstract override val explicitReceiver: FirExpression? abstract override val dispatchReceiver: FirExpression diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccess.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccess.kt index 0225d0e0c6b..820deee9b74 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccess.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccess.kt @@ -18,7 +18,6 @@ import org.jetbrains.kotlin.fir.visitors.* interface FirQualifiedAccess : FirQualifiedAccessWithoutCallee, FirResolvable { override val source: FirSourceElement? override val annotations: List - override val safe: Boolean override val typeArguments: List override val explicitReceiver: FirExpression? override val dispatchReceiver: FirExpression diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccessExpression.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccessExpression.kt index 4de2b847c36..1fc1fc75f01 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccessExpression.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccessExpression.kt @@ -20,7 +20,6 @@ abstract class FirQualifiedAccessExpression : FirExpression(), FirQualifiedAcces abstract override val source: FirSourceElement? abstract override val typeRef: FirTypeRef abstract override val annotations: List - abstract override val safe: Boolean abstract override val typeArguments: List abstract override val explicitReceiver: FirExpression? abstract override val dispatchReceiver: FirExpression diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccessWithoutCallee.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccessWithoutCallee.kt index dab0b7154f0..d26c291dee3 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccessWithoutCallee.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirQualifiedAccessWithoutCallee.kt @@ -17,7 +17,6 @@ import org.jetbrains.kotlin.fir.visitors.* interface FirQualifiedAccessWithoutCallee : FirStatement { override val source: FirSourceElement? override val annotations: List - val safe: Boolean val typeArguments: List val explicitReceiver: FirExpression? val dispatchReceiver: FirExpression diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirThisReceiverExpression.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirThisReceiverExpression.kt index 26bbd102878..9e0217f2532 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirThisReceiverExpression.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirThisReceiverExpression.kt @@ -21,7 +21,6 @@ abstract class FirThisReceiverExpression : FirQualifiedAccessExpression() { abstract override val source: FirSourceElement? abstract override val typeRef: FirTypeRef abstract override val annotations: List - abstract override val safe: Boolean abstract override val typeArguments: List abstract override val explicitReceiver: FirExpression? abstract override val dispatchReceiver: FirExpression diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirVariableAssignment.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirVariableAssignment.kt index 9135da5c31d..3364c454925 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirVariableAssignment.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirVariableAssignment.kt @@ -19,7 +19,6 @@ import org.jetbrains.kotlin.fir.visitors.* abstract class FirVariableAssignment : FirPureAbstractElement(), FirQualifiedAccess { abstract override val source: FirSourceElement? abstract override val annotations: List - abstract override val safe: Boolean abstract override val typeArguments: List abstract override val explicitReceiver: FirExpression? abstract override val dispatchReceiver: FirExpression diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirFunctionCallBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirFunctionCallBuilder.kt index b2d64951c98..db38f28648f 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirFunctionCallBuilder.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirFunctionCallBuilder.kt @@ -38,7 +38,6 @@ open class FirFunctionCallBuilder : FirQualifiedAccessBuilder, FirCallBuilder, F override var source: FirSourceElement? = null override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null) override val annotations: MutableList = mutableListOf() - override var safe: Boolean = false override val typeArguments: MutableList = mutableListOf() override var explicitReceiver: FirExpression? = null override var dispatchReceiver: FirExpression = FirNoReceiverExpression @@ -52,7 +51,6 @@ open class FirFunctionCallBuilder : FirQualifiedAccessBuilder, FirCallBuilder, F source, typeRef, annotations, - safe, typeArguments, explicitReceiver, dispatchReceiver, diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirQualifiedAccessBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirQualifiedAccessBuilder.kt index 22207d3e8b3..ede4da1cf66 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirQualifiedAccessBuilder.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirQualifiedAccessBuilder.kt @@ -22,7 +22,6 @@ import org.jetbrains.kotlin.fir.visitors.* interface FirQualifiedAccessBuilder { abstract var source: FirSourceElement? abstract val annotations: MutableList - abstract var safe: Boolean abstract val typeArguments: MutableList abstract var explicitReceiver: FirExpression? abstract var dispatchReceiver: FirExpression diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirQualifiedAccessExpressionBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirQualifiedAccessExpressionBuilder.kt index e23d8483c54..1fd5de085a9 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirQualifiedAccessExpressionBuilder.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirQualifiedAccessExpressionBuilder.kt @@ -33,7 +33,6 @@ class FirQualifiedAccessExpressionBuilder : FirQualifiedAccessBuilder, FirAnnota override var source: FirSourceElement? = null override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null) override val annotations: MutableList = mutableListOf() - override var safe: Boolean = false override val typeArguments: MutableList = mutableListOf() override var explicitReceiver: FirExpression? = null override var dispatchReceiver: FirExpression = FirNoReceiverExpression @@ -45,7 +44,6 @@ class FirQualifiedAccessExpressionBuilder : FirQualifiedAccessBuilder, FirAnnota source, typeRef, annotations, - safe, typeArguments, explicitReceiver, dispatchReceiver, diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirThisReceiverExpressionBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirThisReceiverExpressionBuilder.kt index dc62c011a10..41f04dd7f90 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirThisReceiverExpressionBuilder.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirThisReceiverExpressionBuilder.kt @@ -48,13 +48,6 @@ class FirThisReceiverExpressionBuilder : FirQualifiedAccessBuilder, FirAnnotatio } - @Deprecated("Modification of 'safe' has no impact for FirThisReceiverExpressionBuilder", level = DeprecationLevel.HIDDEN) - override var safe: Boolean - get() = throw IllegalStateException() - set(value) { - throw IllegalStateException() - } - @Deprecated("Modification of 'explicitReceiver' has no impact for FirThisReceiverExpressionBuilder", level = DeprecationLevel.HIDDEN) override var explicitReceiver: FirExpression? get() = throw IllegalStateException() diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirVariableAssignmentBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirVariableAssignmentBuilder.kt index 35d3ae97e69..d960b265676 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirVariableAssignmentBuilder.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirVariableAssignmentBuilder.kt @@ -29,7 +29,6 @@ import org.jetbrains.kotlin.fir.visitors.* class FirVariableAssignmentBuilder : FirQualifiedAccessBuilder, FirAnnotationContainerBuilder { override var source: FirSourceElement? = null override val annotations: MutableList = mutableListOf() - override var safe: Boolean by kotlin.properties.Delegates.notNull() override val typeArguments: MutableList = mutableListOf() override var explicitReceiver: FirExpression? = null override var dispatchReceiver: FirExpression = FirNoReceiverExpression @@ -41,7 +40,6 @@ class FirVariableAssignmentBuilder : FirQualifiedAccessBuilder, FirAnnotationCon return FirVariableAssignmentImpl( source, annotations, - safe, typeArguments, explicitReceiver, dispatchReceiver, diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirComponentCallImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirComponentCallImpl.kt index 1cfd6202419..724e9270c9e 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirComponentCallImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirComponentCallImpl.kt @@ -37,7 +37,6 @@ internal class FirComponentCallImpl( override val componentIndex: Int, ) : FirComponentCall() { override var typeRef: FirTypeRef = FirImplicitTypeRefImpl(null) - override val safe: Boolean get() = false override var calleeReference: FirNamedReference = FirSimpleNamedReference(source, Name.identifier("component$componentIndex"), null) override fun acceptChildren(visitor: FirVisitor, data: D) { diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirFunctionCallImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirFunctionCallImpl.kt index 405622485a5..2e52145c78b 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirFunctionCallImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirFunctionCallImpl.kt @@ -27,7 +27,6 @@ open class FirFunctionCallImpl @FirImplementationDetail constructor( override val source: FirSourceElement?, override var typeRef: FirTypeRef, override val annotations: MutableList, - override var safe: Boolean, override val typeArguments: MutableList, override var explicitReceiver: FirExpression?, override var dispatchReceiver: FirExpression, diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirModifiableQualifiedAccess.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirModifiableQualifiedAccess.kt index a6661726f48..d78629ba608 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirModifiableQualifiedAccess.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirModifiableQualifiedAccess.kt @@ -21,7 +21,6 @@ import org.jetbrains.kotlin.fir.visitors.* interface FirModifiableQualifiedAccess : FirQualifiedAccessWithoutCallee { override val source: FirSourceElement? override val annotations: MutableList - override var safe: Boolean override val typeArguments: MutableList override var explicitReceiver: FirExpression? override var dispatchReceiver: FirExpression diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirQualifiedAccessExpressionImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirQualifiedAccessExpressionImpl.kt index 512b2a3532c..7e8c6ec9d89 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirQualifiedAccessExpressionImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirQualifiedAccessExpressionImpl.kt @@ -24,7 +24,6 @@ internal class FirQualifiedAccessExpressionImpl( override val source: FirSourceElement?, override var typeRef: FirTypeRef, override val annotations: MutableList, - override var safe: Boolean, override val typeArguments: MutableList, override var explicitReceiver: FirExpression?, override var dispatchReceiver: FirExpression, diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirThisReceiverExpressionImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirThisReceiverExpressionImpl.kt index 13bdca4cdda..87672911ff9 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirThisReceiverExpressionImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirThisReceiverExpressionImpl.kt @@ -29,7 +29,6 @@ internal class FirThisReceiverExpressionImpl( override val typeArguments: MutableList, override var calleeReference: FirThisReference, ) : FirThisReceiverExpression(), FirModifiableQualifiedAccess { - override var safe: Boolean = false override var explicitReceiver: FirExpression? = null override var dispatchReceiver: FirExpression = FirNoReceiverExpression override var extensionReceiver: FirExpression = FirNoReceiverExpression diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirVariableAssignmentImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirVariableAssignmentImpl.kt index b7726327275..4b604d28693 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirVariableAssignmentImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirVariableAssignmentImpl.kt @@ -22,7 +22,6 @@ import org.jetbrains.kotlin.fir.visitors.* internal class FirVariableAssignmentImpl( override val source: FirSourceElement?, override val annotations: MutableList, - override var safe: Boolean, override val typeArguments: MutableList, override var explicitReceiver: FirExpression?, override var dispatchReceiver: FirExpression, diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/BuilderConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/BuilderConfigurator.kt index c1e07062130..d903d4f0793 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/BuilderConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/BuilderConfigurator.kt @@ -150,7 +150,6 @@ object BuilderConfigurator : AbstractBuilderConfigurator(FirTree builder(functionCall) { parents += qualifiedAccessBuilder parents += callBuilder - defaultFalse("safe") defaultNoReceivers() openBuilder() default("argumentList") { @@ -161,7 +160,6 @@ object BuilderConfigurator : AbstractBuilderConfigurator(FirTree builder(qualifiedAccessExpression) { parents += qualifiedAccessBuilder - defaultFalse("safe") defaultNoReceivers() } diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt index 05a03e0d06b..5bb83e3979d 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt @@ -76,19 +76,13 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator() impl(arrayOfCall) - val modifiableQualifiedAccess = impl(qualifiedAccessWithoutCallee, "FirModifiableQualifiedAccess") { - isMutable("safe") - } + val modifiableQualifiedAccess = impl(qualifiedAccessWithoutCallee, "FirModifiableQualifiedAccess") {} impl(callableReferenceAccess) { parents += modifiableQualifiedAccess } impl(componentCall) { - default("safe") { - value = "false" - withGetter = true - } default("calleeReference", "FirSimpleNamedReference(source, Name.identifier(\"component\$componentIndex\"), null)") useTypes(simpleNamedReferenceType, nameType) optInToInternals() @@ -255,10 +249,6 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator() impl(thisReceiverExpression) { parents += modifiableQualifiedAccess - default("safe") { - value = "false" - withGetter = true - } defaultNoReceivers() } diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt index 07b195ba87c..342a3f3c213 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt @@ -185,7 +185,6 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild } qualifiedAccessWithoutCallee.configure { - +booleanField("safe") +typeArguments.withTransform() +receivers }