[Test] Implement handler which dumps overrides tree of specified classes

This commit is contained in:
Dmitriy Novozhilov
2021-02-26 17:26:04 +03:00
committed by TeamCityServer
parent 4299794de2
commit 523d37b0f5
7 changed files with 184 additions and 20 deletions
@@ -54,6 +54,8 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM
val renderCallableFqNames: Boolean,
val renderDeclarationResolvePhase: Boolean,
val renderAnnotation: Boolean,
val renderBodies: Boolean = true,
val renderPropertyAccessors: Boolean = true,
) {
object Normal : RenderMode(
renderLambdaBodies = true,
@@ -86,6 +88,16 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM
renderDeclarationResolvePhase = true,
renderAnnotation = true,
)
object NoBodies : RenderMode(
renderLambdaBodies = false,
renderCallArguments = false,
renderCallableFqNames = false,
renderDeclarationResolvePhase = false,
renderAnnotation = false,
renderBodies = false,
renderPropertyAccessors = false,
)
}
private val printer = Printer(builder)
@@ -442,6 +454,7 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM
override fun visitProperty(property: FirProperty) {
visitVariable(property)
if (property.isLocal) return
if (!mode.renderPropertyAccessors) return
println()
pushIndent()
property.getter?.accept(this)
@@ -543,14 +556,17 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM
anonymousInitializer.body?.renderBody()
}
private fun FirBlock.renderBody(additionalStatements: List<FirStatement> = emptyList()) = when (this) {
is FirLazyBlock -> {
println(" { LAZY_BLOCK }")
}
else -> renderInBraces {
for (statement in additionalStatements + statements) {
statement.accept(this@FirRenderer)
println()
private fun FirBlock.renderBody(additionalStatements: List<FirStatement> = emptyList()) {
if (!mode.renderBodies) return
when (this) {
is FirLazyBlock -> {
println(" { LAZY_BLOCK }")
}
else -> renderInBraces {
for (statement in additionalStatements + statements) {
statement.accept(this@FirRenderer)
println()
}
}
}
}
@@ -5,7 +5,7 @@
package org.jetbrains.kotlin.fir.declarations
sealed class FirDeclarationOrigin(val fromSupertypes: Boolean = false) {
sealed class FirDeclarationOrigin(private val displayName: String? = null, val fromSupertypes: Boolean = false) {
object Source : FirDeclarationOrigin()
object Library : FirDeclarationOrigin()
object BuiltIns : FirDeclarationOrigin()
@@ -18,7 +18,11 @@ sealed class FirDeclarationOrigin(val fromSupertypes: Boolean = false) {
object IntersectionOverride : FirDeclarationOrigin(fromSupertypes = true)
object Delegated : FirDeclarationOrigin()
class Plugin(val key: FirPluginKey) : FirDeclarationOrigin()
class Plugin(val key: FirPluginKey) : FirDeclarationOrigin(displayName = "Plugin[$key]")
override fun toString(): String {
return displayName ?: this::class.simpleName!!
}
}
abstract class FirPluginKey