[FIR/IR generator] Add kDoc property to AbstractElement & AbstractField

This commit is contained in:
Sergej Jaskiewicz
2023-09-19 18:38:09 +02:00
committed by Space Team
parent 51325ba630
commit 7e7f4811bd
9 changed files with 36 additions and 3 deletions
@@ -30,6 +30,8 @@ class Element(override val name: String, kind: Kind) : AbstractElement<Element,
override val nullable: Boolean override val nullable: Boolean
get() = false get() = false
override var kDoc: String? = null
override val fields = mutableSetOf<Field>() override val fields = mutableSetOf<Field>()
override val type: String = "Fir$name" override val type: String = "Fir$name"
override val packageName: String = BASE_PACKAGE + kind.packageName.let { if (it.isBlank()) it else "." + it } override val packageName: String = BASE_PACKAGE + kind.packageName.let { if (it.isBlank()) it else "." + it }
@@ -63,6 +63,7 @@ sealed class Field : AbstractField() {
} }
copy.fromParent = fromParent copy.fromParent = fromParent
copy.parentHasSeparateTransform = parentHasSeparateTransform copy.parentHasSeparateTransform = parentHasSeparateTransform
copy.kDoc = kDoc
} }
protected abstract fun internalCopy(): Field protected abstract fun internalCopy(): Field
@@ -39,6 +39,7 @@ fun SmartPrinter.printElement(element: Element) {
} }
} }
printKDoc(kDoc)
print("${kind!!.title} $type") print("${kind!!.title} $type")
print(typeParameters()) print(typeParameters())
val parentRefs = element.parentRefs val parentRefs = element.parentRefs
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.fir.tree.generator.printer package org.jetbrains.kotlin.fir.tree.generator.printer
import org.jetbrains.kotlin.fir.tree.generator.model.Field import org.jetbrains.kotlin.fir.tree.generator.model.Field
import org.jetbrains.kotlin.generators.tree.printer.printKDoc
import org.jetbrains.kotlin.utils.SmartPrinter import org.jetbrains.kotlin.utils.SmartPrinter
import org.jetbrains.kotlin.utils.withIndent import org.jetbrains.kotlin.utils.withIndent
@@ -17,6 +18,10 @@ fun SmartPrinter.printField(
inConstructor: Boolean = false, inConstructor: Boolean = false,
modifiers: SmartPrinter.() -> Unit = {}, modifiers: SmartPrinter.() -> Unit = {},
) { ) {
if (!override && field.kDoc != null) {
println()
printKDoc(field.kDoc)
}
if (!field.isVal && field.isVolatile) { if (!field.isVal && field.isVolatile) {
println("@Volatile") println("@Volatile")
} }
@@ -77,7 +77,9 @@ class Element(
val generationCallback = config.generationCallback val generationCallback = config.generationCallback
val propertyName = config.propertyName val propertyName = config.propertyName
val kDoc = config.kDoc
override val kDoc = config.kDoc
val additionalImports: List<Import> = config.additionalImports val additionalImports: List<Import> = config.additionalImports
override fun toString() = name override fun toString() = name
@@ -126,7 +128,9 @@ sealed class Field(
abstract val transformable: Boolean abstract val transformable: Boolean
val useInIrFactoryStrategy = config.useFieldInIrFactoryStrategy val useInIrFactoryStrategy = config.useFieldInIrFactoryStrategy
val kdoc = config.kdoc init {
kDoc = config.kdoc
}
val printProperty = config.printProperty val printProperty = config.printProperty
val generationCallback = config.generationCallback val generationCallback = config.generationCallback
@@ -70,7 +70,7 @@ fun printElements(generationPath: File, model: Model) = sequence {
addAnnotation(descriptorApiAnnotation) addAnnotation(descriptorApiAnnotation)
} }
field.kdoc?.let { field.kDoc?.let {
addKdoc(it) addKdoc(it)
} }
@@ -16,6 +16,8 @@ abstract class AbstractElement<Element, Field> : ElementOrRef<Element, Field>, F
abstract val name: String abstract val name: String
abstract val kDoc: String?
abstract val fields: Set<Field> abstract val fields: Set<Field>
abstract val params: List<TypeVariable> abstract val params: List<TypeVariable>
@@ -14,6 +14,8 @@ abstract class AbstractField {
val nullable: Boolean val nullable: Boolean
get() = typeRef.nullable get() = typeRef.nullable
var kDoc: String? = null
abstract val isVolatile: Boolean abstract val isVolatile: Boolean
abstract val isFinal: Boolean abstract val isFinal: Boolean
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.generators.tree.printer
import org.jetbrains.kotlin.generators.tree.AbstractElement import org.jetbrains.kotlin.generators.tree.AbstractElement
import org.jetbrains.kotlin.generators.tree.ImplementationKind import org.jetbrains.kotlin.generators.tree.ImplementationKind
import org.jetbrains.kotlin.utils.SmartPrinter
/** /**
* The angle bracket-delimited list of type parameters to print, or empty string if the element has no type parameters. * The angle bracket-delimited list of type parameters to print, or empty string if the element has no type parameters.
@@ -51,3 +52,18 @@ val AbstractElement<*, *>.generics: String
get() = params.takeIf { it.isNotEmpty() } get() = params.takeIf { it.isNotEmpty() }
?.let { it.joinToString(", ", "<", ">") { it.name } } ?.let { it.joinToString(", ", "<", ">") { it.name } }
?: "" ?: ""
fun SmartPrinter.printKDoc(kDoc: String?) {
if (kDoc == null) return
println("/**")
for (line in kDoc.lineSequence()) {
print(" *")
if (line.isBlank()) {
println()
} else {
print(" ")
println(line)
}
}
println(" */")
}