diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRenderer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRenderer.kt index c2691a42609..2be2fe936e8 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRenderer.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRenderer.kt @@ -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) { diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRendererComponents.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRendererComponents.kt index 53b04e1e958..e7c0d276781 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRendererComponents.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRendererComponents.kt @@ -27,4 +27,5 @@ internal interface FirRendererComponents { val errorExpressionRenderer: FirErrorExpressionRenderer? val fileAnnotationsContainerRenderer: FirFileAnnotationsContainerRenderer? val resolvedNamedReferenceRenderer: FirResolvedNamedReferenceRenderer + val resolvedQualifierRenderer: FirResolvedQualifierRenderer } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirResolvedQualifierRenderer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirResolvedQualifierRenderer.kt new file mode 100644 index 00000000000..3fbf9b24f81 --- /dev/null +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirResolvedQualifierRenderer.kt @@ -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("|") + } +} \ No newline at end of file