[FIR] Delay configuration of nodes in tree generator
This commit is contained in:
+2
-2
@@ -32,8 +32,8 @@ import org.jetbrains.kotlin.fir.tree.generator.context.type
|
||||
import org.jetbrains.kotlin.fir.tree.generator.model.*
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
|
||||
|
||||
object NodeConfigurator : AbstractFieldConfigurator() {
|
||||
fun configureFields() = with(FirTreeBuilder) {
|
||||
object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuilder) {
|
||||
fun configureFields() = configure {
|
||||
AbstractFirTreeBuilder.baseFirElement.configure {
|
||||
+field("source", sourceElementType, nullable = true)
|
||||
}
|
||||
|
||||
+8
-3
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.fir.tree.generator.context
|
||||
|
||||
import org.jetbrains.kotlin.fir.tree.generator.model.*
|
||||
|
||||
abstract class AbstractFieldConfigurator {
|
||||
abstract class AbstractFieldConfigurator<T : AbstractFirTreeBuilder>(private val builder: T) {
|
||||
inner class ConfigureContext(val element: Element) {
|
||||
operator fun FieldSet.unaryPlus() {
|
||||
element.fields.addAll(this.map { it.copy() })
|
||||
@@ -78,7 +78,12 @@ abstract class AbstractFieldConfigurator {
|
||||
}
|
||||
}
|
||||
|
||||
inline fun Element.configure(block: ConfigureContext.() -> Unit) {
|
||||
ConfigureContext(this).block()
|
||||
fun Element.configure(block: ConfigureContext.() -> Unit) {
|
||||
builder.configurations[this] = { ConfigureContext(this).block() }
|
||||
}
|
||||
|
||||
fun configure(init: T.() -> Unit) {
|
||||
builder.init()
|
||||
builder.applyConfigurations()
|
||||
}
|
||||
}
|
||||
+8
@@ -32,6 +32,14 @@ abstract class AbstractFirTreeBuilder {
|
||||
it.parents.addAll(dependencies)
|
||||
elements += it
|
||||
}
|
||||
|
||||
val configurations: MutableMap<Element, () -> Unit> = mutableMapOf()
|
||||
|
||||
fun applyConfigurations() {
|
||||
for (element in elements) {
|
||||
configurations[element]?.invoke()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun generatedType(type: String): Type = generatedType("", type)
|
||||
|
||||
Reference in New Issue
Block a user