diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/ImplementationPrinter.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/ImplementationPrinter.kt index d6b2abf95e4..0430adc0d66 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/ImplementationPrinter.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/ImplementationPrinter.kt @@ -22,7 +22,6 @@ fun Implementation.generateCode(generationPath: File): GeneratedFile = this.typeName, fileSuppressions = listOf("DuplicatedCode", "unused"), ) { - addAllImports(usedTypes) ImplementationPrinter(this).printImplementation(this@generateCode) } diff --git a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/IrTree.kt b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/IrTree.kt index 648a5cccc69..0d1c0b3cc4e 100644 --- a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/IrTree.kt +++ b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/IrTree.kt @@ -208,7 +208,7 @@ object IrTree : AbstractTreeBuilder() { +field("isCrossinline", boolean) +field("isNoinline", boolean) +field("isHidden", boolean) { - usedTypes.add(idSignatureType) + additionalImports.add(idSignatureType) kDoc = """ If `true`, the value parameter does not participate in [IdSignature] computation. @@ -487,7 +487,7 @@ object IrTree : AbstractTreeBuilder() { +field("name", type(), mutable = false) +field("irBuiltins", type(Packages.tree, "IrBuiltIns"), mutable = false) +listField("files", file, mutability = MutableList) - usedTypes += ArbitraryImportable(Packages.tree, "UNDEFINED_OFFSET") + additionalImports += ArbitraryImportable(Packages.tree, "UNDEFINED_OFFSET") +field("startOffset", int, mutable = false) { baseGetter = "UNDEFINED_OFFSET" } @@ -722,8 +722,8 @@ object IrTree : AbstractTreeBuilder() { visibility = Visibility.PROTECTED } - usedTypes += ArbitraryImportable(Packages.exprs, "checkArgumentSlotAccess") generationCallback = { + addImport(ArbitraryImportable(Packages.exprs, "checkArgumentSlotAccess")) val indexParam = FunctionParameter("index", StandardTypes.int) val valueArgumentParam = FunctionParameter("valueArgument", expression.copy(nullable = true)) val typeArgumentParam = FunctionParameter("type", irTypeType.copy(nullable = true)) 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 4802bbbc16a..b55aa1c74f4 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 @@ -124,8 +124,6 @@ class Element( override var kDoc: String? = null - val usedTypes = mutableListOf() - override fun toString() = name operator fun TypeVariable.unaryPlus() = apply { diff --git a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/print/ElementPrinter.kt b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/print/ElementPrinter.kt index 05fa0a5efde..45397011252 100644 --- a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/print/ElementPrinter.kt +++ b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/print/ElementPrinter.kt @@ -137,7 +137,6 @@ private class ElementPrinter(printer: SmartPrinter) : AbstractElementPrinter printGeneratedType(generationPath, TREE_GENERATOR_README, element.packageName, element.typeName) { - addAllImports(element.usedTypes) ElementPrinter(this).printElement(element) } } 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 170dbb77f8c..bb506456cf9 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 @@ -166,6 +166,15 @@ abstract class AbstractElement( } } + /** + * Types/functions that you want to additionally import in the file with the element class. + * + * This is useful if, for example, default values of fields reference classes or functions from other packages. + * + * Note that classes referenced in field types will be imported automatically. + */ + val additionalImports = mutableListOf() + final override fun get(fieldName: String): Field? { return allFields.firstOrNull { it.name == fieldName } } diff --git a/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/AbstractElementPrinter.kt b/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/AbstractElementPrinter.kt index 79bf21eb84e..a23f7e1abf2 100644 --- a/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/AbstractElementPrinter.kt +++ b/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/AbstractElementPrinter.kt @@ -31,6 +31,7 @@ abstract class AbstractElementPrinter( override val packageName = element.packageName + ".impl" - val usedTypes = mutableListOf() + /** + * Types/functions that you want to additionally import in the file with the implementation class. + * + * This is useful if, for example, default values of fields reference classes or functions from other packages. + * + * Note that classes referenced in field types will be imported automatically. + */ + val additionalImports = mutableListOf() init { @Suppress("UNCHECKED_CAST") diff --git a/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/AbstractImplementationPrinter.kt b/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/AbstractImplementationPrinter.kt index 111d4bc9c60..7bc8135a8fb 100644 --- a/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/AbstractImplementationPrinter.kt +++ b/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/AbstractImplementationPrinter.kt @@ -32,6 +32,7 @@ abstract class AbstractImplementationPrinter