[FIR][renderer] add phase renderer for file and file annotations container
^KT-56543
This commit is contained in:
committed by
Space Team
parent
706ff6b61f
commit
8c599a84af
+19
@@ -0,0 +1,19 @@
|
||||
/*
|
||||
* Copyright 2010-2023 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.FirFileAnnotationsContainer
|
||||
|
||||
class FirFileAnnotationsContainerRenderer {
|
||||
internal lateinit var components: FirRendererComponents
|
||||
private val printer get() = components.printer
|
||||
|
||||
fun render(fileAnnotationsContainer: FirFileAnnotationsContainer) {
|
||||
components.annotationRenderer?.render(fileAnnotationsContainer)
|
||||
components.resolvePhaseRenderer?.render(fileAnnotationsContainer)
|
||||
printer.println("annotations container")
|
||||
}
|
||||
}
|
||||
@@ -46,6 +46,7 @@ class FirRenderer(
|
||||
override val typeRenderer: ConeTypeRenderer = ConeTypeRendererForDebugging(),
|
||||
override val valueParameterRenderer: FirValueParameterRenderer? = FirValueParameterRenderer(),
|
||||
override val errorExpressionRenderer: FirErrorExpressionRenderer? = FirErrorExpressionOnlyErrorRenderer(),
|
||||
override val fileAnnotationsContainerRenderer: FirFileAnnotationsContainerRenderer? = null,
|
||||
) : FirRendererComponents {
|
||||
|
||||
override val visitor = Visitor()
|
||||
@@ -59,7 +60,10 @@ class FirRenderer(
|
||||
)
|
||||
|
||||
fun withResolvePhase(): FirRenderer =
|
||||
FirRenderer(resolvePhaseRenderer = FirResolvePhaseRenderer())
|
||||
FirRenderer(
|
||||
resolvePhaseRenderer = FirResolvePhaseRenderer(),
|
||||
fileAnnotationsContainerRenderer = FirFileAnnotationsContainerRenderer(),
|
||||
)
|
||||
|
||||
fun withDeclarationAttributes(): FirRenderer =
|
||||
FirRenderer(declarationRenderer = FirDeclarationRendererWithAttributes())
|
||||
@@ -81,6 +85,7 @@ class FirRenderer(
|
||||
typeRenderer.idRenderer = idRenderer
|
||||
valueParameterRenderer?.components = this
|
||||
errorExpressionRenderer?.components = this
|
||||
fileAnnotationsContainerRenderer?.components = this
|
||||
}
|
||||
|
||||
fun renderElementAsString(element: FirElement): String {
|
||||
@@ -162,15 +167,26 @@ class FirRenderer(
|
||||
}
|
||||
|
||||
override fun visitFile(file: FirFile) {
|
||||
printer.println("FILE: ${file.name}")
|
||||
printer.print("FILE: ")
|
||||
resolvePhaseRenderer?.render(file)
|
||||
printer.println(file.name)
|
||||
|
||||
printer.pushIndent()
|
||||
annotationRenderer?.render(file)
|
||||
visitFileAnnotationsContainer(file.annotationsContainer)
|
||||
visitPackageDirective(file.packageDirective)
|
||||
file.imports.forEach { it.accept(this) }
|
||||
file.declarations.forEach { it.accept(this) }
|
||||
printer.popIndent()
|
||||
}
|
||||
|
||||
override fun visitFileAnnotationsContainer(fileAnnotationsContainer: FirFileAnnotationsContainer) {
|
||||
if (fileAnnotationsContainerRenderer != null) {
|
||||
fileAnnotationsContainerRenderer.render(fileAnnotationsContainer)
|
||||
} else {
|
||||
annotationRenderer?.render(fileAnnotationsContainer)
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitAnnotation(annotation: FirAnnotation) {
|
||||
annotationRenderer?.renderAnnotation(annotation)
|
||||
}
|
||||
|
||||
@@ -24,4 +24,5 @@ internal interface FirRendererComponents {
|
||||
val typeRenderer: ConeTypeRenderer
|
||||
val valueParameterRenderer: FirValueParameterRenderer?
|
||||
val errorExpressionRenderer: FirErrorExpressionRenderer?
|
||||
val fileAnnotationsContainerRenderer: FirFileAnnotationsContainerRenderer?
|
||||
}
|
||||
@@ -5,13 +5,13 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.renderer
|
||||
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
import org.jetbrains.kotlin.fir.FirElementWithResolvePhase
|
||||
|
||||
class FirResolvePhaseRenderer {
|
||||
internal lateinit var components: FirRendererComponents
|
||||
private val printer get() = components.printer
|
||||
|
||||
fun render(declaration: FirDeclaration) {
|
||||
printer.print("[${declaration.resolvePhase}] ")
|
||||
fun render(element: FirElementWithResolvePhase) {
|
||||
printer.print("[${element.resolvePhase}] ")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user