[FIR] Introduce type parameter ref in generated tree
This commit is contained in:
+6
-2
@@ -26,6 +26,10 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
|
||||
fields from typeParametersOwner
|
||||
}
|
||||
|
||||
val typeParameterRefsOwnerBuilder by builder {
|
||||
fields from typeParameterRefsOwner
|
||||
}
|
||||
|
||||
val classBuilder by builder {
|
||||
parents += annotationContainerBuilder
|
||||
fields from klass without listOf("symbol", "resolvePhase")
|
||||
@@ -33,7 +37,7 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
|
||||
|
||||
val regularClassBuilder by builder("AbstractFirRegularClassBuilder") {
|
||||
parents += classBuilder
|
||||
parents += typeParametersOwnerBuilder
|
||||
parents += typeParameterRefsOwnerBuilder
|
||||
fields from regularClass
|
||||
}
|
||||
|
||||
@@ -51,7 +55,7 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
|
||||
|
||||
val functionBuilder by builder {
|
||||
parents += annotationContainerBuilder
|
||||
fields from function without listOf("symbol", "resolvePhase", "controlFlowGraphReference", "receiverTypeRef")
|
||||
fields from function without listOf("symbol", "resolvePhase", "controlFlowGraphReference", "receiverTypeRef", "typeParameters")
|
||||
}
|
||||
|
||||
val loopJumpBuilder by builder {
|
||||
|
||||
+4
-1
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.tree.generator.FirTreeBuilder.declarationStatus
|
||||
import org.jetbrains.kotlin.fir.tree.generator.FirTreeBuilder.expression
|
||||
import org.jetbrains.kotlin.fir.tree.generator.FirTreeBuilder.reference
|
||||
import org.jetbrains.kotlin.fir.tree.generator.FirTreeBuilder.typeParameter
|
||||
import org.jetbrains.kotlin.fir.tree.generator.FirTreeBuilder.typeParameterRef
|
||||
import org.jetbrains.kotlin.fir.tree.generator.FirTreeBuilder.typeProjection
|
||||
import org.jetbrains.kotlin.fir.tree.generator.FirTreeBuilder.typeRef
|
||||
import org.jetbrains.kotlin.fir.tree.generator.FirTreeBuilder.valueParameter
|
||||
@@ -59,7 +60,9 @@ object FieldSets {
|
||||
|
||||
val valueParameters = fieldList(valueParameter)
|
||||
|
||||
val typeParameters = fieldList(typeParameter)
|
||||
val typeParameters = fieldList("typeParameters", typeParameter)
|
||||
|
||||
val typeParameterRefs = fieldList("typeParameters", typeParameterRef)
|
||||
|
||||
val name = field(nameType)
|
||||
|
||||
|
||||
+13
-11
@@ -29,32 +29,34 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
|
||||
val anonymousInitializer = element("AnonymousInitializer", Declaration, declaration, symbolOwner)
|
||||
val typedDeclaration = element("TypedDeclaration", Declaration, declaration, annotationContainer)
|
||||
val callableDeclaration = element("CallableDeclaration", Declaration, typedDeclaration, symbolOwner)
|
||||
val typeParameter = element("TypeParameter", Declaration, declaration, symbolOwner, annotationContainer)
|
||||
val typeParametersOwner = element("TypeParametersOwner", Declaration)
|
||||
val typeParameterRef = element("TypeParameterRef", Declaration)
|
||||
val typeParameter = element("TypeParameter", Declaration, typeParameterRef, declaration, symbolOwner, annotationContainer)
|
||||
val typeParameterRefsOwner = element("TypeParameterRefsOwner", Declaration)
|
||||
val typeParametersOwner = element("TypeParametersOwner", Declaration, typeParameterRefsOwner)
|
||||
val memberDeclaration = element("MemberDeclaration", Declaration, declaration, annotationContainer)
|
||||
val callableMemberDeclaration = element("CallableMemberDeclaration", Declaration, callableDeclaration, memberDeclaration)
|
||||
|
||||
val variable = element("Variable", Declaration, callableDeclaration, declaration, statement)
|
||||
val valueParameter = element("ValueParameter", Declaration, variable)
|
||||
val property = element("Property", Declaration, variable, typeParametersOwner, callableMemberDeclaration)
|
||||
val field = element("Field", Declaration, variable, callableMemberDeclaration)
|
||||
val field = element("Field", Declaration, variable, typeParametersOwner, callableMemberDeclaration)
|
||||
val enumEntry = element("EnumEntry", Declaration, variable, callableMemberDeclaration)
|
||||
|
||||
val classLikeDeclaration = element("ClassLikeDeclaration", Declaration, declaration, statement, symbolOwner)
|
||||
val klass = element("Class", Declaration, classLikeDeclaration, statement, annotationContainer)
|
||||
val regularClass = element("RegularClass", Declaration, memberDeclaration, typeParametersOwner, klass)
|
||||
val klass = element("Class", Declaration, classLikeDeclaration, statement, annotationContainer, typeParameterRefsOwner)
|
||||
val regularClass = element("RegularClass", Declaration, memberDeclaration, typeParameterRefsOwner, klass)
|
||||
val sealedClass = element("SealedClass", Declaration, regularClass)
|
||||
val typeAlias = element("TypeAlias", Declaration, classLikeDeclaration, memberDeclaration, typeParametersOwner)
|
||||
|
||||
val function = element("Function", Declaration, callableDeclaration, targetElement, annotationContainer, typeParametersOwner, statement)
|
||||
val function = element("Function", Declaration, callableDeclaration, targetElement, annotationContainer, typeParameterRefsOwner, statement)
|
||||
|
||||
val contractDescriptionOwner = element("ContractDescriptionOwner", Declaration)
|
||||
val simpleFunction = element("SimpleFunction", Declaration, function, callableMemberDeclaration, contractDescriptionOwner)
|
||||
val propertyAccessor = element("PropertyAccessor", Declaration, function, contractDescriptionOwner)
|
||||
val constructor = element("Constructor", Declaration, function, callableMemberDeclaration)
|
||||
val simpleFunction = element("SimpleFunction", Declaration, function, callableMemberDeclaration, contractDescriptionOwner, typeParametersOwner)
|
||||
val propertyAccessor = element("PropertyAccessor", Declaration, function, contractDescriptionOwner, typeParametersOwner)
|
||||
val constructor = element("Constructor", Declaration, function, callableMemberDeclaration, typeParameterRefsOwner)
|
||||
val file = element("File", Declaration, annotationContainer, declaration)
|
||||
|
||||
val anonymousFunction = element("AnonymousFunction", Declaration, function, expression)
|
||||
val anonymousFunction = element("AnonymousFunction", Declaration, function, expression, typeParametersOwner)
|
||||
val anonymousObject = element("AnonymousObject", Declaration, klass, expression)
|
||||
|
||||
val diagnosticHolder = element("DiagnosticHolder", Diagnostics)
|
||||
@@ -92,7 +94,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
|
||||
val arraySetCall = element("AugmentedArraySetCall", Expression, statement)
|
||||
val classReferenceExpression = element("ClassReferenceExpression", Expression, expression)
|
||||
val errorExpression = element("ErrorExpression", Expression, expression, diagnosticHolder)
|
||||
val errorFunction = element("ErrorFunction", Declaration, function, diagnosticHolder)
|
||||
val errorFunction = element("ErrorFunction", Declaration, function, diagnosticHolder, typeParametersOwner)
|
||||
val qualifiedAccessExpression = element("QualifiedAccessExpression", Expression, expression, qualifiedAccess)
|
||||
val functionCall = element("FunctionCall", Expression, qualifiedAccessExpression, call)
|
||||
val delegatedConstructorCall = element("DelegatedConstructorCall", Expression, resolvable, call)
|
||||
|
||||
+2
@@ -31,6 +31,8 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
|
||||
}
|
||||
}
|
||||
|
||||
impl(typeParameterRef, "FirOuterClassTypeParameterRef")
|
||||
impl(typeParameterRef, "FirConstructedClassTypeParameterRef")
|
||||
|
||||
noImpl(declarationStatus)
|
||||
noImpl(resolvedDeclarationStatus)
|
||||
|
||||
+15
-1
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.fir.tree.generator.FieldSets.superTypeRefs
|
||||
import org.jetbrains.kotlin.fir.tree.generator.FieldSets.symbol
|
||||
import org.jetbrains.kotlin.fir.tree.generator.FieldSets.symbolWithPackage
|
||||
import org.jetbrains.kotlin.fir.tree.generator.FieldSets.typeArguments
|
||||
import org.jetbrains.kotlin.fir.tree.generator.FieldSets.typeParameterRefs
|
||||
import org.jetbrains.kotlin.fir.tree.generator.FieldSets.typeParameters
|
||||
import org.jetbrains.kotlin.fir.tree.generator.FieldSets.typeRefField
|
||||
import org.jetbrains.kotlin.fir.tree.generator.FieldSets.valueParameters
|
||||
@@ -48,10 +49,18 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
||||
+symbolWithPackage("fir.symbols", "AbstractFirBasedSymbol", "E")
|
||||
}
|
||||
|
||||
typeParameterRef.configure {
|
||||
+symbol(typeParameterSymbolType.type)
|
||||
}
|
||||
|
||||
typeParametersOwner.configure {
|
||||
+typeParameters
|
||||
}
|
||||
|
||||
typeParameterRefsOwner.configure {
|
||||
+typeParameterRefs
|
||||
}
|
||||
|
||||
resolvable.configure {
|
||||
+field("calleeReference", reference).withTransform()
|
||||
}
|
||||
@@ -94,10 +103,11 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
||||
errorFunction.configure {
|
||||
parentArg(function, "F", errorFunction)
|
||||
+symbol("FirErrorFunctionSymbol")
|
||||
+typeParameters
|
||||
}
|
||||
|
||||
memberDeclaration.configure {
|
||||
+typeParameters
|
||||
+typeParameterRefs
|
||||
+status.withTransform()
|
||||
}
|
||||
|
||||
@@ -245,6 +255,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
||||
}
|
||||
|
||||
typeAlias.configure {
|
||||
+typeParameters
|
||||
parentArg(classLikeDeclaration, "F", typeAlias)
|
||||
+name
|
||||
+symbol("FirTypeAliasSymbol")
|
||||
@@ -260,6 +271,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
||||
isMutable = true
|
||||
}
|
||||
+booleanField("isLambda")
|
||||
+typeParameters
|
||||
}
|
||||
|
||||
typeParameter.configure {
|
||||
@@ -278,6 +290,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
||||
+name
|
||||
+symbol("FirFunctionSymbol<FirSimpleFunction>")
|
||||
+annotations
|
||||
+typeParameters
|
||||
}
|
||||
|
||||
contractDescriptionOwner.configure {
|
||||
@@ -302,6 +315,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
||||
+booleanField("isSetter")
|
||||
+status.withTransform()
|
||||
+annotations
|
||||
+typeParameters
|
||||
}
|
||||
|
||||
declarationStatus.configure {
|
||||
|
||||
+4
-1
@@ -97,10 +97,13 @@ fun SmartPrinter.printImplementation(implementation: Implementation) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
element.allFields.filter { it.type.contains("Symbol") && it !is FieldList }
|
||||
.takeIf {
|
||||
it.isNotEmpty() && !isInterface && !isAbstract &&
|
||||
!element.type.contains("Reference") && !element.type.contains("ResolvedQualifier")
|
||||
!element.type.contains("Reference")
|
||||
&& !element.type.contains("ResolvedQualifier")
|
||||
&& !element.type.endsWith("Ref")
|
||||
}
|
||||
?.let { symbolFields ->
|
||||
println("init {")
|
||||
|
||||
Reference in New Issue
Block a user