FirRenderer: get rid of direct Visitor usages

This commit is contained in:
Mikhail Glukhikh
2022-07-06 13:24:18 +02:00
committed by Space
parent 998ed8849f
commit 089044e5b0
14 changed files with 51 additions and 39 deletions
@@ -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).Visitor())
FirRenderer(this, mode).renderElementAsString(this@renderWithType)
}
fun FirElement.render(mode: FirRenderer.RenderMode = FirRenderer.RenderMode.Normal): String =
buildString { this@render.accept(FirRenderer(this, mode).Visitor()) }
FirRenderer(mode = mode).renderElementAsString(this)
@@ -46,4 +46,8 @@ open class FirPrinter(builder: StringBuilder) {
popIndent()
println(rightBrace)
}
override fun toString(): String {
return printer.toString()
}
}
@@ -40,7 +40,28 @@ open class FirRenderer private constructor(
components: FirComponentsImpl
) : FirPrinter(builder) {
constructor(builder: StringBuilder, mode: RenderMode = RenderMode.Normal) : this(builder, mode, FirComponentsImpl())
companion object {
private val visibilitiesToRenderEffectiveSet = setOf(
Visibilities.Private, Visibilities.PrivateToThis, Visibilities.Internal,
Visibilities.Protected, Visibilities.Public, Visibilities.Local
)
}
constructor(builder: StringBuilder = StringBuilder(), mode: RenderMode = RenderMode.Normal) : this(builder, mode, FirComponentsImpl())
fun renderElementAsString(element: FirElement): String {
element.accept(visitor)
return toString()
}
fun renderAsCallableDeclarationString(callableDeclaration: FirCallableDeclaration): String {
visitor.visitCallableDeclaration(callableDeclaration)
return toString()
}
fun renderMemberDeclarationClass(firClass: FirClass) {
visitor.visitMemberDeclaration(firClass)
}
private class FirComponentsImpl : FirRendererComponents {
override var annotationRenderer: FirAnnotationRenderer? = null
@@ -54,13 +75,6 @@ open class FirRenderer private constructor(
override lateinit var printer: FirPrinter
}
companion object {
private val visibilitiesToRenderEffectiveSet = setOf(
Visibilities.Private, Visibilities.PrivateToThis, Visibilities.Internal,
Visibilities.Protected, Visibilities.Public, Visibilities.Local
)
}
data class RenderMode(
val renderCallArguments: Boolean,
val renderCallableFqNames: Boolean,
@@ -334,7 +348,7 @@ open class FirRenderer private constructor(
rValue.accept(visitor)
}
inner class Visitor : FirVisitorVoid() {
inner class Visitor internal constructor() : FirVisitorVoid() {
override fun visitElement(element: FirElement) {
element.acceptChildren(this)