Extract separate ConeIdRenderer and get rid of FirRenderer.RenderMode
This commit is contained in:
-1
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.state.LLFirSourceResolveS
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AbstractLowLevelApiSingleFileTest
|
||||
import org.jetbrains.kotlin.fir.renderer.FirDeclarationRendererWithResolvePhase
|
||||
import org.jetbrains.kotlin.fir.renderer.FirRenderer
|
||||
import org.jetbrains.kotlin.fir.renderer.FirRenderer.RenderMode.Companion.Normal
|
||||
import org.jetbrains.kotlin.psi.KtAnnotated
|
||||
import org.jetbrains.kotlin.psi.KtElement
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
|
||||
+2
-1
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.fir.builder.PsiHandlingMode
|
||||
import org.jetbrains.kotlin.fir.builder.RawFirBuilder
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.psi
|
||||
import org.jetbrains.kotlin.fir.renderer.ConeIdFullRenderer
|
||||
import org.jetbrains.kotlin.fir.renderer.FirRenderer
|
||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||
import org.jetbrains.kotlin.fir.scopes.FirContainingNamesAwareScope
|
||||
@@ -126,7 +127,7 @@ abstract class AbstractPartialRawFirBuilderTestCase : AbstractLowLevelApiSingleF
|
||||
null
|
||||
)
|
||||
|
||||
val firDump = FirRenderer(mode = FirRenderer.RenderMode.WithFqNames).renderElementAsString(firElement)
|
||||
val firDump = FirRenderer().with(idRenderer = ConeIdFullRenderer()).renderElementAsString(firElement)
|
||||
JUnit5Assertions.assertEqualsToTestDataFileSibling(firDump)
|
||||
}
|
||||
|
||||
|
||||
-1
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AbstractLowLeve
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||
import org.jetbrains.kotlin.fir.renderer.FirDeclarationRendererWithResolvePhase
|
||||
import org.jetbrains.kotlin.fir.renderer.FirRenderer
|
||||
import org.jetbrains.kotlin.fir.renderer.FirRenderer.RenderMode.Companion.Normal
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.test.services.TestModuleStructure
|
||||
import org.jetbrains.kotlin.test.services.TestServices
|
||||
|
||||
+3
-3
@@ -15,7 +15,6 @@ import org.jetbrains.kotlin.fir.FirModuleData
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.*
|
||||
import org.jetbrains.kotlin.fir.render
|
||||
import org.jetbrains.kotlin.fir.renderer.*
|
||||
import org.jetbrains.kotlin.fir.renderer.FirRenderer.RenderMode.Companion.WithFqNames
|
||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.SymbolInternals
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||
@@ -30,6 +29,7 @@ object FirDiagnosticRenderers {
|
||||
is FirClassLikeSymbol<*>,
|
||||
is FirCallableSymbol<*> -> FirRenderer().with(
|
||||
typeRenderer = ConeTypeRenderer(),
|
||||
idRenderer = ConeIdShortRenderer(),
|
||||
classMemberRenderer = FirNoClassMemberRenderer(),
|
||||
bodyRenderer = null,
|
||||
propertyAccessorRenderer = null,
|
||||
@@ -103,8 +103,8 @@ object FirDiagnosticRenderers {
|
||||
|
||||
val FQ_NAMES_IN_TYPES = Renderer { symbol: FirBasedSymbol<*> ->
|
||||
@OptIn(SymbolInternals::class)
|
||||
FirRenderer(mode = WithFqNames).with(
|
||||
annotationRenderer = null, bodyRenderer = null
|
||||
FirRenderer().with(
|
||||
annotationRenderer = null, bodyRenderer = null, idRenderer = ConeIdFullRenderer()
|
||||
).renderElementAsString(symbol.fir)
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
/*
|
||||
* Copyright 2010-2022 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.name.CallableId
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
|
||||
class ConeIdFullRenderer : ConeIdRenderer() {
|
||||
override fun renderClassId(classId: ClassId) {
|
||||
builder.append(classId.asString())
|
||||
}
|
||||
|
||||
override fun renderCallableId(callableId: CallableId) {
|
||||
builder.append(callableId)
|
||||
}
|
||||
}
|
||||
+5
-7
@@ -5,15 +5,13 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.renderer
|
||||
|
||||
import org.jetbrains.kotlin.name.CallableId
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
|
||||
open class ConeTypeRendererWithFqNames() : ConeTypeRenderer() {
|
||||
abstract class ConeIdRenderer {
|
||||
|
||||
constructor(builder: StringBuilder) : this() {
|
||||
this.builder = builder
|
||||
}
|
||||
lateinit var builder: StringBuilder
|
||||
|
||||
override fun ClassId.render() {
|
||||
builder.append(asString())
|
||||
}
|
||||
abstract fun renderClassId(classId: ClassId)
|
||||
abstract fun renderCallableId(callableId: CallableId)
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
/*
|
||||
* Copyright 2010-2022 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.name.CallableId
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
|
||||
class ConeIdRendererForDebugging : ConeIdRenderer() {
|
||||
override fun renderClassId(classId: ClassId) {
|
||||
builder.append(classId.asString())
|
||||
}
|
||||
|
||||
override fun renderCallableId(callableId: CallableId) {
|
||||
builder.append(callableId.callableName)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
/*
|
||||
* Copyright 2010-2022 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.name.CallableId
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
|
||||
open class ConeIdShortRenderer : ConeIdRenderer() {
|
||||
override fun renderClassId(classId: ClassId) {
|
||||
builder.append(classId.relativeClassName.asString())
|
||||
}
|
||||
|
||||
override fun renderCallableId(callableId: CallableId) {
|
||||
builder.append(callableId.callableName)
|
||||
}
|
||||
}
|
||||
@@ -7,16 +7,18 @@ package org.jetbrains.kotlin.fir.renderer
|
||||
|
||||
import org.jetbrains.kotlin.builtins.functions.FunctionClassKind
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import kotlin.contracts.ExperimentalContracts
|
||||
import kotlin.contracts.contract
|
||||
|
||||
open class ConeTypeRenderer() {
|
||||
|
||||
lateinit var builder: StringBuilder
|
||||
lateinit var idRenderer: ConeIdRenderer
|
||||
|
||||
constructor(builder: StringBuilder) : this() {
|
||||
constructor(builder: StringBuilder, idRenderer: ConeIdRenderer) : this() {
|
||||
this.builder = builder
|
||||
this.idRenderer = idRenderer
|
||||
idRenderer.builder = builder
|
||||
}
|
||||
|
||||
open fun renderAsPossibleFunctionType(
|
||||
@@ -137,7 +139,7 @@ open class ConeTypeRenderer() {
|
||||
}
|
||||
|
||||
private fun ConeClassLikeType.render() {
|
||||
lookupTag.classId.render()
|
||||
idRenderer.renderClassId(lookupTag.classId)
|
||||
if (typeArguments.isEmpty()) return
|
||||
builder.append("<")
|
||||
for ((index, typeArgument) in typeArguments.withIndex()) {
|
||||
@@ -149,10 +151,6 @@ open class ConeTypeRenderer() {
|
||||
builder.append(">")
|
||||
}
|
||||
|
||||
protected open fun ClassId.render() {
|
||||
builder.append(relativeClassName.asString())
|
||||
}
|
||||
|
||||
private fun ConeFlexibleType.render() {
|
||||
val lowerBound = lowerBound
|
||||
val upperBound = upperBound
|
||||
|
||||
+3
-1
@@ -8,10 +8,12 @@ package org.jetbrains.kotlin.fir.renderer
|
||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||
import org.jetbrains.kotlin.fir.types.ConeTypeProjection
|
||||
|
||||
class ConeTypeRendererForDebugging() : ConeTypeRendererWithFqNames() {
|
||||
class ConeTypeRendererForDebugging() : ConeTypeRenderer() {
|
||||
|
||||
constructor(builder: StringBuilder) : this() {
|
||||
this.builder = builder
|
||||
this.idRenderer = ConeIdRendererForDebugging()
|
||||
idRenderer.builder = builder
|
||||
}
|
||||
|
||||
override fun renderAsPossibleFunctionType(type: ConeKotlinType, renderType: ConeTypeProjection.() -> Unit) {
|
||||
|
||||
@@ -6,9 +6,7 @@
|
||||
package org.jetbrains.kotlin.fir.types
|
||||
|
||||
import org.jetbrains.kotlin.builtins.functions.FunctionClassKind
|
||||
import org.jetbrains.kotlin.fir.renderer.ConeTypeRenderer
|
||||
import org.jetbrains.kotlin.fir.renderer.ConeTypeRendererForDebugging
|
||||
import org.jetbrains.kotlin.fir.renderer.ConeTypeRendererWithFqNames
|
||||
import org.jetbrains.kotlin.fir.renderer.*
|
||||
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.types.Variance
|
||||
@@ -128,13 +126,13 @@ fun ConeKotlinType.renderForDebugging(): String {
|
||||
|
||||
fun ConeKotlinType.renderReadable(): String {
|
||||
val builder = StringBuilder()
|
||||
ConeTypeRenderer(builder).render(this)
|
||||
ConeTypeRenderer(builder, idRenderer = ConeIdShortRenderer()).render(this)
|
||||
return builder.toString()
|
||||
}
|
||||
|
||||
fun ConeKotlinType.renderReadableWithFqNames(): String {
|
||||
val builder = StringBuilder()
|
||||
ConeTypeRendererWithFqNames(builder).render(this)
|
||||
ConeTypeRenderer(builder, idRenderer = ConeIdRendererForDebugging()).render(this)
|
||||
return builder.toString()
|
||||
}
|
||||
|
||||
|
||||
@@ -30,7 +30,6 @@ import java.util.*
|
||||
|
||||
class FirRenderer private constructor(
|
||||
private val builder: StringBuilder,
|
||||
private val mode: RenderMode,
|
||||
components: FirComponentsImpl,
|
||||
private val annotationRenderer: FirAnnotationRenderer?,
|
||||
private val bodyRenderer: FirBodyRenderer?,
|
||||
@@ -38,6 +37,7 @@ class FirRenderer private constructor(
|
||||
private val classMemberRenderer: FirClassMemberRenderer,
|
||||
private val contractRenderer: ConeContractRenderer?,
|
||||
private val declarationRenderer: FirDeclarationRenderer,
|
||||
private val idRenderer: ConeIdRenderer,
|
||||
private val modifierRenderer: FirModifierRenderer,
|
||||
private val packageDirectiveRenderer: FirPackageDirectiveRenderer?,
|
||||
private val propertyAccessorRenderer: FirPropertyAccessorRenderer?,
|
||||
@@ -54,6 +54,7 @@ class FirRenderer private constructor(
|
||||
components.callArgumentsRenderer = callArgumentsRenderer
|
||||
components.classMemberRenderer = classMemberRenderer
|
||||
components.declarationRenderer = declarationRenderer
|
||||
components.idRenderer = idRenderer
|
||||
components.modifierRenderer = modifierRenderer
|
||||
components.packageDirectiveRenderer = packageDirectiveRenderer
|
||||
components.propertyAccessorRenderer = propertyAccessorRenderer
|
||||
@@ -67,20 +68,20 @@ class FirRenderer private constructor(
|
||||
classMemberRenderer.components = components
|
||||
contractRenderer?.components = components
|
||||
declarationRenderer.components = components
|
||||
idRenderer.builder = builder
|
||||
modifierRenderer.components = components
|
||||
packageDirectiveRenderer?.components = components
|
||||
propertyAccessorRenderer?.components = components
|
||||
typeRenderer.builder = builder
|
||||
typeRenderer.idRenderer = idRenderer
|
||||
valueParameterRenderer.components = components
|
||||
}
|
||||
|
||||
private constructor(
|
||||
builder: StringBuilder,
|
||||
mode: RenderMode,
|
||||
components: FirComponentsImpl,
|
||||
) : this(
|
||||
builder,
|
||||
mode,
|
||||
components,
|
||||
FirAnnotationRenderer(),
|
||||
FirBodyRenderer(),
|
||||
@@ -88,6 +89,7 @@ class FirRenderer private constructor(
|
||||
FirClassMemberRenderer(),
|
||||
ConeContractRenderer(),
|
||||
FirDeclarationRenderer(),
|
||||
ConeIdRendererForDebugging(),
|
||||
FirAllModifierRenderer(),
|
||||
packageDirectiveRenderer = null,
|
||||
FirPropertyAccessorRenderer(),
|
||||
@@ -95,7 +97,7 @@ class FirRenderer private constructor(
|
||||
FirValueParameterRenderer(),
|
||||
)
|
||||
|
||||
constructor(builder: StringBuilder = StringBuilder(), mode: RenderMode = RenderMode.Normal) : this(builder, mode, FirComponentsImpl())
|
||||
constructor(builder: StringBuilder = StringBuilder()) : this(builder, FirComponentsImpl())
|
||||
|
||||
fun with(
|
||||
annotationRenderer: FirAnnotationRenderer? = this.annotationRenderer,
|
||||
@@ -104,16 +106,17 @@ class FirRenderer private constructor(
|
||||
classMemberRenderer: FirClassMemberRenderer = this.classMemberRenderer,
|
||||
contractRenderer: ConeContractRenderer? = this.contractRenderer,
|
||||
declarationRenderer: FirDeclarationRenderer = this.declarationRenderer,
|
||||
idRenderer: ConeIdRenderer = this.idRenderer,
|
||||
modifierRenderer: FirModifierRenderer = this.modifierRenderer,
|
||||
packageDirectiveRenderer: FirPackageDirectiveRenderer? = this.packageDirectiveRenderer,
|
||||
propertyAccessorRenderer: FirPropertyAccessorRenderer? = this.propertyAccessorRenderer,
|
||||
typeRenderer: ConeTypeRenderer = this.typeRenderer,
|
||||
valueParameterRenderer: FirValueParameterRenderer = this.valueParameterRenderer,
|
||||
): FirRenderer = FirRenderer(
|
||||
builder, mode, FirComponentsImpl(),
|
||||
builder, FirComponentsImpl(),
|
||||
annotationRenderer, bodyRenderer, callArgumentsRenderer, classMemberRenderer,
|
||||
contractRenderer, declarationRenderer, modifierRenderer, packageDirectiveRenderer,
|
||||
propertyAccessorRenderer, typeRenderer, valueParameterRenderer
|
||||
contractRenderer, declarationRenderer, idRenderer, modifierRenderer,
|
||||
packageDirectiveRenderer, propertyAccessorRenderer, typeRenderer, valueParameterRenderer
|
||||
)
|
||||
|
||||
fun renderElementAsString(element: FirElement): String {
|
||||
@@ -153,6 +156,8 @@ class FirRenderer private constructor(
|
||||
|
||||
override lateinit var declarationRenderer: FirDeclarationRenderer
|
||||
|
||||
override lateinit var idRenderer: ConeIdRenderer
|
||||
|
||||
override lateinit var modifierRenderer: FirModifierRenderer
|
||||
|
||||
override lateinit var typeRenderer: ConeTypeRenderer
|
||||
@@ -164,20 +169,6 @@ class FirRenderer private constructor(
|
||||
override lateinit var printer: FirPrinter
|
||||
}
|
||||
|
||||
data class RenderMode(
|
||||
val renderCallableFqNames: Boolean,
|
||||
) {
|
||||
companion object {
|
||||
val Normal = RenderMode(
|
||||
renderCallableFqNames = false,
|
||||
)
|
||||
|
||||
val WithFqNames = RenderMode(
|
||||
renderCallableFqNames = true,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun List<ConeKotlinType>.renderTypesSeparated() {
|
||||
for ((index, element) in this.withIndex()) {
|
||||
if (index > 0) {
|
||||
@@ -285,18 +276,10 @@ class FirRenderer private constructor(
|
||||
}
|
||||
when (callableDeclaration) {
|
||||
is FirSimpleFunction -> {
|
||||
if (!mode.renderCallableFqNames) {
|
||||
print(callableDeclaration.name)
|
||||
} else {
|
||||
print(callableDeclaration.symbol.callableId)
|
||||
}
|
||||
idRenderer.renderCallableId(callableDeclaration.symbol.callableId)
|
||||
}
|
||||
is FirVariable -> {
|
||||
if (!mode.renderCallableFqNames) {
|
||||
print(callableDeclaration.name)
|
||||
} else {
|
||||
print(callableDeclaration.symbol.callableId)
|
||||
}
|
||||
idRenderer.renderCallableId(callableDeclaration.symbol.callableId)
|
||||
}
|
||||
else -> {}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ internal interface FirRendererComponents {
|
||||
val callArgumentsRenderer: FirCallArgumentsRenderer
|
||||
val classMemberRenderer: FirClassMemberRenderer
|
||||
val contractRenderer: ConeContractRenderer?
|
||||
val idRenderer: ConeIdRenderer
|
||||
val modifierRenderer: FirModifierRenderer
|
||||
val packageDirectiveRenderer: FirPackageDirectiveRenderer?
|
||||
val propertyAccessorRenderer: FirPropertyAccessorRenderer?
|
||||
|
||||
Reference in New Issue
Block a user