[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:
committed by
Space Team
parent
a5b5492b2d
commit
4307e76f15
+1
-1
@@ -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
|
||||
|
||||
+8
-5
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
+5
-6
@@ -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)
|
||||
|
||||
+3
-3
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
+3
-7
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user