Extract separate FirValueParameterRenderer
This commit is contained in:
+3
-1
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.fir.FirModuleData
|
|||||||
import org.jetbrains.kotlin.fir.declarations.utils.*
|
import org.jetbrains.kotlin.fir.declarations.utils.*
|
||||||
import org.jetbrains.kotlin.fir.render
|
import org.jetbrains.kotlin.fir.render
|
||||||
import org.jetbrains.kotlin.fir.renderer.*
|
import org.jetbrains.kotlin.fir.renderer.*
|
||||||
|
import org.jetbrains.kotlin.fir.renderer.FirRenderer.RenderMode.Companion.NoBodies
|
||||||
import org.jetbrains.kotlin.fir.renderer.FirRenderer.RenderMode.Companion.WithFqNames
|
import org.jetbrains.kotlin.fir.renderer.FirRenderer.RenderMode.Companion.WithFqNames
|
||||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.SymbolInternals
|
import org.jetbrains.kotlin.fir.symbols.SymbolInternals
|
||||||
@@ -29,13 +30,14 @@ object FirDiagnosticRenderers {
|
|||||||
when (symbol) {
|
when (symbol) {
|
||||||
is FirClassLikeSymbol<*>,
|
is FirClassLikeSymbol<*>,
|
||||||
is FirCallableSymbol<*> -> FirRenderer(
|
is FirCallableSymbol<*> -> FirRenderer(
|
||||||
mode = FirRenderer.RenderMode.DeclarationHeader
|
mode = NoBodies
|
||||||
).with(
|
).with(
|
||||||
typeRenderer = ConeTypeRenderer(),
|
typeRenderer = ConeTypeRenderer(),
|
||||||
classMemberRenderer = FirNoClassMemberRenderer(),
|
classMemberRenderer = FirNoClassMemberRenderer(),
|
||||||
bodyRenderer = null,
|
bodyRenderer = null,
|
||||||
callArgumentsRenderer = FirCallNoArgumentsRenderer(),
|
callArgumentsRenderer = FirCallNoArgumentsRenderer(),
|
||||||
modifierRenderer = FirPartialModifierRenderer(),
|
modifierRenderer = FirPartialModifierRenderer(),
|
||||||
|
valueParameterRenderer = FirValueParameterRendererNoDefaultValue(),
|
||||||
).renderElementAsString(symbol.fir)
|
).renderElementAsString(symbol.fir)
|
||||||
is FirTypeParameterSymbol -> symbol.name.asString()
|
is FirTypeParameterSymbol -> symbol.name.asString()
|
||||||
else -> "???"
|
else -> "???"
|
||||||
|
|||||||
@@ -22,16 +22,15 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
|
|||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
|
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
|
||||||
import org.jetbrains.kotlin.name.SpecialNames
|
|
||||||
import org.jetbrains.kotlin.name.StandardClassIds
|
import org.jetbrains.kotlin.name.StandardClassIds
|
||||||
import org.jetbrains.kotlin.types.Variance
|
import org.jetbrains.kotlin.types.Variance
|
||||||
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
|
import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
open class FirRenderer private constructor(
|
class FirRenderer private constructor(
|
||||||
private val builder: StringBuilder,
|
private val builder: StringBuilder,
|
||||||
protected val mode: RenderMode,
|
private val mode: RenderMode,
|
||||||
components: FirComponentsImpl,
|
components: FirComponentsImpl,
|
||||||
private val annotationRenderer: FirAnnotationRenderer?,
|
private val annotationRenderer: FirAnnotationRenderer?,
|
||||||
private val bodyRenderer: FirBodyRenderer?,
|
private val bodyRenderer: FirBodyRenderer?,
|
||||||
@@ -40,7 +39,8 @@ open class FirRenderer private constructor(
|
|||||||
private val declarationRenderer: FirDeclarationRenderer,
|
private val declarationRenderer: FirDeclarationRenderer,
|
||||||
private val modifierRenderer: FirModifierRenderer,
|
private val modifierRenderer: FirModifierRenderer,
|
||||||
private val packageDirectiveRenderer: FirPackageDirectiveRenderer?,
|
private val packageDirectiveRenderer: FirPackageDirectiveRenderer?,
|
||||||
private val typeRenderer: ConeTypeRenderer
|
private val typeRenderer: ConeTypeRenderer,
|
||||||
|
private val valueParameterRenderer: FirValueParameterRenderer,
|
||||||
) : FirPrinter(builder) {
|
) : FirPrinter(builder) {
|
||||||
|
|
||||||
private val visitor = Visitor()
|
private val visitor = Visitor()
|
||||||
@@ -55,6 +55,7 @@ open class FirRenderer private constructor(
|
|||||||
components.modifierRenderer = modifierRenderer
|
components.modifierRenderer = modifierRenderer
|
||||||
components.packageDirectiveRenderer = packageDirectiveRenderer
|
components.packageDirectiveRenderer = packageDirectiveRenderer
|
||||||
components.typeRenderer = typeRenderer
|
components.typeRenderer = typeRenderer
|
||||||
|
components.valueParameterRenderer = valueParameterRenderer
|
||||||
@Suppress("LeakingThis")
|
@Suppress("LeakingThis")
|
||||||
components.printer = this
|
components.printer = this
|
||||||
annotationRenderer?.components = components
|
annotationRenderer?.components = components
|
||||||
@@ -65,6 +66,7 @@ open class FirRenderer private constructor(
|
|||||||
modifierRenderer.components = components
|
modifierRenderer.components = components
|
||||||
packageDirectiveRenderer?.components = components
|
packageDirectiveRenderer?.components = components
|
||||||
typeRenderer.builder = builder
|
typeRenderer.builder = builder
|
||||||
|
valueParameterRenderer.components = components
|
||||||
}
|
}
|
||||||
|
|
||||||
private constructor(
|
private constructor(
|
||||||
@@ -83,6 +85,7 @@ open class FirRenderer private constructor(
|
|||||||
FirAllModifierRenderer(),
|
FirAllModifierRenderer(),
|
||||||
packageDirectiveRenderer = null,
|
packageDirectiveRenderer = null,
|
||||||
ConeTypeRendererForDebugging(),
|
ConeTypeRendererForDebugging(),
|
||||||
|
FirValueParameterRenderer(),
|
||||||
)
|
)
|
||||||
|
|
||||||
constructor(builder: StringBuilder = StringBuilder(), mode: RenderMode = RenderMode.Normal) : this(builder, mode, FirComponentsImpl())
|
constructor(builder: StringBuilder = StringBuilder(), mode: RenderMode = RenderMode.Normal) : this(builder, mode, FirComponentsImpl())
|
||||||
@@ -95,11 +98,12 @@ open class FirRenderer private constructor(
|
|||||||
declarationRenderer: FirDeclarationRenderer = this.declarationRenderer,
|
declarationRenderer: FirDeclarationRenderer = this.declarationRenderer,
|
||||||
modifierRenderer: FirModifierRenderer = this.modifierRenderer,
|
modifierRenderer: FirModifierRenderer = this.modifierRenderer,
|
||||||
packageDirectiveRenderer: FirPackageDirectiveRenderer? = this.packageDirectiveRenderer,
|
packageDirectiveRenderer: FirPackageDirectiveRenderer? = this.packageDirectiveRenderer,
|
||||||
typeRenderer: ConeTypeRenderer = this.typeRenderer
|
typeRenderer: ConeTypeRenderer = this.typeRenderer,
|
||||||
|
valueParameterRenderer: FirValueParameterRenderer = this.valueParameterRenderer,
|
||||||
): FirRenderer = FirRenderer(
|
): FirRenderer = FirRenderer(
|
||||||
builder, mode, FirComponentsImpl(),
|
builder, mode, FirComponentsImpl(),
|
||||||
annotationRenderer, bodyRenderer, callArgumentsRenderer, classMemberRenderer,
|
annotationRenderer, bodyRenderer, callArgumentsRenderer, classMemberRenderer,
|
||||||
declarationRenderer, modifierRenderer, packageDirectiveRenderer, typeRenderer
|
declarationRenderer, modifierRenderer, packageDirectiveRenderer, typeRenderer, valueParameterRenderer
|
||||||
)
|
)
|
||||||
|
|
||||||
fun renderElementAsString(element: FirElement): String {
|
fun renderElementAsString(element: FirElement): String {
|
||||||
@@ -139,6 +143,8 @@ open class FirRenderer private constructor(
|
|||||||
|
|
||||||
override lateinit var typeRenderer: ConeTypeRenderer
|
override lateinit var typeRenderer: ConeTypeRenderer
|
||||||
|
|
||||||
|
override lateinit var valueParameterRenderer: FirValueParameterRenderer
|
||||||
|
|
||||||
override lateinit var visitor: Visitor
|
override lateinit var visitor: Visitor
|
||||||
|
|
||||||
override lateinit var printer: FirPrinter
|
override lateinit var printer: FirPrinter
|
||||||
@@ -147,7 +153,6 @@ open class FirRenderer private constructor(
|
|||||||
data class RenderMode(
|
data class RenderMode(
|
||||||
val renderCallableFqNames: Boolean,
|
val renderCallableFqNames: Boolean,
|
||||||
val renderPropertyAccessors: Boolean = true,
|
val renderPropertyAccessors: Boolean = true,
|
||||||
val renderDefaultParameterValues: Boolean = true,
|
|
||||||
) {
|
) {
|
||||||
companion object {
|
companion object {
|
||||||
val Normal = RenderMode(
|
val Normal = RenderMode(
|
||||||
@@ -162,12 +167,6 @@ open class FirRenderer private constructor(
|
|||||||
renderCallableFqNames = false,
|
renderCallableFqNames = false,
|
||||||
renderPropertyAccessors = false,
|
renderPropertyAccessors = false,
|
||||||
)
|
)
|
||||||
|
|
||||||
val DeclarationHeader = RenderMode(
|
|
||||||
renderCallableFqNames = false,
|
|
||||||
renderPropertyAccessors = false,
|
|
||||||
renderDefaultParameterValues = false,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -181,12 +180,6 @@ open class FirRenderer private constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private fun List<FirValueParameter>.renderParameters() {
|
|
||||||
print("(")
|
|
||||||
renderSeparated(this, visitor)
|
|
||||||
print(")")
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun Variance.renderVariance() {
|
private fun Variance.renderVariance() {
|
||||||
label.let {
|
label.let {
|
||||||
print(it)
|
print(it)
|
||||||
@@ -238,7 +231,7 @@ open class FirRenderer private constructor(
|
|||||||
annotationRenderer?.render(annotationContainer)
|
annotationRenderer?.render(annotationContainer)
|
||||||
}
|
}
|
||||||
|
|
||||||
protected open fun renderClassDeclarations(regularClass: FirRegularClass) {
|
fun renderClassDeclarations(regularClass: FirRegularClass) {
|
||||||
classMemberRenderer.render(regularClass)
|
classMemberRenderer.render(regularClass)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -301,7 +294,7 @@ open class FirRenderer private constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (callableDeclaration is FirFunction) {
|
if (callableDeclaration is FirFunction) {
|
||||||
callableDeclaration.valueParameters.renderParameters()
|
valueParameterRenderer.renderParameters(callableDeclaration.valueParameters)
|
||||||
}
|
}
|
||||||
print(": ")
|
print(": ")
|
||||||
callableDeclaration.returnTypeRef.accept(this)
|
callableDeclaration.returnTypeRef.accept(this)
|
||||||
@@ -460,7 +453,7 @@ open class FirRenderer private constructor(
|
|||||||
}
|
}
|
||||||
print("constructor")
|
print("constructor")
|
||||||
constructor.typeParameters.renderTypeParameters()
|
constructor.typeParameters.renderTypeParameters()
|
||||||
constructor.valueParameters.renderParameters()
|
valueParameterRenderer.renderParameters(constructor.valueParameters)
|
||||||
print(": ")
|
print(": ")
|
||||||
constructor.returnTypeRef.accept(this)
|
constructor.returnTypeRef.accept(this)
|
||||||
val body = constructor.body
|
val body = constructor.body
|
||||||
@@ -476,7 +469,7 @@ open class FirRenderer private constructor(
|
|||||||
annotationRenderer?.render(propertyAccessor)
|
annotationRenderer?.render(propertyAccessor)
|
||||||
modifierRenderer.renderModifiers(propertyAccessor)
|
modifierRenderer.renderModifiers(propertyAccessor)
|
||||||
print(if (propertyAccessor.isGetter) "get" else "set")
|
print(if (propertyAccessor.isGetter) "get" else "set")
|
||||||
propertyAccessor.valueParameters.renderParameters()
|
valueParameterRenderer.renderParameters(propertyAccessor.valueParameters)
|
||||||
print(": ")
|
print(": ")
|
||||||
propertyAccessor.returnTypeRef.accept(this)
|
propertyAccessor.returnTypeRef.accept(this)
|
||||||
propertyAccessor.renderContractDescription()
|
propertyAccessor.renderContractDescription()
|
||||||
@@ -507,7 +500,7 @@ open class FirRenderer private constructor(
|
|||||||
) {
|
) {
|
||||||
print("(<no-parameters>)")
|
print("(<no-parameters>)")
|
||||||
}
|
}
|
||||||
anonymousFunction.valueParameters.renderParameters()
|
valueParameterRenderer.renderParameters(anonymousFunction.valueParameters)
|
||||||
print(": ")
|
print(": ")
|
||||||
anonymousFunction.returnTypeRef.accept(this)
|
anonymousFunction.returnTypeRef.accept(this)
|
||||||
print(" <inline=${anonymousFunction.inlineStatus}")
|
print(" <inline=${anonymousFunction.inlineStatus}")
|
||||||
@@ -519,7 +512,7 @@ open class FirRenderer private constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun visitFunction(function: FirFunction) {
|
override fun visitFunction(function: FirFunction) {
|
||||||
function.valueParameters.renderParameters()
|
valueParameterRenderer.renderParameters(function.valueParameters)
|
||||||
visitDeclaration(function)
|
visitDeclaration(function)
|
||||||
bodyRenderer?.render(function)
|
bodyRenderer?.render(function)
|
||||||
}
|
}
|
||||||
@@ -572,21 +565,7 @@ open class FirRenderer private constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun visitValueParameter(valueParameter: FirValueParameter) {
|
override fun visitValueParameter(valueParameter: FirValueParameter) {
|
||||||
declarationRenderer.render(valueParameter)
|
valueParameterRenderer.renderParameter(valueParameter)
|
||||||
annotationRenderer?.render(valueParameter)
|
|
||||||
modifierRenderer.renderModifiers(valueParameter)
|
|
||||||
if (valueParameter.name != SpecialNames.NO_NAME_PROVIDED) {
|
|
||||||
print(valueParameter.name.toString() + ": ")
|
|
||||||
}
|
|
||||||
valueParameter.returnTypeRef.accept(this)
|
|
||||||
valueParameter.defaultValue?.let {
|
|
||||||
print(" = ")
|
|
||||||
if (mode.renderDefaultParameterValues) {
|
|
||||||
it.accept(this)
|
|
||||||
} else {
|
|
||||||
print("...")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitImport(import: FirImport) {
|
override fun visitImport(import: FirImport) {
|
||||||
@@ -864,7 +843,7 @@ open class FirRenderer private constructor(
|
|||||||
it.accept(this)
|
it.accept(this)
|
||||||
print(".")
|
print(".")
|
||||||
}
|
}
|
||||||
functionTypeRef.valueParameters.renderParameters()
|
valueParameterRenderer.renderParameters(functionTypeRef.valueParameters)
|
||||||
print(" -> ")
|
print(" -> ")
|
||||||
functionTypeRef.returnTypeRef.accept(this)
|
functionTypeRef.returnTypeRef.accept(this)
|
||||||
print(" )")
|
print(" )")
|
||||||
|
|||||||
@@ -16,4 +16,5 @@ internal interface FirRendererComponents {
|
|||||||
val modifierRenderer: FirModifierRenderer
|
val modifierRenderer: FirModifierRenderer
|
||||||
val packageDirectiveRenderer: FirPackageDirectiveRenderer?
|
val packageDirectiveRenderer: FirPackageDirectiveRenderer?
|
||||||
val typeRenderer: ConeTypeRenderer
|
val typeRenderer: ConeTypeRenderer
|
||||||
|
val valueParameterRenderer: FirValueParameterRenderer
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
/*
|
||||||
|
* 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.fir.declarations.FirValueParameter
|
||||||
|
import org.jetbrains.kotlin.name.SpecialNames
|
||||||
|
|
||||||
|
open class FirValueParameterRenderer {
|
||||||
|
internal lateinit var components: FirRendererComponents
|
||||||
|
protected val printer get() = components.printer
|
||||||
|
protected val visitor get() = components.visitor
|
||||||
|
private val annotationRenderer get() = components.annotationRenderer
|
||||||
|
protected val declarationRenderer get() = components.declarationRenderer
|
||||||
|
private val modifierRenderer get() = components.modifierRenderer
|
||||||
|
|
||||||
|
fun renderParameters(valueParameters: List<FirValueParameter>) {
|
||||||
|
printer.print("(")
|
||||||
|
for ((index, valueParameter) in valueParameters.withIndex()) {
|
||||||
|
if (index > 0) {
|
||||||
|
printer.print(", ")
|
||||||
|
}
|
||||||
|
renderParameter(valueParameter)
|
||||||
|
}
|
||||||
|
printer.print(")")
|
||||||
|
}
|
||||||
|
|
||||||
|
fun renderParameter(valueParameter: FirValueParameter) {
|
||||||
|
declarationRenderer.render(valueParameter)
|
||||||
|
annotationRenderer?.render(valueParameter)
|
||||||
|
modifierRenderer.renderModifiers(valueParameter)
|
||||||
|
if (valueParameter.name != SpecialNames.NO_NAME_PROVIDED) {
|
||||||
|
printer.print(valueParameter.name.toString() + ": ")
|
||||||
|
}
|
||||||
|
valueParameter.returnTypeRef.accept(visitor)
|
||||||
|
renderDefaultValue(valueParameter)
|
||||||
|
}
|
||||||
|
|
||||||
|
protected open fun renderDefaultValue(valueParameter: FirValueParameter) {
|
||||||
|
valueParameter.defaultValue?.let {
|
||||||
|
printer.print(" = ")
|
||||||
|
it.accept(visitor)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
/*
|
||||||
|
* 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.fir.declarations.FirValueParameter
|
||||||
|
|
||||||
|
class FirValueParameterRendererNoDefaultValue : FirValueParameterRenderer() {
|
||||||
|
override fun renderDefaultValue(valueParameter: FirValueParameter) {
|
||||||
|
valueParameter.defaultValue?.let {
|
||||||
|
printer.print(" = ...")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user