[FIR] Refactor: extract resolved qualifier rendering out of FirRenderer

^KT-62585
This commit is contained in:
Roman Efremov
2023-10-17 12:31:27 +02:00
committed by Space Team
parent 6b1e340364
commit f54a1b5ced
3 changed files with 45 additions and 13 deletions
@@ -46,7 +46,8 @@ class FirRenderer(
override val valueParameterRenderer: FirValueParameterRenderer? = FirValueParameterRenderer(),
override val errorExpressionRenderer: FirErrorExpressionRenderer? = FirErrorExpressionOnlyErrorRenderer(),
override val fileAnnotationsContainerRenderer: FirFileAnnotationsContainerRenderer? = null,
override val resolvedNamedReferenceRenderer: FirResolvedNamedReferenceRenderer = FirResolvedNamedReferenceRendererWithLabel()
override val resolvedNamedReferenceRenderer: FirResolvedNamedReferenceRenderer = FirResolvedNamedReferenceRendererWithLabel(),
override val resolvedQualifierRenderer: FirResolvedQualifierRenderer = FirResolvedQualifierRendererWithLabel(),
) : FirRendererComponents {
override val visitor = Visitor()
@@ -100,6 +101,7 @@ class FirRenderer(
errorExpressionRenderer?.components = this
fileAnnotationsContainerRenderer?.components = this
resolvedNamedReferenceRenderer.components = this
resolvedQualifierRenderer.components = this
}
fun renderElementAsString(element: FirElement, trim: Boolean = false): String {
@@ -1137,18 +1139,7 @@ class FirRenderer(
}
override fun visitResolvedQualifier(resolvedQualifier: FirResolvedQualifier) {
annotationRenderer?.render(resolvedQualifier)
print("Q|")
val classId = resolvedQualifier.classId
if (classId != null) {
idRenderer.renderClassId(classId)
} else {
print(resolvedQualifier.packageFqName.asString().replace(".", "/"))
}
if (resolvedQualifier.isNullableLHSForCallableReference) {
print("?")
}
print("|")
resolvedQualifierRenderer.render(resolvedQualifier)
}
override fun visitBinaryLogicExpression(binaryLogicExpression: FirBinaryLogicExpression) {
@@ -27,4 +27,5 @@ internal interface FirRendererComponents {
val errorExpressionRenderer: FirErrorExpressionRenderer?
val fileAnnotationsContainerRenderer: FirFileAnnotationsContainerRenderer?
val resolvedNamedReferenceRenderer: FirResolvedNamedReferenceRenderer
val resolvedQualifierRenderer: FirResolvedQualifierRenderer
}
@@ -0,0 +1,40 @@
/*
* 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.expressions.FirResolvedQualifier
open class FirResolvedQualifierRenderer {
internal lateinit var components: FirRendererComponents
protected val printer: FirPrinter get() = components.printer
internal fun render(resolvedQualifier: FirResolvedQualifier) {
components.annotationRenderer?.render(resolvedQualifier)
renderResolvedQualifierWithoutAnnotations(resolvedQualifier)
}
protected open fun renderResolvedQualifierWithoutAnnotations(resolvedQualifier: FirResolvedQualifier) {
val classId = resolvedQualifier.classId
if (classId != null) {
components.idRenderer.renderClassId(classId)
} else {
printer.print(resolvedQualifier.packageFqName.asString().replace(".", "/"))
}
if (resolvedQualifier.isNullableLHSForCallableReference) {
printer.print("?")
}
}
}
class FirResolvedQualifierRendererWithLabel : FirResolvedQualifierRenderer() {
override fun renderResolvedQualifierWithoutAnnotations(resolvedQualifier: FirResolvedQualifier) {
printer.print("Q|")
super.renderResolvedQualifierWithoutAnnotations(resolvedQualifier)
printer.print("|")
}
}