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 ConstExpressionNode -> "Const: ${fir.render()}"
|
||||||
is VariableDeclarationNode ->
|
is VariableDeclarationNode ->
|
||||||
"Variable declaration: ${buildString {
|
"Variable declaration: ${
|
||||||
FirRenderer(
|
buildString {
|
||||||
this,
|
FirRenderer(
|
||||||
CfgRenderMode
|
this,
|
||||||
).visitCallableDeclaration(fir)
|
CfgRenderMode
|
||||||
}}"
|
).Visitor().visitCallableDeclaration(fir)
|
||||||
|
}
|
||||||
|
}"
|
||||||
|
|
||||||
is VariableAssignmentNode -> "Assignment: ${fir.lValue.render(CfgRenderMode)}"
|
is VariableAssignmentNode -> "Assignment: ${fir.lValue.render(CfgRenderMode)}"
|
||||||
is FunctionCallNode -> "Function call: ${fir.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 {
|
fun FirElement.renderWithType(mode: FirRenderer.RenderMode = FirRenderer.RenderMode.Normal): String = buildString {
|
||||||
append(this@renderWithType)
|
append(this@renderWithType)
|
||||||
append(": ")
|
append(": ")
|
||||||
this@renderWithType.accept(FirRenderer(this, mode))
|
this@renderWithType.accept(FirRenderer(this, mode).Visitor())
|
||||||
}
|
}
|
||||||
|
|
||||||
fun FirElement.render(mode: FirRenderer.RenderMode = FirRenderer.RenderMode.Normal): String =
|
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)
|
val renderer = FirRendererWithGeneratedDeclarations(info.session, builderForModule)
|
||||||
allFiles.forEach {
|
allFiles.forEach {
|
||||||
it.accept(renderer)
|
it.accept(renderer.Visitor())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user