FirRenderer: extract separate printer & visitor

This commit is contained in:
Mikhail Glukhikh
2022-07-01 18:04:18 +02:00
committed by Space
parent 38d6f3d548
commit f64a7d3ff9
5 changed files with 1184 additions and 1167 deletions
@@ -50,12 +50,14 @@ fun CFGNode<*>.render(): String =
is ConstExpressionNode -> "Const: ${fir.render()}"
is VariableDeclarationNode ->
"Variable declaration: ${buildString {
FirRenderer(
this,
CfgRenderMode
).visitCallableDeclaration(fir)
}}"
"Variable declaration: ${
buildString {
FirRenderer(
this,
CfgRenderMode
).Visitor().visitCallableDeclaration(fir)
}
}"
is VariableAssignmentNode -> "Assignment: ${fir.lValue.render(CfgRenderMode)}"
is FunctionCallNode -> "Function call: ${fir.render(CfgRenderMode)}"
@@ -83,8 +83,8 @@ val FirContextReceiver.labelName: Name? get() = customLabelName ?: labelNameFrom
fun FirElement.renderWithType(mode: FirRenderer.RenderMode = FirRenderer.RenderMode.Normal): String = buildString {
append(this@renderWithType)
append(": ")
this@renderWithType.accept(FirRenderer(this, mode))
this@renderWithType.accept(FirRenderer(this, mode).Visitor())
}
fun FirElement.render(mode: FirRenderer.RenderMode = FirRenderer.RenderMode.Normal): String =
buildString { this@render.accept(FirRenderer(this, mode)) }
buildString { this@render.accept(FirRenderer(this, mode).Visitor()) }
@@ -0,0 +1,42 @@
/*
* Copyright 2010-2022 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.fir.renderer
import org.jetbrains.kotlin.utils.Printer
abstract class FirPrinter internal constructor(builder: StringBuilder) {
private val printer = Printer(builder)
private var lineBeginning = true
protected fun print(vararg objects: Any) {
if (lineBeginning) {
lineBeginning = false
printer.print(*objects)
} else {
printer.printWithNoIndent(*objects)
}
}
protected fun println(vararg objects: Any) {
print(*objects)
printer.printlnWithNoIndent()
lineBeginning = true
}
protected fun pushIndent() {
printer.pushIndent()
}
protected fun popIndent() {
printer.popIndent()
}
protected fun newLine() {
println()
}
}
File diff suppressed because it is too large Load Diff
@@ -39,7 +39,7 @@ class FirDumpHandler(
val renderer = FirRendererWithGeneratedDeclarations(info.session, builderForModule)
allFiles.forEach {
it.accept(renderer)
it.accept(renderer.Visitor())
}
}