[FIR] Add special node for implicit invoke calls

This commit is contained in:
Dmitriy Novozhilov
2020-09-18 15:35:19 +03:00
parent 696c8f07b4
commit a8e81e9ad1
17 changed files with 405 additions and 42 deletions
@@ -65,6 +65,12 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
fields from constructor without listOf("isPrimary", "attributes")
}
val abstractFunctionCallBuilder by builder {
parents += qualifiedAccessBuilder
parents += callBuilder
fields from functionCall
}
for (constructorType in listOf("FirPrimaryConstructor", "FirConstructorImpl")) {
builder(constructor, constructorType) {
parents += abstractConstructorBuilder
@@ -148,9 +154,8 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
useTypes(emptyArgumentListType)
}
builder(functionCall) {
parents += qualifiedAccessBuilder
parents += callBuilder
val configurationForFunctionCallBuilder: LeafBuilderConfigurationContext.() -> Unit = {
parents += abstractFunctionCallBuilder
defaultNoReceivers()
openBuilder()
default("argumentList") {
@@ -159,6 +164,9 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
useTypes(emptyArgumentListType)
}
builder(functionCall, init = configurationForFunctionCallBuilder)
builder(implicitInvokeCall, init = configurationForFunctionCallBuilder)
builder(qualifiedAccessExpression) {
parents += qualifiedAccessBuilder
defaultNoReceivers()
@@ -102,6 +102,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
val errorProperty = element("ErrorProperty", Declaration, variable, diagnosticHolder, typeParametersOwner)
val qualifiedAccessExpression = element("QualifiedAccessExpression", Expression, expression, qualifiedAccess)
val functionCall = element("FunctionCall", Expression, qualifiedAccessExpression, call)
val implicitInvokeCall = element("ImplicitInvokeCall", Expression, functionCall)
val delegatedConstructorCall = element("DelegatedConstructorCall", Expression, resolvable, call)
val componentCall = element("ComponentCall", Expression, functionCall)
val callableReferenceAccess = element("CallableReferenceAccess", Expression, qualifiedAccessExpression)