diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Element.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Element.kt index d3d9b99792d..a7dd7c132fc 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Element.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Element.kt @@ -30,6 +30,8 @@ class Element(override val name: String, kind: Kind) : AbstractElement() override val type: String = "Fir$name" override val packageName: String = BASE_PACKAGE + kind.packageName.let { if (it.isBlank()) it else "." + it } diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Field.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Field.kt index 65d54456c3f..0f7cf04d170 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Field.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/model/Field.kt @@ -63,6 +63,7 @@ sealed class Field : AbstractField() { } copy.fromParent = fromParent copy.parentHasSeparateTransform = parentHasSeparateTransform + copy.kDoc = kDoc } protected abstract fun internalCopy(): Field diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/element.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/element.kt index 22c3e301a8a..0f53a4d0217 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/element.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/element.kt @@ -39,6 +39,7 @@ fun SmartPrinter.printElement(element: Element) { } } + printKDoc(kDoc) print("${kind!!.title} $type") print(typeParameters()) val parentRefs = element.parentRefs diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/field.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/field.kt index 33e66e18e10..8358e4aae36 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/field.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/field.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.fir.tree.generator.printer 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.withIndent @@ -17,6 +18,10 @@ fun SmartPrinter.printField( inConstructor: Boolean = false, modifiers: SmartPrinter.() -> Unit = {}, ) { + if (!override && field.kDoc != null) { + println() + printKDoc(field.kDoc) + } if (!field.isVal && field.isVolatile) { println("@Volatile") } diff --git a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Model.kt b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Model.kt index 737eb355bbb..04d6adb1bfe 100644 --- a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Model.kt +++ b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/model/Model.kt @@ -77,7 +77,9 @@ class Element( val generationCallback = config.generationCallback val propertyName = config.propertyName - val kDoc = config.kDoc + + override val kDoc = config.kDoc + val additionalImports: List = config.additionalImports override fun toString() = name @@ -126,7 +128,9 @@ sealed class Field( abstract val transformable: Boolean val useInIrFactoryStrategy = config.useFieldInIrFactoryStrategy - val kdoc = config.kdoc + init { + kDoc = config.kdoc + } val printProperty = config.printProperty val generationCallback = config.generationCallback diff --git a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/print/Elements.kt b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/print/Elements.kt index f043bf038ad..b4f8b1d845f 100644 --- a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/print/Elements.kt +++ b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/print/Elements.kt @@ -70,7 +70,7 @@ fun printElements(generationPath: File, model: Model) = sequence { addAnnotation(descriptorApiAnnotation) } - field.kdoc?.let { + field.kDoc?.let { addKdoc(it) } diff --git a/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/AbstractElement.kt b/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/AbstractElement.kt index f9a695d6065..c162a7ac0fd 100644 --- a/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/AbstractElement.kt +++ b/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/AbstractElement.kt @@ -16,6 +16,8 @@ abstract class AbstractElement : ElementOrRef, F abstract val name: String + abstract val kDoc: String? + abstract val fields: Set abstract val params: List diff --git a/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/AbstractField.kt b/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/AbstractField.kt index 28217e7da72..e7caa493b90 100644 --- a/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/AbstractField.kt +++ b/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/AbstractField.kt @@ -14,6 +14,8 @@ abstract class AbstractField { val nullable: Boolean get() = typeRef.nullable + var kDoc: String? = null + abstract val isVolatile: Boolean abstract val isFinal: Boolean diff --git a/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/printer/printUtils.kt b/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/printer/printUtils.kt index baf795d64ac..bce3f7bb841 100644 --- a/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/printer/printUtils.kt +++ b/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/printer/printUtils.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.generators.tree.printer import org.jetbrains.kotlin.generators.tree.AbstractElement 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. @@ -51,3 +52,18 @@ val AbstractElement<*, *>.generics: String get() = params.takeIf { it.isNotEmpty() } ?.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(" */") +}