[FIR/IR generator] Remove visitSuperTypeByDefault from visitor printers

This property is FIR-specific, no need to use it in the generic printer.
This commit is contained in:
Sergej Jaskiewicz
2023-11-14 16:26:28 +01:00
committed by Space Team
parent a5b5492b2d
commit 4307e76f15
5 changed files with 20 additions and 22 deletions
@@ -18,7 +18,7 @@ import java.io.File
private class TransformerPrinter(
printer: SmartPrinter,
) : AbstractVisitorPrinter<Element, Field>(printer, visitSuperTypeByDefault = false) {
) : AbstractVisitorPrinter<Element, Field>(printer) {
override val visitorType: ClassRef<*>
get() = firTransformerType
@@ -21,8 +21,8 @@ import java.io.File
private class VisitorPrinter(
printer: SmartPrinter,
override val visitorType: ClassRef<*>,
visitSuperTypeByDefault: Boolean,
) : AbstractVisitorPrinter<Element, Field>(printer, visitSuperTypeByDefault) {
private val visitSuperTypeByDefault: Boolean,
) : AbstractVisitorPrinter<Element, Field>(printer) {
override val visitorTypeParameters: List<TypeVariable>
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<Element>, generationPath: File, visitSuperTypeBy
private class VisitorVoidPrinter(
printer: SmartPrinter,
override val visitorType: ClassRef<*>,
) : AbstractVisitorVoidPrinter<Element, Field>(printer, visitSuperTypeByDefault = false) {
) : AbstractVisitorVoidPrinter<Element, Field>(printer) {
override val visitorSuperClass: ClassRef<PositionTypeParameterRef>
get() = firVisitorType
@@ -80,7 +82,7 @@ fun printVisitorVoid(elements: List<Element>, generationPath: File) =
private class DefaultVisitorVoidPrinter(
printer: SmartPrinter,
override val visitorType: ClassRef<*>,
) : AbstractVisitorPrinter<Element, Field>(printer, visitSuperTypeByDefault = true) {
) : AbstractVisitorPrinter<Element, Field>(printer) {
override val visitorTypeParameters: List<TypeVariable>
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()
}
}
@@ -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<Element, Field>(printer, visitSuperTypeByDefault = false) {
AbstractVisitorPrinter<Element, Field>(printer) {
override val visitorTypeParameters: List<TypeVariable>
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<Element, Field>(printer, visitSuperTypeByDefault = false) {
) : AbstractVisitorVoidPrinter<Element, Field>(printer) {
override val visitorSuperClass: ClassRef<PositionTypeParameterRef>
get() = elementVisitorType
@@ -72,7 +71,7 @@ private class TransformerPrinter(
printer: SmartPrinter,
override val visitorType: ClassRef<*>,
val rootElement: Element,
) : AbstractVisitorPrinter<Element, Field>(printer, visitSuperTypeByDefault = false) {
) : AbstractVisitorPrinter<Element, Field>(printer) {
override val visitorSuperType: ClassRef<PositionTypeParameterRef>
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<Element, Field>(printer, visitSuperTypeByDefault = false) {
) : AbstractVisitorPrinter<Element, Field>(printer) {
override val visitorTypeParameters: List<TypeVariable>
get() = emptyList()
@@ -245,7 +244,7 @@ private class TypeTransformerPrinter(
printer: SmartPrinter,
override val visitorType: ClassRef<*>,
val rootElement: Element,
) : AbstractVisitorPrinter<Element, Field>(printer, visitSuperTypeByDefault = false) {
) : AbstractVisitorPrinter<Element, Field>(printer) {
override val visitorSuperType: ClassRef<PositionTypeParameterRef>
get() = elementTransformerType.withArgs(dataTypeVariable)
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.utils.withIndent
abstract class AbstractVisitorPrinter<Element : AbstractElement<Element, Field>, Field : AbstractField>(
val printer: SmartPrinter,
val visitSuperTypeByDefault: Boolean,
) {
/**
@@ -59,6 +58,8 @@ abstract class AbstractVisitorPrinter<Element : AbstractElement<Element, Field>,
*/
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<Element : AbstractElement<Element, Field>,
printBlock {
printAdditionalMethods()
for (element in elements) {
if (element.isRootElement && visitSuperTypeByDefault) continue
if (visitSuperTypeByDefault && parentInVisitor(element) == null) continue
if (skipElement(element)) continue
printMethodsForElement(element)
}
}
@@ -11,8 +11,7 @@ import org.jetbrains.kotlin.utils.SmartPrinter
abstract class AbstractVisitorVoidPrinter<Element, Field>(
printer: SmartPrinter,
visitSuperTypeByDefault: Boolean,
) : AbstractVisitorPrinter<Element, Field>(printer, visitSuperTypeByDefault)
) : AbstractVisitorPrinter<Element, Field>(printer)
where Element : AbstractElement<Element, Field>,
Field : AbstractField {
@@ -26,11 +25,8 @@ abstract class AbstractVisitorVoidPrinter<Element, Field>(
abstract val visitorSuperClass: ClassRef<PositionTypeParameterRef>
override val visitorSuperType: ClassRef<PositionTypeParameterRef>
get() = if (visitSuperTypeByDefault)
visitorSuperClass
else
visitorSuperClass.withArgs(StandardTypes.unit, visitorDataType)
final override val visitorSuperType: ClassRef<PositionTypeParameterRef>
get() = visitorSuperClass.withArgs(StandardTypes.unit, visitorDataType)
abstract val useAbstractMethodForRootElement: Boolean