[FIR] Support dispatch & extension receiver in component calls

This commit is contained in:
Mikhail Glukhikh
2020-04-08 17:08:03 +03:00
parent a93c7a39e0
commit cd5a4900e6
35 changed files with 25 additions and 45 deletions
@@ -125,6 +125,7 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
builder(componentCall) {
parents += callBuilder
defaultNoReceivers(notNullExplicitReceiver = true)
default("argumentList") {
value = "FirEmptyArgumentList"
}
@@ -97,14 +97,8 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
value = "false"
withGetter = true
}
listOf("dispatchReceiver", "extensionReceiver").forEach {
default(it) {
value = "FirNoReceiverExpression"
withGetter = true
}
}
default("calleeReference", "FirSimpleNamedReference(source, Name.identifier(\"component\$componentIndex\"), null)")
useTypes(simpleNamedReferenceType, nameType, noReceiverExpressionType)
useTypes(simpleNamedReferenceType, nameType)
optInToInternals()
}
@@ -23,8 +23,10 @@ abstract class AbstractBuilderConfigurator<T : AbstractFirTreeBuilder>(val firTr
types.forEach { builder.usedTypes += it }
}
fun defaultNoReceivers() {
defaultNull("explicitReceiver")
fun defaultNoReceivers(notNullExplicitReceiver: Boolean = false) {
if (!notNullExplicitReceiver) {
defaultNull("explicitReceiver")
}
default("dispatchReceiver", "FirNoReceiverExpression")
default("extensionReceiver", "FirNoReceiverExpression")
useTypes(noReceiverExpressionType)