From 4307e76f15f1a6e1e018f61569cd9aeef06df27d Mon Sep 17 00:00:00 2001 From: Sergej Jaskiewicz Date: Tue, 14 Nov 2023 16:26:28 +0100 Subject: [PATCH] [FIR/IR generator] Remove visitSuperTypeByDefault from visitor printers This property is FIR-specific, no need to use it in the generic printer. --- .../fir/tree/generator/printer/transformer.kt | 2 +- .../kotlin/fir/tree/generator/printer/visitor.kt | 13 ++++++++----- .../ir/generator/print/VisitorsAndTransformers.kt | 11 +++++------ .../generators/tree/AbstractVisitorPrinter.kt | 6 +++--- .../generators/tree/AbstractVisitorVoidPrinter.kt | 10 +++------- 5 files changed, 20 insertions(+), 22 deletions(-) diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/transformer.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/transformer.kt index 0d0dfa58e79..5a9c9e083f3 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/transformer.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/transformer.kt @@ -18,7 +18,7 @@ import java.io.File private class TransformerPrinter( printer: SmartPrinter, -) : AbstractVisitorPrinter(printer, visitSuperTypeByDefault = false) { +) : AbstractVisitorPrinter(printer) { override val visitorType: ClassRef<*> get() = firTransformerType diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/visitor.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/visitor.kt index dfeedf17d26..30d3087ccbe 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/visitor.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/printer/visitor.kt @@ -21,8 +21,8 @@ import java.io.File private class VisitorPrinter( printer: SmartPrinter, override val visitorType: ClassRef<*>, - visitSuperTypeByDefault: Boolean, -) : AbstractVisitorPrinter(printer, visitSuperTypeByDefault) { + private val visitSuperTypeByDefault: Boolean, +) : AbstractVisitorPrinter(printer) { override val visitorTypeParameters: List get() = listOf(resultTypeVariable, dataTypeVariable) @@ -38,6 +38,8 @@ private class VisitorPrinter( override val allowTypeParametersInVisitorMethods: Boolean get() = true + override fun skipElement(element: Element): Boolean = visitSuperTypeByDefault && element.isRootElement + override fun parentInVisitor(element: Element): Element? = when { element.isRootElement -> null visitSuperTypeByDefault -> element.parentInVisitor @@ -57,7 +59,7 @@ fun printVisitor(elements: List, generationPath: File, visitSuperTypeBy private class VisitorVoidPrinter( printer: SmartPrinter, override val visitorType: ClassRef<*>, -) : AbstractVisitorVoidPrinter(printer, visitSuperTypeByDefault = false) { +) : AbstractVisitorVoidPrinter(printer) { override val visitorSuperClass: ClassRef get() = firVisitorType @@ -80,7 +82,7 @@ fun printVisitorVoid(elements: List, generationPath: File) = private class DefaultVisitorVoidPrinter( printer: SmartPrinter, override val visitorType: ClassRef<*>, -) : AbstractVisitorPrinter(printer, visitSuperTypeByDefault = true) { +) : AbstractVisitorPrinter(printer) { override val visitorTypeParameters: List get() = emptyList() @@ -98,13 +100,14 @@ private class DefaultVisitorVoidPrinter( context(ImportCollector) override fun printMethodsForElement(element: Element) { + val parentInVisitor = element.parentInVisitor ?: return printer.run { printVisitMethodDeclaration( element, hasDataParameter = false, override = true, ) - println(" = ", element.parentInVisitor!!.visitFunctionName, "(", element.visitorParameterName, ")") + println(" = ", parentInVisitor.visitFunctionName, "(", element.visitorParameterName, ")") println() } } diff --git a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/print/VisitorsAndTransformers.kt b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/print/VisitorsAndTransformers.kt index 8b22a2a5084..88f9b1347fa 100644 --- a/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/print/VisitorsAndTransformers.kt +++ b/compiler/ir/ir.tree/tree-generator/src/org/jetbrains/kotlin/ir/generator/print/VisitorsAndTransformers.kt @@ -12,7 +12,6 @@ import org.jetbrains.kotlin.ir.generator.* import org.jetbrains.kotlin.ir.generator.model.* import org.jetbrains.kotlin.ir.generator.model.ListField import org.jetbrains.kotlin.ir.generator.model.Model -import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly import org.jetbrains.kotlin.utils.SmartPrinter import org.jetbrains.kotlin.utils.withIndent import java.io.File @@ -28,7 +27,7 @@ private fun printVisitorCommon( } private open class VisitorPrinter(printer: SmartPrinter, override val visitorType: ClassRef<*>) : - AbstractVisitorPrinter(printer, visitSuperTypeByDefault = false) { + AbstractVisitorPrinter(printer) { override val visitorTypeParameters: List get() = listOf(resultTypeVariable, dataTypeVariable) @@ -50,7 +49,7 @@ fun printVisitor(generationPath: File, model: Model) = printVisitorCommon(genera private class VisitorVoidPrinter( printer: SmartPrinter, override val visitorType: ClassRef<*>, -) : AbstractVisitorVoidPrinter(printer, visitSuperTypeByDefault = false) { +) : AbstractVisitorVoidPrinter(printer) { override val visitorSuperClass: ClassRef get() = elementVisitorType @@ -72,7 +71,7 @@ private class TransformerPrinter( printer: SmartPrinter, override val visitorType: ClassRef<*>, val rootElement: Element, -) : AbstractVisitorPrinter(printer, visitSuperTypeByDefault = false) { +) : AbstractVisitorPrinter(printer) { override val visitorSuperType: ClassRef get() = elementVisitorType.withArgs(rootElement, dataTypeVariable) @@ -122,7 +121,7 @@ fun printTransformer(generationPath: File, model: Model): GeneratedFile = private class TransformerVoidPrinter( printer: SmartPrinter, override val visitorType: ClassRef<*>, -) : AbstractVisitorPrinter(printer, visitSuperTypeByDefault = false) { +) : AbstractVisitorPrinter(printer) { override val visitorTypeParameters: List get() = emptyList() @@ -245,7 +244,7 @@ private class TypeTransformerPrinter( printer: SmartPrinter, override val visitorType: ClassRef<*>, val rootElement: Element, -) : AbstractVisitorPrinter(printer, visitSuperTypeByDefault = false) { +) : AbstractVisitorPrinter(printer) { override val visitorSuperType: ClassRef get() = elementTransformerType.withArgs(dataTypeVariable) diff --git a/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/AbstractVisitorPrinter.kt b/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/AbstractVisitorPrinter.kt index 422b2af6e13..2fac6317890 100644 --- a/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/AbstractVisitorPrinter.kt +++ b/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/AbstractVisitorPrinter.kt @@ -13,7 +13,6 @@ import org.jetbrains.kotlin.utils.withIndent abstract class AbstractVisitorPrinter, Field : AbstractField>( val printer: SmartPrinter, - val visitSuperTypeByDefault: Boolean, ) { /** @@ -59,6 +58,8 @@ abstract class AbstractVisitorPrinter, */ open fun parentInVisitor(element: Element): Element? = element.parentInVisitor + open fun skipElement(element: Element): Boolean = false + /** * Prints a single visitor method declaration, without body. */ @@ -149,8 +150,7 @@ abstract class AbstractVisitorPrinter, printBlock { printAdditionalMethods() for (element in elements) { - if (element.isRootElement && visitSuperTypeByDefault) continue - if (visitSuperTypeByDefault && parentInVisitor(element) == null) continue + if (skipElement(element)) continue printMethodsForElement(element) } } diff --git a/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/AbstractVisitorVoidPrinter.kt b/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/AbstractVisitorVoidPrinter.kt index 27a8da16160..887b0c50453 100644 --- a/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/AbstractVisitorVoidPrinter.kt +++ b/generators/tree-generator-common/src/org/jetbrains/kotlin/generators/tree/AbstractVisitorVoidPrinter.kt @@ -11,8 +11,7 @@ import org.jetbrains.kotlin.utils.SmartPrinter abstract class AbstractVisitorVoidPrinter( printer: SmartPrinter, - visitSuperTypeByDefault: Boolean, -) : AbstractVisitorPrinter(printer, visitSuperTypeByDefault) +) : AbstractVisitorPrinter(printer) where Element : AbstractElement, Field : AbstractField { @@ -26,11 +25,8 @@ abstract class AbstractVisitorVoidPrinter( abstract val visitorSuperClass: ClassRef - override val visitorSuperType: ClassRef - get() = if (visitSuperTypeByDefault) - visitorSuperClass - else - visitorSuperClass.withArgs(StandardTypes.unit, visitorDataType) + final override val visitorSuperType: ClassRef + get() = visitorSuperClass.withArgs(StandardTypes.unit, visitorDataType) abstract val useAbstractMethodForRootElement: Boolean