[FIR/IR generator] Reduce duplication when printing curly-braced blocks
This commit is contained in:
committed by
Space Team
parent
18ed85c26e
commit
fab63e38aa
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.descriptors.ValueClassRepresentation
|
||||
import org.jetbrains.kotlin.generators.tree.*
|
||||
import org.jetbrains.kotlin.generators.tree.printer.FunctionParameter
|
||||
import org.jetbrains.kotlin.generators.tree.printer.printFunctionDeclaration
|
||||
import org.jetbrains.kotlin.generators.tree.printer.printFunctionWithBlockBody
|
||||
import org.jetbrains.kotlin.ir.generator.config.AbstractTreeBuilder
|
||||
import org.jetbrains.kotlin.ir.generator.config.ElementConfig
|
||||
import org.jetbrains.kotlin.ir.generator.config.ElementConfig.Category.*
|
||||
@@ -776,12 +777,9 @@ object IrTree : AbstractTreeBuilder() {
|
||||
vararg statements: String,
|
||||
) {
|
||||
println()
|
||||
printFunctionDeclaration(name, listOf(indexParam) + listOfNotNull(additionalParameter), returnType)
|
||||
println(" {")
|
||||
withIndent {
|
||||
printFunctionWithBlockBody(name, listOf(indexParam) + listOfNotNull(additionalParameter), returnType) {
|
||||
statements.forEach { println(it) }
|
||||
}
|
||||
println("}")
|
||||
}
|
||||
|
||||
printFunction(
|
||||
|
||||
+6
-8
@@ -60,8 +60,7 @@ private class ElementPrinter(printer: SmartPrinter) : AbstractElementPrinter<Ele
|
||||
)
|
||||
|
||||
if (!element.isRootElement) {
|
||||
println(" {")
|
||||
withIndent {
|
||||
printBlock {
|
||||
for (child in element.walkableChildren) {
|
||||
print(child.name)
|
||||
if (child.nullable) {
|
||||
@@ -79,9 +78,9 @@ private class ElementPrinter(printer: SmartPrinter) : AbstractElementPrinter<Ele
|
||||
}
|
||||
}
|
||||
}
|
||||
print("}")
|
||||
} else {
|
||||
println()
|
||||
}
|
||||
println()
|
||||
}
|
||||
|
||||
if (element.hasTransformChildrenMethod) {
|
||||
@@ -92,8 +91,7 @@ private class ElementPrinter(printer: SmartPrinter) : AbstractElementPrinter<Ele
|
||||
override = !element.isRootElement,
|
||||
)
|
||||
if (!element.isRootElement) {
|
||||
println(" {")
|
||||
withIndent {
|
||||
printBlock {
|
||||
for (child in element.transformableChildren) {
|
||||
print(child.name)
|
||||
when (child) {
|
||||
@@ -125,9 +123,9 @@ private class ElementPrinter(printer: SmartPrinter) : AbstractElementPrinter<Ele
|
||||
}
|
||||
}
|
||||
}
|
||||
print("}")
|
||||
} else {
|
||||
println()
|
||||
}
|
||||
println()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+10
-28
@@ -7,10 +7,7 @@ package org.jetbrains.kotlin.ir.generator.print
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.generators.tree.*
|
||||
import org.jetbrains.kotlin.generators.tree.printer.FunctionParameter
|
||||
import org.jetbrains.kotlin.generators.tree.printer.GeneratedFile
|
||||
import org.jetbrains.kotlin.generators.tree.printer.printFunctionDeclaration
|
||||
import org.jetbrains.kotlin.generators.tree.printer.printGeneratedType
|
||||
import org.jetbrains.kotlin.generators.tree.printer.*
|
||||
import org.jetbrains.kotlin.ir.generator.*
|
||||
import org.jetbrains.kotlin.ir.generator.model.*
|
||||
import org.jetbrains.kotlin.util.capitalizeDecapitalize.capitalizeAsciiOnly
|
||||
@@ -100,12 +97,10 @@ private class TransformerPrinter(
|
||||
override = true,
|
||||
)
|
||||
if (element.transformByChildren) {
|
||||
println(" {")
|
||||
withIndent {
|
||||
printBlock {
|
||||
println(element.visitorParameterName, ".transformChildren(this, data)")
|
||||
println("return ", element.visitorParameterName)
|
||||
}
|
||||
println("}")
|
||||
} else {
|
||||
println(" =")
|
||||
withIndent {
|
||||
@@ -162,7 +157,7 @@ private class TransformerVoidPrinter(
|
||||
override fun SmartPrinter.printAdditionalMethods() {
|
||||
println()
|
||||
val typeParameter = TypeVariable("T", listOf(IrTree.rootElement))
|
||||
printFunctionDeclaration(
|
||||
printFunctionWithBlockBody(
|
||||
name = "transformPostfix",
|
||||
parameters = listOf(FunctionParameter("body", Lambda(receiver = typeParameter, returnType = StandardTypes.unit))),
|
||||
returnType = typeParameter,
|
||||
@@ -170,27 +165,21 @@ private class TransformerVoidPrinter(
|
||||
extensionReceiver = typeParameter,
|
||||
visibility = Visibility.PROTECTED,
|
||||
isInline = true,
|
||||
)
|
||||
println(" {")
|
||||
withIndent {
|
||||
) {
|
||||
println("transformChildrenVoid()")
|
||||
println("this.body()")
|
||||
println("return this")
|
||||
}
|
||||
println("}")
|
||||
println()
|
||||
printFunctionDeclaration(
|
||||
printFunctionWithBlockBody(
|
||||
name = "transformChildrenVoid",
|
||||
parameters = emptyList(),
|
||||
returnType = StandardTypes.unit,
|
||||
extensionReceiver = IrTree.rootElement,
|
||||
visibility = Visibility.PROTECTED,
|
||||
)
|
||||
println(" {")
|
||||
withIndent {
|
||||
) {
|
||||
println("transformChildrenVoid(this@", visitorType.simpleName, ")")
|
||||
}
|
||||
println("}")
|
||||
}
|
||||
|
||||
context(ImportCollector)
|
||||
@@ -201,12 +190,10 @@ private class TransformerVoidPrinter(
|
||||
println()
|
||||
printVisitMethodDeclaration(element, hasDataParameter = false, modality = Modality.OPEN)
|
||||
if (element.transformByChildrenVoid && !element.isPackageFragmentChild) {
|
||||
println(" {")
|
||||
withIndent {
|
||||
printBlock {
|
||||
println(element.visitorParameterName, ".transformChildren(this, null)")
|
||||
println("return ", element.visitorParameterName)
|
||||
}
|
||||
println("}")
|
||||
} else {
|
||||
println(" =")
|
||||
withIndent {
|
||||
@@ -242,17 +229,14 @@ fun printTransformerVoid(generationPath: File, model: Model): GeneratedFile =
|
||||
TransformerVoidPrinter(this, elementTransformerVoidType).printVisitor(model.elements)
|
||||
println()
|
||||
val transformerParameter = FunctionParameter("transformer", elementTransformerVoidType)
|
||||
printFunctionDeclaration(
|
||||
printFunctionWithBlockBody(
|
||||
name = "transformChildrenVoid",
|
||||
parameters = listOf(transformerParameter),
|
||||
returnType = StandardTypes.unit,
|
||||
extensionReceiver = IrTree.rootElement,
|
||||
)
|
||||
println(" {")
|
||||
withIndent {
|
||||
) {
|
||||
println("transformChildren(", transformerParameter.name, ", null)")
|
||||
}
|
||||
println("}")
|
||||
}
|
||||
|
||||
private class TypeTransformerPrinter(
|
||||
@@ -340,8 +324,7 @@ private class TypeTransformerPrinter(
|
||||
}
|
||||
}
|
||||
|
||||
println(" {")
|
||||
withIndent {
|
||||
printBlock {
|
||||
when (element.name) {
|
||||
IrTree.memberAccessExpression.name -> {
|
||||
if (irTypeFields.singleOrNull()?.name != "typeArguments") {
|
||||
@@ -385,7 +368,6 @@ private class TypeTransformerPrinter(
|
||||
", data)"
|
||||
)
|
||||
}
|
||||
println("}")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user