[FIR] Add transformAnnotations for fir nodes

This commit is contained in:
Dmitriy Novozhilov
2020-03-30 11:28:28 +03:00
parent 3190793b62
commit 28738971bc
168 changed files with 625 additions and 60 deletions
@@ -37,7 +37,7 @@ object FieldSets {
val declarations = fieldList(declaration)
val annotations =
fieldList("annotations", annotationCall)
fieldList("annotations", annotationCall).withTransform(needTransformInOtherChildren = true)
fun symbolWithPackage(packageName: String?, symbolClassName: String, argument: String? = null): Field {
return field("symbol", type(packageName, symbolClassName), argument)
@@ -80,6 +80,7 @@ class Element(val name: String, kind: Kind) : AbstractElement {
val existingField = result.first { it == field }
existingField.fromParent = true
existingField.needsSeparateTransform = existingField.needsSeparateTransform || field.needsSeparateTransform
existingField.needTransformInOtherChildren = existingField.needTransformInOtherChildren || field.needTransformInOtherChildren
}
}
result.toList().asReversed()
@@ -87,6 +87,9 @@ infix fun FieldSet.with(set: FieldSet): FieldSet {
return this + set
}
fun Field.withTransform(): Field = copy().apply { needsSeparateTransform = true }
fun Field.withTransform(needTransformInOtherChildren: Boolean = false): Field = copy().apply {
needsSeparateTransform = true
this.needTransformInOtherChildren = needTransformInOtherChildren
}
fun FieldSet.withTransform(): FieldSet = this.map { it.withTransform() }
@@ -16,6 +16,7 @@ sealed class Field : Importable {
var fromParent: Boolean = false
open var needsSeparateTransform: Boolean = false
open var needTransformInOtherChildren: Boolean = false
open val defaultValueInImplementation: String? get() = null
abstract var isMutable: Boolean
@@ -34,6 +35,7 @@ sealed class Field : Importable {
copy.arguments.clear()
copy.arguments.addAll(arguments)
copy.needsSeparateTransform = needsSeparateTransform
copy.needTransformInOtherChildren = needTransformInOtherChildren
copy.isMutable = isMutable
}
copy.fromParent = fromParent
@@ -71,6 +73,10 @@ class FieldWithDefault(val origin: Field) : Field() {
get() = origin.needsSeparateTransform
set(_) {}
override var needTransformInOtherChildren: Boolean
get() = origin.needTransformInOtherChildren
set(_) {}
override val arguments: MutableList<Importable>
get() = origin.arguments
@@ -228,7 +228,9 @@ fun SmartPrinter.printImplementation(implementation: Implementation) {
}
field.needsSeparateTransform -> {
println("transform${field.name.capitalize()}(transformer, data)")
if (!(element.needTransformOtherChildren && field.needTransformInOtherChildren)) {
println("transform${field.name.capitalize()}(transformer, data)")
}
}
!element.needTransformOtherChildren -> {
@@ -295,6 +297,9 @@ fun SmartPrinter.printImplementation(implementation: Implementation) {
if (!field.needsSeparateTransform) {
field.transform()
}
if (field.needTransformInOtherChildren) {
println("transform${field.name.capitalize()}(transformer, data)")
}
}
println("return this")
}