From f54a1b5ceda9988208fd4461850e16e07bd1b8d5 Mon Sep 17 00:00:00 2001 From: Roman Efremov Date: Tue, 17 Oct 2023 12:31:27 +0200 Subject: [PATCH] [FIR] Refactor: extract resolved qualifier rendering out of FirRenderer ^KT-62585 --- .../kotlin/fir/renderer/FirRenderer.kt | 17 ++------ .../fir/renderer/FirRendererComponents.kt | 1 + .../renderer/FirResolvedQualifierRenderer.kt | 40 +++++++++++++++++++ 3 files changed, 45 insertions(+), 13 deletions(-) create mode 100644 compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirResolvedQualifierRenderer.kt 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