[FIR] Introduce FirArgumentList node

This commit is contained in:
Mikhail Glukhikh
2020-03-11 12:30:41 +03:00
parent 476d3c4092
commit 91d51b93e1
71 changed files with 596 additions and 407 deletions
@@ -101,6 +101,10 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
builder(annotationCall) {
parents += callBuilder
default("argumentList") {
value = "FirEmptyArgumentList"
}
useTypes(emptyArgumentListType)
}
builder(arrayOfCall) {
@@ -122,6 +126,10 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
builder(componentCall) {
parents += callBuilder
default("argumentList") {
value = "FirEmptyArgumentList"
}
useTypes(emptyArgumentListType)
}
builder(whileLoop) {
@@ -140,6 +148,10 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
builder(delegatedConstructorCall) {
parents += callBuilder
default("argumentList") {
value = "FirEmptyArgumentList"
}
useTypes(emptyArgumentListType)
}
builder(functionCall) {
@@ -148,6 +160,10 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
defaultFalse("safe")
defaultNoReceivers()
openBuilder()
default("argumentList") {
value = "FirEmptyArgumentList"
}
useTypes(emptyArgumentListType)
}
builder(qualifiedAccessExpression) {
@@ -172,6 +188,10 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
builder(typeOperatorCall) {
parents += callBuilder
default("argumentList") {
value = "FirEmptyArgumentList"
}
useTypes(emptyArgumentListType)
}
builder(stringConcatenationCall) {
@@ -76,6 +76,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
val typeProjection = element("TypeProjection", TypeRef)
val starProjection = element("StarProjection", TypeRef, typeProjection)
val typeProjectionWithVariance = element("TypeProjectionWithVariance", TypeRef, typeProjection)
val argumentList = element("ArgumentList", Expression)
val call = element("Call", Expression, statement) // TODO: may smth like `CallWithArguments` or `ElementWithArguments`?
val annotationCall = element("AnnotationCall", Expression, expression, call)
val operatorCall = element("OperatorCall", Expression, expression, call)
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.fir.tree.generator
import org.jetbrains.kotlin.fir.tree.generator.context.AbstractFirTreeImplementationConfigurator
import org.jetbrains.kotlin.fir.tree.generator.model.Implementation.Kind.Object
import org.jetbrains.kotlin.fir.tree.generator.model.Implementation.Kind.OpenClass
import org.jetbrains.kotlin.fir.tree.generator.model.Type
object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator() {
fun configureImplementations() {
@@ -89,10 +88,6 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
impl(arraySetCall) {
parents += modifiableQualifiedAccess
default("arguments") {
value = "indexes + rValue"
withGetter = true
}
default("lValue") {
value = "calleeReference"
customSetter = "calleeReference = value"
@@ -174,7 +169,7 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
impl(getClassCall) {
default("argument") {
value = "arguments.first()"
value = "argumentList.arguments.first()"
withGetter = true
}
}
@@ -105,10 +105,14 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
+annotations
}
call.configure {
argumentList.configure {
+arguments.withTransform()
}
call.configure {
+field(argumentList, withReplace = true)
}
block.configure {
+fieldList(statement).withTransform()
+typeRefField
@@ -60,7 +60,7 @@ val delegateFieldSymbolType = type("fir.symbols.impl", "FirDelegateFieldSymbol")
val classSymbolType = type("fir.symbols.impl", "FirClassSymbol")
val classLikeSymbolType = type("fir.symbols.impl", "FirClassLikeSymbol<*>")
val typeParameterSymbolType = type("fir.symbols.impl", "FirTypeParameterSymbol")
val emptyArgumentListType = type("fir.expressions", "FirEmptyArgumentList")
val firScopeProviderType = type("fir.scopes", "FirScopeProvider")
val pureAbstractElementType = generatedType("FirPureAbstractElement")