FirRenderer: extract separate printer & visitor
This commit is contained in:
+8
-6
@@ -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
+1
-1
@@ -39,7 +39,7 @@ class FirDumpHandler(
|
||||
|
||||
val renderer = FirRendererWithGeneratedDeclarations(info.session, builderForModule)
|
||||
allFiles.forEach {
|
||||
it.accept(renderer)
|
||||
it.accept(renderer.Visitor())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user