[FIR] Introduce FirDeclarationAttributes for FirDeclaration

This commit is contained in:
Dmitriy Novozhilov
2020-05-07 17:29:21 +03:00
parent b348ae689a
commit 239837fd14
71 changed files with 181 additions and 9 deletions
@@ -6,10 +6,7 @@
package org.jetbrains.kotlin.fir.tree.generator
import org.jetbrains.kotlin.fir.tree.generator.context.AbstractBuilderConfigurator
import org.jetbrains.kotlin.fir.tree.generator.model.Element
import org.jetbrains.kotlin.fir.tree.generator.model.Field
import org.jetbrains.kotlin.fir.tree.generator.model.Implementation
import org.jetbrains.kotlin.fir.tree.generator.model.LeafBuilder
import org.jetbrains.kotlin.fir.tree.generator.model.*
import org.jetbrains.kotlin.fir.tree.generator.util.traverseParents
object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTreeBuilder) {
@@ -32,13 +29,13 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
val classBuilder by builder {
parents += annotationContainerBuilder
fields from klass without listOf("symbol", "resolvePhase")
fields from klass without listOf("symbol", "resolvePhase", "attributes")
}
val regularClassBuilder by builder("AbstractFirRegularClassBuilder") {
parents += classBuilder
parents += typeParameterRefsOwnerBuilder
fields from regularClass
fields from regularClass without "attributes"
}
val qualifiedAccessBuilder by builder {
@@ -55,7 +52,7 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
val functionBuilder by builder {
parents += annotationContainerBuilder
fields from function without listOf("symbol", "resolvePhase", "controlFlowGraphReference", "receiverTypeRef", "typeParameters")
fields from function without listOf("symbol", "resolvePhase", "controlFlowGraphReference", "receiverTypeRef", "typeParameters", "attributes")
}
val loopJumpBuilder by builder {
@@ -64,7 +61,7 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
val abstractConstructorBuilder by builder {
parents += functionBuilder
fields from constructor without "isPrimary"
fields from constructor without listOf("isPrimary", "attributes")
}
for (constructorType in listOf("FirPrimaryConstructor", "FirConstructorImpl")) {
@@ -330,6 +327,13 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
) {
defaultNull(it)
}
// configureFieldInAllIntermediateBuilders(
// field = "attributes",
// fieldPredicate = { it.type == declarationAttributesType.type }
// ) {
//
// }
}
private inline fun findImplementationsWithElementInParents(
@@ -364,4 +368,18 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
}
}
private fun configureFieldInAllIntermediateBuilders(
field: String,
builderPredicate: ((IntermediateBuilder) -> Boolean)? = null,
fieldPredicate: ((Field) -> Boolean)? = null,
init: IntermediateBuilderConfigurationContext.(field: String) -> Unit
) {
for (builder in FirTreeBuilder.intermediateBuilders) {
if (builderPredicate != null && !builderPredicate(builder)) continue
if (!builder.allFields.any { it.name == field }) continue
if (fieldPredicate != null && !fieldPredicate(builder[field])) continue
IntermediateBuilderConfigurationContext(builder).init(field)
}
}
}
@@ -494,5 +494,12 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
default(it, "FirImplicitTypeRefImpl(null)")
useTypes(implicitTypeRefType)
}
configureFieldInAllImplementations(
field = "attributes",
fieldPredicate = { it.type == declarationAttributesType.type }
) {
default(it, "${declarationAttributesType.type}()")
}
}
}
@@ -74,6 +74,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
+field("session", firSessionType)
+field("resolvePhase", resolvePhaseType, withReplace = true).apply { isMutable = true }
+field("origin", declarationOriginType)
+field("attributes", declarationAttributesType)
}
typedDeclaration.configure {
@@ -70,4 +70,5 @@ val coneStubDiagnosticType = generatedType("diagnostics", "ConeStubDiagnostic")
val dslBuilderAnnotationType = generatedType("builder", "FirBuilderDsl")
val firImplementationDetailType = generatedType("FirImplementationDetail")
val declarationOriginType = generatedType("declarations", "FirDeclarationOrigin")
val declarationOriginType = generatedType("declarations", "FirDeclarationOrigin")
val declarationAttributesType = generatedType("declarations", "FirDeclarationAttributes")