[SIR generator] Add SirVisitorVoid class
This is convenient for cases when the visitor has no context to pass to each method
This commit is contained in:
committed by
Space Team
parent
80c9eae409
commit
80847b9ee2
@@ -27,6 +27,7 @@ fun main(args: Array<String>) {
|
||||
::ElementPrinter,
|
||||
listOf(
|
||||
elementVisitorType to ::VisitorPrinter,
|
||||
elementVisitorVoidType to ::VisitorVoidPrinter,
|
||||
elementTransformerType to ::TransformerPrinter.bind(model.rootElement),
|
||||
),
|
||||
ImplementationConfigurator,
|
||||
|
||||
@@ -18,6 +18,7 @@ val enumCaseType = type(BASE_PACKAGE, "SirEnumCase", TypeKind.Class)
|
||||
private const val VISITORS_PACKAGE = "$BASE_PACKAGE.visitors"
|
||||
|
||||
val elementVisitorType = type(VISITORS_PACKAGE, "SirVisitor", TypeKind.Class)
|
||||
val elementVisitorVoidType = type(VISITORS_PACKAGE, "SirVisitorVoid", TypeKind.Class)
|
||||
val elementTransformerType = type(VISITORS_PACKAGE, "SirTransformer", TypeKind.Class)
|
||||
|
||||
val swiftIrImplementationDetailAnnotation = type(BASE_PACKAGE, "SirImplementationDetail", TypeKind.Class)
|
||||
|
||||
+7
-4
@@ -7,13 +7,12 @@ package org.jetbrains.kotlin.sir.tree.generator.printer
|
||||
|
||||
import org.jetbrains.kotlin.generators.tree.*
|
||||
import org.jetbrains.kotlin.generators.tree.printer.*
|
||||
import org.jetbrains.kotlin.sir.tree.generator.BASE_PACKAGE
|
||||
import org.jetbrains.kotlin.sir.tree.generator.SwiftIrTree
|
||||
import org.jetbrains.kotlin.sir.tree.generator.model.Element
|
||||
import org.jetbrains.kotlin.sir.tree.generator.model.Field
|
||||
import org.jetbrains.kotlin.sir.tree.generator.elementTransformerType
|
||||
import org.jetbrains.kotlin.sir.tree.generator.elementVisitorType
|
||||
import org.jetbrains.kotlin.sir.tree.generator.model.SimpleField
|
||||
import org.jetbrains.kotlin.sir.tree.generator.elementVisitorVoidType
|
||||
import org.jetbrains.kotlin.sir.tree.generator.model.Element
|
||||
import org.jetbrains.kotlin.sir.tree.generator.model.Field
|
||||
import org.jetbrains.kotlin.utils.SmartPrinter
|
||||
|
||||
internal class ElementPrinter(printer: SmartPrinter) : AbstractElementPrinter<Element, Field>(printer) {
|
||||
@@ -37,8 +36,12 @@ internal class ElementPrinter(printer: SmartPrinter) : AbstractElementPrinter<El
|
||||
}
|
||||
|
||||
if (element.isRootElement) {
|
||||
println()
|
||||
printAcceptVoidMethod(elementVisitorVoidType)
|
||||
printAcceptChildrenMethod(element, elementVisitorType, TypeVariable("R"))
|
||||
println()
|
||||
println()
|
||||
printAcceptChildrenVoidMethod(elementVisitorVoidType)
|
||||
printTransformChildrenMethod(element, elementTransformerType, StandardTypes.unit)
|
||||
println()
|
||||
}
|
||||
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.sir.tree.generator.printer
|
||||
|
||||
import org.jetbrains.kotlin.generators.tree.AbstractVisitorVoidPrinter
|
||||
import org.jetbrains.kotlin.generators.tree.ClassRef
|
||||
import org.jetbrains.kotlin.generators.tree.PositionTypeParameterRef
|
||||
import org.jetbrains.kotlin.sir.tree.generator.elementVisitorType
|
||||
import org.jetbrains.kotlin.sir.tree.generator.model.Element
|
||||
import org.jetbrains.kotlin.sir.tree.generator.model.Field
|
||||
import org.jetbrains.kotlin.utils.SmartPrinter
|
||||
|
||||
internal class VisitorVoidPrinter(
|
||||
printer: SmartPrinter,
|
||||
override val visitorType: ClassRef<*>,
|
||||
) : AbstractVisitorVoidPrinter<Element, Field>(printer) {
|
||||
|
||||
override val visitorSuperClass: ClassRef<PositionTypeParameterRef>
|
||||
get() = elementVisitorType
|
||||
|
||||
override val useAbstractMethodForRootElement: Boolean
|
||||
get() = false
|
||||
|
||||
override val overriddenVisitMethodsAreFinal: Boolean
|
||||
get() = true
|
||||
}
|
||||
Reference in New Issue
Block a user