Extract separate ConeIdRenderer and get rid of FirRenderer.RenderMode

This commit is contained in:
Mikhail Glukhikh
2022-07-08 14:52:11 +02:00
committed by Space
parent e484a4a946
commit 42b3adf33a
13 changed files with 93 additions and 57 deletions
@@ -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,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)
}
@@ -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
@@ -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()
}