Extract separate FirPropertyAccessorRenderer
This commit is contained in:
+3
-2
@@ -160,8 +160,9 @@ internal class KtFirTypeProvider(
|
||||
?: this.typeArguments.mapNotNull { it.type })
|
||||
|
||||
require(typeParameterSymbols.size == argumentTypes.size) {
|
||||
val renderedSymbol = FirRenderer(mode = FirRenderer.RenderMode.NoBodies).with(
|
||||
annotationRenderer = null, bodyRenderer = null, callArgumentsRenderer = FirCallNoArgumentsRenderer()
|
||||
val renderedSymbol = FirRenderer().with(
|
||||
annotationRenderer = null, bodyRenderer = null, propertyAccessorRenderer = null,
|
||||
callArgumentsRenderer = FirCallNoArgumentsRenderer()
|
||||
).renderElementAsString(symbol.fir)
|
||||
"'$renderedSymbol' expects '${typeParameterSymbols.size}' type arguments " +
|
||||
"but type '${this.renderForDebugging()}' has ${argumentTypes.size} type arguments."
|
||||
|
||||
+2
-4
@@ -15,7 +15,6 @@ import org.jetbrains.kotlin.fir.FirModuleData
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.*
|
||||
import org.jetbrains.kotlin.fir.render
|
||||
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.symbols.FirBasedSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.SymbolInternals
|
||||
@@ -29,12 +28,11 @@ object FirDiagnosticRenderers {
|
||||
val SYMBOL = Renderer { symbol: FirBasedSymbol<*> ->
|
||||
when (symbol) {
|
||||
is FirClassLikeSymbol<*>,
|
||||
is FirCallableSymbol<*> -> FirRenderer(
|
||||
mode = NoBodies
|
||||
).with(
|
||||
is FirCallableSymbol<*> -> FirRenderer().with(
|
||||
typeRenderer = ConeTypeRenderer(),
|
||||
classMemberRenderer = FirNoClassMemberRenderer(),
|
||||
bodyRenderer = null,
|
||||
propertyAccessorRenderer = null,
|
||||
callArgumentsRenderer = FirCallNoArgumentsRenderer(),
|
||||
modifierRenderer = FirPartialModifierRenderer(),
|
||||
valueParameterRenderer = FirValueParameterRendererNoDefaultValue(),
|
||||
|
||||
@@ -28,11 +28,11 @@ open class FirPrinter(builder: StringBuilder) {
|
||||
lineBeginning = true
|
||||
}
|
||||
|
||||
protected fun pushIndent() {
|
||||
internal fun pushIndent() {
|
||||
printer.pushIndent()
|
||||
}
|
||||
|
||||
protected fun popIndent() {
|
||||
internal fun popIndent() {
|
||||
printer.popIndent()
|
||||
}
|
||||
|
||||
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
/*
|
||||
* 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.FirProperty
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.hasExplicitBackingField
|
||||
|
||||
class FirPropertyAccessorRenderer {
|
||||
|
||||
internal lateinit var components: FirRendererComponents
|
||||
private val printer get() = components.printer
|
||||
private val visitor get() = components.visitor
|
||||
|
||||
fun render(property: FirProperty) {
|
||||
printer.println()
|
||||
printer.pushIndent()
|
||||
|
||||
if (property.hasExplicitBackingField) {
|
||||
property.backingField?.accept(visitor)
|
||||
printer.println()
|
||||
}
|
||||
|
||||
property.getter?.accept(visitor)
|
||||
if (property.getter?.body == null) {
|
||||
printer.println()
|
||||
}
|
||||
if (property.isVar) {
|
||||
property.setter?.accept(visitor)
|
||||
if (property.setter?.body == null) {
|
||||
printer.println()
|
||||
}
|
||||
}
|
||||
printer.popIndent()
|
||||
}
|
||||
}
|
||||
@@ -39,6 +39,7 @@ class FirRenderer private constructor(
|
||||
private val declarationRenderer: FirDeclarationRenderer,
|
||||
private val modifierRenderer: FirModifierRenderer,
|
||||
private val packageDirectiveRenderer: FirPackageDirectiveRenderer?,
|
||||
private val propertyAccessorRenderer: FirPropertyAccessorRenderer?,
|
||||
private val typeRenderer: ConeTypeRenderer,
|
||||
private val valueParameterRenderer: FirValueParameterRenderer,
|
||||
) : FirPrinter(builder) {
|
||||
@@ -54,6 +55,7 @@ class FirRenderer private constructor(
|
||||
components.declarationRenderer = declarationRenderer
|
||||
components.modifierRenderer = modifierRenderer
|
||||
components.packageDirectiveRenderer = packageDirectiveRenderer
|
||||
components.propertyAccessorRenderer = propertyAccessorRenderer
|
||||
components.typeRenderer = typeRenderer
|
||||
components.valueParameterRenderer = valueParameterRenderer
|
||||
@Suppress("LeakingThis")
|
||||
@@ -65,6 +67,7 @@ class FirRenderer private constructor(
|
||||
declarationRenderer.components = components
|
||||
modifierRenderer.components = components
|
||||
packageDirectiveRenderer?.components = components
|
||||
propertyAccessorRenderer?.components = components
|
||||
typeRenderer.builder = builder
|
||||
valueParameterRenderer.components = components
|
||||
}
|
||||
@@ -84,6 +87,7 @@ class FirRenderer private constructor(
|
||||
FirDeclarationRenderer(),
|
||||
FirAllModifierRenderer(),
|
||||
packageDirectiveRenderer = null,
|
||||
FirPropertyAccessorRenderer(),
|
||||
ConeTypeRendererForDebugging(),
|
||||
FirValueParameterRenderer(),
|
||||
)
|
||||
@@ -98,12 +102,14 @@ class FirRenderer private constructor(
|
||||
declarationRenderer: FirDeclarationRenderer = this.declarationRenderer,
|
||||
modifierRenderer: FirModifierRenderer = this.modifierRenderer,
|
||||
packageDirectiveRenderer: FirPackageDirectiveRenderer? = this.packageDirectiveRenderer,
|
||||
propertyAccessorRenderer: FirPropertyAccessorRenderer? = this.propertyAccessorRenderer,
|
||||
typeRenderer: ConeTypeRenderer = this.typeRenderer,
|
||||
valueParameterRenderer: FirValueParameterRenderer = this.valueParameterRenderer,
|
||||
): FirRenderer = FirRenderer(
|
||||
builder, mode, FirComponentsImpl(),
|
||||
annotationRenderer, bodyRenderer, callArgumentsRenderer, classMemberRenderer,
|
||||
declarationRenderer, modifierRenderer, packageDirectiveRenderer, typeRenderer, valueParameterRenderer
|
||||
declarationRenderer, modifierRenderer, packageDirectiveRenderer,
|
||||
propertyAccessorRenderer, typeRenderer, valueParameterRenderer
|
||||
)
|
||||
|
||||
fun renderElementAsString(element: FirElement): String {
|
||||
@@ -133,6 +139,8 @@ class FirRenderer private constructor(
|
||||
|
||||
override var packageDirectiveRenderer: FirPackageDirectiveRenderer? = null
|
||||
|
||||
override var propertyAccessorRenderer: FirPropertyAccessorRenderer? = null
|
||||
|
||||
override lateinit var callArgumentsRenderer: FirCallArgumentsRenderer
|
||||
|
||||
override lateinit var classMemberRenderer: FirClassMemberRenderer
|
||||
@@ -152,7 +160,6 @@ class FirRenderer private constructor(
|
||||
|
||||
data class RenderMode(
|
||||
val renderCallableFqNames: Boolean,
|
||||
val renderPropertyAccessors: Boolean = true,
|
||||
) {
|
||||
companion object {
|
||||
val Normal = RenderMode(
|
||||
@@ -162,11 +169,6 @@ class FirRenderer private constructor(
|
||||
val WithFqNames = RenderMode(
|
||||
renderCallableFqNames = true,
|
||||
)
|
||||
|
||||
val NoBodies = RenderMode(
|
||||
renderCallableFqNames = false,
|
||||
renderPropertyAccessors = false,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -401,26 +403,7 @@ class FirRenderer private constructor(
|
||||
override fun visitProperty(property: FirProperty) {
|
||||
visitVariable(property)
|
||||
if (property.isLocal) return
|
||||
if (!mode.renderPropertyAccessors) return
|
||||
println()
|
||||
pushIndent()
|
||||
|
||||
if (property.hasExplicitBackingField) {
|
||||
property.backingField?.accept(this)
|
||||
println()
|
||||
}
|
||||
|
||||
property.getter?.accept(this)
|
||||
if (property.getter?.body == null) {
|
||||
println()
|
||||
}
|
||||
if (property.isVar) {
|
||||
property.setter?.accept(this)
|
||||
if (property.setter?.body == null) {
|
||||
println()
|
||||
}
|
||||
}
|
||||
popIndent()
|
||||
propertyAccessorRenderer?.render(property)
|
||||
}
|
||||
|
||||
override fun visitBackingField(backingField: FirBackingField) {
|
||||
|
||||
@@ -15,6 +15,7 @@ internal interface FirRendererComponents {
|
||||
val classMemberRenderer: FirClassMemberRenderer
|
||||
val modifierRenderer: FirModifierRenderer
|
||||
val packageDirectiveRenderer: FirPackageDirectiveRenderer?
|
||||
val propertyAccessorRenderer: FirPropertyAccessorRenderer?
|
||||
val typeRenderer: ConeTypeRenderer
|
||||
val valueParameterRenderer: FirValueParameterRenderer
|
||||
}
|
||||
+3
-2
@@ -137,8 +137,9 @@ class FirScopeDumpHandler(testServices: TestServices) : FirAnalysisHandler(testS
|
||||
|
||||
private fun SmartPrinter.printInfo(declaration: FirCallableDeclaration, scope: FirTypeScope, counter: SymbolCounter) {
|
||||
print("[${declaration.origin}]: ")
|
||||
val renderedDeclaration = FirRenderer(mode = FirRenderer.RenderMode.NoBodies).with(
|
||||
annotationRenderer = null, bodyRenderer = null, callArgumentsRenderer = FirCallNoArgumentsRenderer()
|
||||
val renderedDeclaration = FirRenderer().with(
|
||||
annotationRenderer = null, bodyRenderer = null, propertyAccessorRenderer = null,
|
||||
callArgumentsRenderer = FirCallNoArgumentsRenderer()
|
||||
).renderElementAsString(declaration).trim()
|
||||
print(renderedDeclaration)
|
||||
print(" from $scope")
|
||||
|
||||
Reference in New Issue
Block a user