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