FirRenderer: slightly change/refactor declaration rendering
This commit is contained in:
@@ -5,15 +5,45 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.renderer
|
||||
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
|
||||
|
||||
open class FirDeclarationRenderer {
|
||||
|
||||
internal lateinit var components: FirRendererComponents
|
||||
protected val printer get() = components.printer
|
||||
private val resolvePhaseRenderer get() = components.resolvePhaseRenderer
|
||||
private val typeRenderer get() = components.typeRenderer
|
||||
|
||||
fun render(declaration: FirDeclaration) {
|
||||
renderPhaseAndAttributes(declaration)
|
||||
if (declaration is FirConstructor) {
|
||||
declaration.dispatchReceiverType?.let {
|
||||
typeRenderer.render(it)
|
||||
printer.print(".")
|
||||
}
|
||||
printer.print("constructor")
|
||||
return
|
||||
}
|
||||
printer.print(
|
||||
when (declaration) {
|
||||
is FirRegularClass -> declaration.classKind.name.toLowerCaseAsciiOnly().replace("_", " ")
|
||||
is FirTypeAlias -> "typealias"
|
||||
is FirAnonymousFunction -> (declaration.label?.let { "${it.name}@" } ?: "") + "fun"
|
||||
is FirSimpleFunction -> "fun"
|
||||
is FirProperty -> {
|
||||
val prefix = if (declaration.isLocal) "l" else ""
|
||||
prefix + if (declaration.isVal) "val" else "var"
|
||||
}
|
||||
is FirPropertyAccessor -> if (declaration.isGetter) "get" else "set"
|
||||
is FirField -> "field"
|
||||
is FirEnumEntry -> "enum entry"
|
||||
else -> "unknown"
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
internal fun renderPhaseAndAttributes(declaration: FirDeclaration) {
|
||||
resolvePhaseRenderer?.render(declaration)
|
||||
with(declaration) {
|
||||
renderDeclarationAttributes()
|
||||
|
||||
@@ -24,7 +24,6 @@ import org.jetbrains.kotlin.fir.types.*
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
|
||||
import org.jetbrains.kotlin.name.StandardClassIds
|
||||
import org.jetbrains.kotlin.types.Variance
|
||||
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||
import java.util.*
|
||||
|
||||
@@ -243,7 +242,7 @@ class FirRenderer(
|
||||
|
||||
override fun visitMemberDeclaration(memberDeclaration: FirMemberDeclaration) {
|
||||
modifierRenderer.renderModifiers(memberDeclaration)
|
||||
visitDeclaration(memberDeclaration as FirDeclaration)
|
||||
declarationRenderer.render(memberDeclaration)
|
||||
when (memberDeclaration) {
|
||||
is FirClassLikeDeclaration -> {
|
||||
if (memberDeclaration is FirRegularClass) {
|
||||
@@ -264,24 +263,6 @@ class FirRenderer(
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitDeclaration(declaration: FirDeclaration) {
|
||||
declarationRenderer.render(declaration)
|
||||
print(
|
||||
when (declaration) {
|
||||
is FirRegularClass -> declaration.classKind.name.toLowerCaseAsciiOnly().replace("_", " ")
|
||||
is FirTypeAlias -> "typealias"
|
||||
is FirSimpleFunction -> "fun"
|
||||
is FirProperty -> {
|
||||
val prefix = if (declaration.isLocal) "l" else ""
|
||||
prefix + if (declaration.isVal) "val" else "var"
|
||||
}
|
||||
is FirField -> "field"
|
||||
is FirEnumEntry -> "enum entry"
|
||||
else -> "unknown"
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
override fun visitRegularClass(regularClass: FirRegularClass) {
|
||||
renderContexts(regularClass.contextReceivers)
|
||||
annotationRenderer?.render(regularClass)
|
||||
@@ -356,11 +337,6 @@ class FirRenderer(
|
||||
modifierRenderer.renderModifiers(constructor)
|
||||
declarationRenderer.render(constructor)
|
||||
|
||||
constructor.dispatchReceiverType?.let {
|
||||
typeRenderer.render(it)
|
||||
print(".")
|
||||
}
|
||||
print("constructor")
|
||||
constructor.typeParameters.renderTypeParameters()
|
||||
valueParameterRenderer.renderParameters(constructor.valueParameters)
|
||||
print(": ")
|
||||
@@ -374,10 +350,9 @@ class FirRenderer(
|
||||
}
|
||||
|
||||
override fun visitPropertyAccessor(propertyAccessor: FirPropertyAccessor) {
|
||||
declarationRenderer.render(propertyAccessor)
|
||||
annotationRenderer?.render(propertyAccessor)
|
||||
modifierRenderer.renderModifiers(propertyAccessor)
|
||||
print(if (propertyAccessor.isGetter) "get" else "set")
|
||||
declarationRenderer.render(propertyAccessor)
|
||||
valueParameterRenderer.renderParameters(propertyAccessor.valueParameters)
|
||||
print(": ")
|
||||
propertyAccessor.returnTypeRef.accept(this)
|
||||
@@ -390,13 +365,9 @@ class FirRenderer(
|
||||
}
|
||||
|
||||
override fun visitAnonymousFunction(anonymousFunction: FirAnonymousFunction) {
|
||||
declarationRenderer.render(anonymousFunction)
|
||||
annotationRenderer?.render(anonymousFunction)
|
||||
val label = anonymousFunction.label
|
||||
if (label != null) {
|
||||
print("${label.name}@")
|
||||
}
|
||||
print("fun ")
|
||||
declarationRenderer.render(anonymousFunction)
|
||||
print(" ")
|
||||
val receiverType = anonymousFunction.receiverTypeRef
|
||||
if (receiverType != null) {
|
||||
receiverType.accept(this)
|
||||
@@ -422,7 +393,7 @@ class FirRenderer(
|
||||
|
||||
override fun visitFunction(function: FirFunction) {
|
||||
valueParameterRenderer.renderParameters(function.valueParameters)
|
||||
visitDeclaration(function)
|
||||
declarationRenderer.render(function)
|
||||
bodyRenderer?.render(function)
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -28,7 +28,7 @@ open class FirValueParameterRenderer {
|
||||
}
|
||||
|
||||
fun renderParameter(valueParameter: FirValueParameter) {
|
||||
declarationRenderer.render(valueParameter)
|
||||
declarationRenderer.renderPhaseAndAttributes(valueParameter)
|
||||
annotationRenderer?.render(valueParameter)
|
||||
modifierRenderer.renderModifiers(valueParameter)
|
||||
if (valueParameter.name != SpecialNames.NO_NAME_PROVIDED) {
|
||||
|
||||
Reference in New Issue
Block a user