Make FirRenderer inherit FirRendererComponents instead of FirPrinter
#KT-53024 Fixed
This commit is contained in:
+3
-3
@@ -28,14 +28,14 @@ fun renderJavaClass(renderer: FirRenderer, javaClass: FirJavaClass, session: Fir
|
|||||||
renderer.renderAnnotations(javaClass)
|
renderer.renderAnnotations(javaClass)
|
||||||
renderer.renderMemberDeclarationClass(javaClass)
|
renderer.renderMemberDeclarationClass(javaClass)
|
||||||
renderer.renderSupertypes(javaClass)
|
renderer.renderSupertypes(javaClass)
|
||||||
renderer.renderInBraces {
|
renderer.printer.renderInBraces {
|
||||||
val renderedDeclarations = mutableListOf<FirDeclaration>()
|
val renderedDeclarations = mutableListOf<FirDeclaration>()
|
||||||
|
|
||||||
fun renderAndCache(symbol: FirCallableSymbol<*>) {
|
fun renderAndCache(symbol: FirCallableSymbol<*>) {
|
||||||
val enhanced = symbol.fir
|
val enhanced = symbol.fir
|
||||||
if (enhanced !in renderedDeclarations) {
|
if (enhanced !in renderedDeclarations) {
|
||||||
renderer.renderElementAsString(enhanced)
|
renderer.renderElementAsString(enhanced)
|
||||||
renderer.newLine()
|
renderer.printer.newLine()
|
||||||
renderedDeclarations += enhanced
|
renderedDeclarations += enhanced
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -56,7 +56,7 @@ fun renderJavaClass(renderer: FirRenderer, javaClass: FirJavaClass, session: Fir
|
|||||||
is FirEnumEntry -> scopeToUse!!.processPropertiesByName(declaration.name, ::renderAndCache)
|
is FirEnumEntry -> scopeToUse!!.processPropertiesByName(declaration.name, ::renderAndCache)
|
||||||
else -> {
|
else -> {
|
||||||
renderer.renderElementAsString(declaration)
|
renderer.renderElementAsString(declaration)
|
||||||
renderer.newLine()
|
renderer.printer.newLine()
|
||||||
renderedDeclarations += declaration
|
renderedDeclarations += declaration
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.fir.contracts.*
|
|||||||
import org.jetbrains.kotlin.fir.contracts.description.ConeContractRenderer
|
import org.jetbrains.kotlin.fir.contracts.description.ConeContractRenderer
|
||||||
import org.jetbrains.kotlin.fir.contracts.impl.FirEmptyContractDescription
|
import org.jetbrains.kotlin.fir.contracts.impl.FirEmptyContractDescription
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.utils.*
|
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
import org.jetbrains.kotlin.fir.expressions.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.impl.*
|
import org.jetbrains.kotlin.fir.expressions.impl.*
|
||||||
import org.jetbrains.kotlin.fir.references.*
|
import org.jetbrains.kotlin.fir.references.*
|
||||||
@@ -29,22 +28,23 @@ import java.util.*
|
|||||||
|
|
||||||
class FirRenderer(
|
class FirRenderer(
|
||||||
builder: StringBuilder = StringBuilder(),
|
builder: StringBuilder = StringBuilder(),
|
||||||
private val annotationRenderer: FirAnnotationRenderer? = FirAnnotationRenderer(),
|
override val annotationRenderer: FirAnnotationRenderer? = FirAnnotationRenderer(),
|
||||||
private val bodyRenderer: FirBodyRenderer? = FirBodyRenderer(),
|
override val bodyRenderer: FirBodyRenderer? = FirBodyRenderer(),
|
||||||
private val callArgumentsRenderer: FirCallArgumentsRenderer = FirCallArgumentsRenderer(),
|
override val callArgumentsRenderer: FirCallArgumentsRenderer = FirCallArgumentsRenderer(),
|
||||||
private val classMemberRenderer: FirClassMemberRenderer = FirClassMemberRenderer(),
|
override val classMemberRenderer: FirClassMemberRenderer = FirClassMemberRenderer(),
|
||||||
private val contractRenderer: ConeContractRenderer? = ConeContractRenderer(),
|
override val contractRenderer: ConeContractRenderer? = ConeContractRenderer(),
|
||||||
private val declarationRenderer: FirDeclarationRenderer = FirDeclarationRenderer(),
|
override val declarationRenderer: FirDeclarationRenderer = FirDeclarationRenderer(),
|
||||||
private val idRenderer: ConeIdRenderer = ConeIdRendererForDebugging(),
|
override val idRenderer: ConeIdRenderer = ConeIdRendererForDebugging(),
|
||||||
private val modifierRenderer: FirModifierRenderer = FirAllModifierRenderer(),
|
override val modifierRenderer: FirModifierRenderer = FirAllModifierRenderer(),
|
||||||
private val packageDirectiveRenderer: FirPackageDirectiveRenderer? = null,
|
override val packageDirectiveRenderer: FirPackageDirectiveRenderer? = null,
|
||||||
private val propertyAccessorRenderer: FirPropertyAccessorRenderer? = FirPropertyAccessorRenderer(),
|
override val propertyAccessorRenderer: FirPropertyAccessorRenderer? = FirPropertyAccessorRenderer(),
|
||||||
resolvePhaseRenderer: FirResolvePhaseRenderer? = null,
|
override val resolvePhaseRenderer: FirResolvePhaseRenderer? = null,
|
||||||
private val typeRenderer: ConeTypeRenderer = ConeTypeRendererForDebugging(),
|
override val typeRenderer: ConeTypeRenderer = ConeTypeRendererForDebugging(),
|
||||||
private val valueParameterRenderer: FirValueParameterRenderer = FirValueParameterRenderer(),
|
override val valueParameterRenderer: FirValueParameterRenderer = FirValueParameterRenderer(),
|
||||||
) : FirPrinter(builder) {
|
) : FirRendererComponents {
|
||||||
|
|
||||||
private val visitor = Visitor()
|
override val visitor = Visitor()
|
||||||
|
override val printer = FirPrinter(builder)
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun noAnnotationBodiesAccessorAndArguments(): FirRenderer =
|
fun noAnnotationBodiesAccessorAndArguments(): FirRenderer =
|
||||||
@@ -61,41 +61,25 @@ class FirRenderer(
|
|||||||
}
|
}
|
||||||
|
|
||||||
init {
|
init {
|
||||||
val components = FirComponentsImpl()
|
annotationRenderer?.components = this
|
||||||
components.visitor = visitor
|
bodyRenderer?.components = this
|
||||||
components.annotationRenderer = annotationRenderer
|
callArgumentsRenderer.components = this
|
||||||
components.bodyRenderer = bodyRenderer
|
classMemberRenderer.components = this
|
||||||
components.callArgumentsRenderer = callArgumentsRenderer
|
contractRenderer?.components = this
|
||||||
components.classMemberRenderer = classMemberRenderer
|
declarationRenderer.components = this
|
||||||
components.declarationRenderer = declarationRenderer
|
|
||||||
components.idRenderer = idRenderer
|
|
||||||
components.modifierRenderer = modifierRenderer
|
|
||||||
components.packageDirectiveRenderer = packageDirectiveRenderer
|
|
||||||
components.propertyAccessorRenderer = propertyAccessorRenderer
|
|
||||||
components.resolvePhaseRenderer = resolvePhaseRenderer
|
|
||||||
components.typeRenderer = typeRenderer
|
|
||||||
components.valueParameterRenderer = valueParameterRenderer
|
|
||||||
@Suppress("LeakingThis")
|
|
||||||
components.printer = this
|
|
||||||
annotationRenderer?.components = components
|
|
||||||
bodyRenderer?.components = components
|
|
||||||
callArgumentsRenderer.components = components
|
|
||||||
classMemberRenderer.components = components
|
|
||||||
contractRenderer?.components = components
|
|
||||||
declarationRenderer.components = components
|
|
||||||
idRenderer.builder = builder
|
idRenderer.builder = builder
|
||||||
modifierRenderer.components = components
|
modifierRenderer.components = this
|
||||||
packageDirectiveRenderer?.components = components
|
packageDirectiveRenderer?.components = this
|
||||||
propertyAccessorRenderer?.components = components
|
propertyAccessorRenderer?.components = this
|
||||||
resolvePhaseRenderer?.components = components
|
resolvePhaseRenderer?.components = this
|
||||||
typeRenderer.builder = builder
|
typeRenderer.builder = builder
|
||||||
typeRenderer.idRenderer = idRenderer
|
typeRenderer.idRenderer = idRenderer
|
||||||
valueParameterRenderer.components = components
|
valueParameterRenderer.components = this
|
||||||
}
|
}
|
||||||
|
|
||||||
fun renderElementAsString(element: FirElement): String {
|
fun renderElementAsString(element: FirElement): String {
|
||||||
element.accept(visitor)
|
element.accept(visitor)
|
||||||
return toString()
|
return printer.toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun renderElementWithTypeAsString(element: FirElement): String {
|
fun renderElementWithTypeAsString(element: FirElement): String {
|
||||||
@@ -106,7 +90,7 @@ class FirRenderer(
|
|||||||
|
|
||||||
fun renderAsCallableDeclarationString(callableDeclaration: FirCallableDeclaration): String {
|
fun renderAsCallableDeclarationString(callableDeclaration: FirCallableDeclaration): String {
|
||||||
visitor.visitCallableDeclaration(callableDeclaration)
|
visitor.visitCallableDeclaration(callableDeclaration)
|
||||||
return toString()
|
return printer.toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun renderMemberDeclarationClass(firClass: FirClass) {
|
fun renderMemberDeclarationClass(firClass: FirClass) {
|
||||||
@@ -124,25 +108,6 @@ class FirRenderer(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class FirComponentsImpl : FirRendererComponents {
|
|
||||||
override var annotationRenderer: FirAnnotationRenderer? = null
|
|
||||||
override var bodyRenderer: FirBodyRenderer? = null
|
|
||||||
override var contractRenderer: ConeContractRenderer? = null
|
|
||||||
override var packageDirectiveRenderer: FirPackageDirectiveRenderer? = null
|
|
||||||
override var propertyAccessorRenderer: FirPropertyAccessorRenderer? = null
|
|
||||||
override var resolvePhaseRenderer: FirResolvePhaseRenderer? = null
|
|
||||||
|
|
||||||
override lateinit var callArgumentsRenderer: FirCallArgumentsRenderer
|
|
||||||
override lateinit var classMemberRenderer: FirClassMemberRenderer
|
|
||||||
override lateinit var declarationRenderer: FirDeclarationRenderer
|
|
||||||
override lateinit var idRenderer: ConeIdRenderer
|
|
||||||
override lateinit var modifierRenderer: FirModifierRenderer
|
|
||||||
override lateinit var typeRenderer: ConeTypeRenderer
|
|
||||||
override lateinit var valueParameterRenderer: FirValueParameterRenderer
|
|
||||||
override lateinit var visitor: Visitor
|
|
||||||
override lateinit var printer: FirPrinter
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun Variance.renderVariance() {
|
private fun Variance.renderVariance() {
|
||||||
label.let {
|
label.let {
|
||||||
print(it)
|
print(it)
|
||||||
@@ -157,7 +122,7 @@ class FirRenderer(
|
|||||||
print("context(")
|
print("context(")
|
||||||
renderSeparated(contextReceivers, visitor)
|
renderSeparated(contextReceivers, visitor)
|
||||||
print(")")
|
print(")")
|
||||||
newLine()
|
printer.newLine()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun List<FirTypeParameterRef>.renderTypeParameters() {
|
private fun List<FirTypeParameterRef>.renderTypeParameters() {
|
||||||
@@ -176,6 +141,14 @@ class FirRenderer(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun print(s: Any) {
|
||||||
|
printer.print(s)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun renderSeparated(elements: List<FirElement>, visitor: Visitor) {
|
||||||
|
printer.renderSeparated(elements, visitor)
|
||||||
|
}
|
||||||
|
|
||||||
inner class Visitor internal constructor() : FirVisitorVoid() {
|
inner class Visitor internal constructor() : FirVisitorVoid() {
|
||||||
|
|
||||||
override fun visitElement(element: FirElement) {
|
override fun visitElement(element: FirElement) {
|
||||||
@@ -183,13 +156,13 @@ class FirRenderer(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun visitFile(file: FirFile) {
|
override fun visitFile(file: FirFile) {
|
||||||
println("FILE: ${file.name}")
|
printer.println("FILE: ${file.name}")
|
||||||
pushIndent()
|
printer.pushIndent()
|
||||||
annotationRenderer?.render(file)
|
annotationRenderer?.render(file)
|
||||||
visitPackageDirective(file.packageDirective)
|
visitPackageDirective(file.packageDirective)
|
||||||
file.imports.forEach { it.accept(this) }
|
file.imports.forEach { it.accept(this) }
|
||||||
file.declarations.forEach { it.accept(this) }
|
file.declarations.forEach { it.accept(this) }
|
||||||
popIndent()
|
printer.popIndent()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitAnnotation(annotation: FirAnnotation) {
|
override fun visitAnnotation(annotation: FirAnnotation) {
|
||||||
@@ -304,7 +277,7 @@ class FirRenderer(
|
|||||||
|
|
||||||
override fun visitField(field: FirField) {
|
override fun visitField(field: FirField) {
|
||||||
visitVariable(field)
|
visitVariable(field)
|
||||||
println()
|
printer.newLine()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitProperty(property: FirProperty) {
|
override fun visitProperty(property: FirProperty) {
|
||||||
@@ -328,7 +301,7 @@ class FirRenderer(
|
|||||||
visitCallableDeclaration(simpleFunction)
|
visitCallableDeclaration(simpleFunction)
|
||||||
bodyRenderer?.render(simpleFunction)
|
bodyRenderer?.render(simpleFunction)
|
||||||
if (simpleFunction.body == null) {
|
if (simpleFunction.body == null) {
|
||||||
println()
|
printer.newLine()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -411,7 +384,7 @@ class FirRenderer(
|
|||||||
visitMemberDeclaration(typeAlias)
|
visitMemberDeclaration(typeAlias)
|
||||||
print(" = ")
|
print(" = ")
|
||||||
typeAlias.expandedTypeRef.accept(this)
|
typeAlias.expandedTypeRef.accept(this)
|
||||||
println()
|
printer.newLine()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitTypeParameter(typeParameter: FirTypeParameter) {
|
override fun visitTypeParameter(typeParameter: FirTypeParameter) {
|
||||||
@@ -497,13 +470,13 @@ class FirRenderer(
|
|||||||
} else {
|
} else {
|
||||||
whenExpression.subject?.accept(this)
|
whenExpression.subject?.accept(this)
|
||||||
}
|
}
|
||||||
println(") {")
|
printer.println(") {")
|
||||||
pushIndent()
|
printer.pushIndent()
|
||||||
for (branch in whenExpression.branches) {
|
for (branch in whenExpression.branches) {
|
||||||
branch.accept(this)
|
branch.accept(this)
|
||||||
}
|
}
|
||||||
popIndent()
|
printer.popIndent()
|
||||||
println("}")
|
printer.println("}")
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitWhenSubjectExpression(whenSubjectExpression: FirWhenSubjectExpression) {
|
override fun visitWhenSubjectExpression(whenSubjectExpression: FirWhenSubjectExpression) {
|
||||||
|
|||||||
Reference in New Issue
Block a user