[FIR] Refactor: extract resolved qualifier rendering out of FirRenderer
^KT-62585
This commit is contained in:
committed by
Space Team
parent
6b1e340364
commit
f54a1b5ced
@@ -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
|
||||
}
|
||||
+40
@@ -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("|")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user