[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(
|
private class TransformerPrinter(
|
||||||
printer: SmartPrinter,
|
printer: SmartPrinter,
|
||||||
) : AbstractVisitorPrinter<Element, Field>(printer, visitSuperTypeByDefault = false) {
|
) : AbstractVisitorPrinter<Element, Field>(printer) {
|
||||||
|
|
||||||
override val visitorType: ClassRef<*>
|
override val visitorType: ClassRef<*>
|
||||||
get() = firTransformerType
|
get() = firTransformerType
|
||||||
|
|||||||
+8
-5
@@ -21,8 +21,8 @@ import java.io.File
|
|||||||
private class VisitorPrinter(
|
private class VisitorPrinter(
|
||||||
printer: SmartPrinter,
|
printer: SmartPrinter,
|
||||||
override val visitorType: ClassRef<*>,
|
override val visitorType: ClassRef<*>,
|
||||||
visitSuperTypeByDefault: Boolean,
|
private val visitSuperTypeByDefault: Boolean,
|
||||||
) : AbstractVisitorPrinter<Element, Field>(printer, visitSuperTypeByDefault) {
|
) : AbstractVisitorPrinter<Element, Field>(printer) {
|
||||||
|
|
||||||
override val visitorTypeParameters: List<TypeVariable>
|
override val visitorTypeParameters: List<TypeVariable>
|
||||||
get() = listOf(resultTypeVariable, dataTypeVariable)
|
get() = listOf(resultTypeVariable, dataTypeVariable)
|
||||||
@@ -38,6 +38,8 @@ private class VisitorPrinter(
|
|||||||
override val allowTypeParametersInVisitorMethods: Boolean
|
override val allowTypeParametersInVisitorMethods: Boolean
|
||||||
get() = true
|
get() = true
|
||||||
|
|
||||||
|
override fun skipElement(element: Element): Boolean = visitSuperTypeByDefault && element.isRootElement
|
||||||
|
|
||||||
override fun parentInVisitor(element: Element): Element? = when {
|
override fun parentInVisitor(element: Element): Element? = when {
|
||||||
element.isRootElement -> null
|
element.isRootElement -> null
|
||||||
visitSuperTypeByDefault -> element.parentInVisitor
|
visitSuperTypeByDefault -> element.parentInVisitor
|
||||||
@@ -57,7 +59,7 @@ fun printVisitor(elements: List<Element>, generationPath: File, visitSuperTypeBy
|
|||||||
private class VisitorVoidPrinter(
|
private class VisitorVoidPrinter(
|
||||||
printer: SmartPrinter,
|
printer: SmartPrinter,
|
||||||
override val visitorType: ClassRef<*>,
|
override val visitorType: ClassRef<*>,
|
||||||
) : AbstractVisitorVoidPrinter<Element, Field>(printer, visitSuperTypeByDefault = false) {
|
) : AbstractVisitorVoidPrinter<Element, Field>(printer) {
|
||||||
|
|
||||||
override val visitorSuperClass: ClassRef<PositionTypeParameterRef>
|
override val visitorSuperClass: ClassRef<PositionTypeParameterRef>
|
||||||
get() = firVisitorType
|
get() = firVisitorType
|
||||||
@@ -80,7 +82,7 @@ fun printVisitorVoid(elements: List<Element>, generationPath: File) =
|
|||||||
private class DefaultVisitorVoidPrinter(
|
private class DefaultVisitorVoidPrinter(
|
||||||
printer: SmartPrinter,
|
printer: SmartPrinter,
|
||||||
override val visitorType: ClassRef<*>,
|
override val visitorType: ClassRef<*>,
|
||||||
) : AbstractVisitorPrinter<Element, Field>(printer, visitSuperTypeByDefault = true) {
|
) : AbstractVisitorPrinter<Element, Field>(printer) {
|
||||||
|
|
||||||
override val visitorTypeParameters: List<TypeVariable>
|
override val visitorTypeParameters: List<TypeVariable>
|
||||||
get() = emptyList()
|
get() = emptyList()
|
||||||
@@ -98,13 +100,14 @@ private class DefaultVisitorVoidPrinter(
|
|||||||
|
|
||||||
context(ImportCollector)
|
context(ImportCollector)
|
||||||
override fun printMethodsForElement(element: Element) {
|
override fun printMethodsForElement(element: Element) {
|
||||||
|
val parentInVisitor = element.parentInVisitor ?: return
|
||||||
printer.run {
|
printer.run {
|
||||||
printVisitMethodDeclaration(
|
printVisitMethodDeclaration(
|
||||||
element,
|
element,
|
||||||
hasDataParameter = false,
|
hasDataParameter = false,
|
||||||
override = true,
|
override = true,
|
||||||
)
|
)
|
||||||
println(" = ", element.parentInVisitor!!.visitFunctionName, "(", element.visitorParameterName, ")")
|
println(" = ", parentInVisitor.visitFunctionName, "(", element.visitorParameterName, ")")
|
||||||
println()
|
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.*
|
||||||
import org.jetbrains.kotlin.ir.generator.model.ListField
|
import org.jetbrains.kotlin.ir.generator.model.ListField
|
||||||
import org.jetbrains.kotlin.ir.generator.model.Model
|
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.SmartPrinter
|
||||||
import org.jetbrains.kotlin.utils.withIndent
|
import org.jetbrains.kotlin.utils.withIndent
|
||||||
import java.io.File
|
import java.io.File
|
||||||
@@ -28,7 +27,7 @@ private fun printVisitorCommon(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private open class VisitorPrinter(printer: SmartPrinter, override val visitorType: ClassRef<*>) :
|
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>
|
override val visitorTypeParameters: List<TypeVariable>
|
||||||
get() = listOf(resultTypeVariable, dataTypeVariable)
|
get() = listOf(resultTypeVariable, dataTypeVariable)
|
||||||
@@ -50,7 +49,7 @@ fun printVisitor(generationPath: File, model: Model) = printVisitorCommon(genera
|
|||||||
private class VisitorVoidPrinter(
|
private class VisitorVoidPrinter(
|
||||||
printer: SmartPrinter,
|
printer: SmartPrinter,
|
||||||
override val visitorType: ClassRef<*>,
|
override val visitorType: ClassRef<*>,
|
||||||
) : AbstractVisitorVoidPrinter<Element, Field>(printer, visitSuperTypeByDefault = false) {
|
) : AbstractVisitorVoidPrinter<Element, Field>(printer) {
|
||||||
|
|
||||||
override val visitorSuperClass: ClassRef<PositionTypeParameterRef>
|
override val visitorSuperClass: ClassRef<PositionTypeParameterRef>
|
||||||
get() = elementVisitorType
|
get() = elementVisitorType
|
||||||
@@ -72,7 +71,7 @@ private class TransformerPrinter(
|
|||||||
printer: SmartPrinter,
|
printer: SmartPrinter,
|
||||||
override val visitorType: ClassRef<*>,
|
override val visitorType: ClassRef<*>,
|
||||||
val rootElement: Element,
|
val rootElement: Element,
|
||||||
) : AbstractVisitorPrinter<Element, Field>(printer, visitSuperTypeByDefault = false) {
|
) : AbstractVisitorPrinter<Element, Field>(printer) {
|
||||||
|
|
||||||
override val visitorSuperType: ClassRef<PositionTypeParameterRef>
|
override val visitorSuperType: ClassRef<PositionTypeParameterRef>
|
||||||
get() = elementVisitorType.withArgs(rootElement, dataTypeVariable)
|
get() = elementVisitorType.withArgs(rootElement, dataTypeVariable)
|
||||||
@@ -122,7 +121,7 @@ fun printTransformer(generationPath: File, model: Model): GeneratedFile =
|
|||||||
private class TransformerVoidPrinter(
|
private class TransformerVoidPrinter(
|
||||||
printer: SmartPrinter,
|
printer: SmartPrinter,
|
||||||
override val visitorType: ClassRef<*>,
|
override val visitorType: ClassRef<*>,
|
||||||
) : AbstractVisitorPrinter<Element, Field>(printer, visitSuperTypeByDefault = false) {
|
) : AbstractVisitorPrinter<Element, Field>(printer) {
|
||||||
|
|
||||||
override val visitorTypeParameters: List<TypeVariable>
|
override val visitorTypeParameters: List<TypeVariable>
|
||||||
get() = emptyList()
|
get() = emptyList()
|
||||||
@@ -245,7 +244,7 @@ private class TypeTransformerPrinter(
|
|||||||
printer: SmartPrinter,
|
printer: SmartPrinter,
|
||||||
override val visitorType: ClassRef<*>,
|
override val visitorType: ClassRef<*>,
|
||||||
val rootElement: Element,
|
val rootElement: Element,
|
||||||
) : AbstractVisitorPrinter<Element, Field>(printer, visitSuperTypeByDefault = false) {
|
) : AbstractVisitorPrinter<Element, Field>(printer) {
|
||||||
|
|
||||||
override val visitorSuperType: ClassRef<PositionTypeParameterRef>
|
override val visitorSuperType: ClassRef<PositionTypeParameterRef>
|
||||||
get() = elementTransformerType.withArgs(dataTypeVariable)
|
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>(
|
abstract class AbstractVisitorPrinter<Element : AbstractElement<Element, Field>, Field : AbstractField>(
|
||||||
val printer: SmartPrinter,
|
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 parentInVisitor(element: Element): Element? = element.parentInVisitor
|
||||||
|
|
||||||
|
open fun skipElement(element: Element): Boolean = false
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prints a single visitor method declaration, without body.
|
* Prints a single visitor method declaration, without body.
|
||||||
*/
|
*/
|
||||||
@@ -149,8 +150,7 @@ abstract class AbstractVisitorPrinter<Element : AbstractElement<Element, Field>,
|
|||||||
printBlock {
|
printBlock {
|
||||||
printAdditionalMethods()
|
printAdditionalMethods()
|
||||||
for (element in elements) {
|
for (element in elements) {
|
||||||
if (element.isRootElement && visitSuperTypeByDefault) continue
|
if (skipElement(element)) continue
|
||||||
if (visitSuperTypeByDefault && parentInVisitor(element) == null) continue
|
|
||||||
printMethodsForElement(element)
|
printMethodsForElement(element)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-7
@@ -11,8 +11,7 @@ import org.jetbrains.kotlin.utils.SmartPrinter
|
|||||||
|
|
||||||
abstract class AbstractVisitorVoidPrinter<Element, Field>(
|
abstract class AbstractVisitorVoidPrinter<Element, Field>(
|
||||||
printer: SmartPrinter,
|
printer: SmartPrinter,
|
||||||
visitSuperTypeByDefault: Boolean,
|
) : AbstractVisitorPrinter<Element, Field>(printer)
|
||||||
) : AbstractVisitorPrinter<Element, Field>(printer, visitSuperTypeByDefault)
|
|
||||||
where Element : AbstractElement<Element, Field>,
|
where Element : AbstractElement<Element, Field>,
|
||||||
Field : AbstractField {
|
Field : AbstractField {
|
||||||
|
|
||||||
@@ -26,11 +25,8 @@ abstract class AbstractVisitorVoidPrinter<Element, Field>(
|
|||||||
|
|
||||||
abstract val visitorSuperClass: ClassRef<PositionTypeParameterRef>
|
abstract val visitorSuperClass: ClassRef<PositionTypeParameterRef>
|
||||||
|
|
||||||
override val visitorSuperType: ClassRef<PositionTypeParameterRef>
|
final override val visitorSuperType: ClassRef<PositionTypeParameterRef>
|
||||||
get() = if (visitSuperTypeByDefault)
|
get() = visitorSuperClass.withArgs(StandardTypes.unit, visitorDataType)
|
||||||
visitorSuperClass
|
|
||||||
else
|
|
||||||
visitorSuperClass.withArgs(StandardTypes.unit, visitorDataType)
|
|
||||||
|
|
||||||
abstract val useAbstractMethodForRootElement: Boolean
|
abstract val useAbstractMethodForRootElement: Boolean
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user