K2: render additionally *s for static references

This commit allows to distinguish static VS non-static things
inside FIR_DUMP, e.g. static synthetic Enum.entries with
enum entry Enum.entries
This commit is contained in:
Mikhail Glukhikh
2023-06-14 15:49:04 +02:00
committed by Space Team
parent 70899d492d
commit 978d52d05b
63 changed files with 171 additions and 125 deletions
@@ -19,10 +19,7 @@ import org.jetbrains.kotlin.fir.expressions.impl.*
import org.jetbrains.kotlin.fir.references.*
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
import org.jetbrains.kotlin.name.StandardClassIds
@@ -45,6 +42,7 @@ class FirRenderer(
override val propertyAccessorRenderer: FirPropertyAccessorRenderer? = FirPropertyAccessorRenderer(),
override val resolvePhaseRenderer: FirResolvePhaseRenderer? = null,
override val typeRenderer: ConeTypeRenderer = ConeTypeRendererForDebugging(),
override val referencedSymbolRenderer: FirSymbolRenderer = FirSymbolRenderer(),
override val valueParameterRenderer: FirValueParameterRenderer? = FirValueParameterRenderer(),
override val errorExpressionRenderer: FirErrorExpressionRenderer? = FirErrorExpressionOnlyErrorRenderer(),
override val fileAnnotationsContainerRenderer: FirFileAnnotationsContainerRenderer? = null,
@@ -84,6 +82,7 @@ class FirRenderer(
resolvePhaseRenderer?.components = this
typeRenderer.builder = builder
typeRenderer.idRenderer = idRenderer
referencedSymbolRenderer.components = this
valueParameterRenderer?.components = this
errorExpressionRenderer?.components = this
fileAnnotationsContainerRenderer?.components = this
@@ -842,20 +841,14 @@ class FirRenderer(
print("*")
}
private fun FirBasedSymbol<*>.render(): String {
return when (this) {
is FirCallableSymbol<*> -> callableId.toString()
is FirClassLikeSymbol<*> -> classId.toString()
else -> "?"
}
}
override fun visitNamedReference(namedReference: FirNamedReference) {
print("${namedReference.name}#")
}
override fun visitNamedReferenceWithCandidateBase(namedReferenceWithCandidateBase: FirNamedReferenceWithCandidateBase) {
print("R?C|${namedReferenceWithCandidateBase.candidateSymbol.render()}|")
print("R?C|")
referencedSymbolRenderer.printReference(namedReferenceWithCandidateBase.candidateSymbol)
print("|")
}
override fun visitErrorNamedReference(errorNamedReference: FirErrorNamedReference) {
@@ -883,7 +876,7 @@ class FirRenderer(
print("SubstitutionOverride<")
}
print(symbol.unwrapIntersectionOverrides().render())
referencedSymbolRenderer.printReference(symbol.unwrapIntersectionOverrides())
if (resolvedNamedReference is FirResolvedCallableReference) {
if (resolvedNamedReference.inferredTypeArguments.isNotEmpty()) {
@@ -935,7 +928,11 @@ class FirRenderer(
val labelName = thisReference.labelName
val symbol = thisReference.boundSymbol
when {
symbol != null -> print("@R|${symbol.render()}|")
symbol != null -> {
print("@R|")
referencedSymbolRenderer.printReference(symbol)
print("|")
}
labelName != null -> print("@$labelName#")
else -> print("#")
}
@@ -22,6 +22,7 @@ internal interface FirRendererComponents {
val propertyAccessorRenderer: FirPropertyAccessorRenderer?
val resolvePhaseRenderer: FirResolvePhaseRenderer?
val typeRenderer: ConeTypeRenderer
val referencedSymbolRenderer: FirSymbolRenderer
val valueParameterRenderer: FirValueParameterRenderer?
val errorExpressionRenderer: FirErrorExpressionRenderer?
val fileAnnotationsContainerRenderer: FirFileAnnotationsContainerRenderer?
@@ -0,0 +1,28 @@
/*
* 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.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
open class FirSymbolRenderer {
internal lateinit var components: FirRendererComponents
protected val printer get() = components.printer
fun printReference(symbol: FirBasedSymbol<*>) {
printer.print(renderReference(symbol))
}
protected open fun renderReference(symbol: FirBasedSymbol<*>): String {
return when (symbol) {
is FirCallableSymbol<*> -> symbol.callableId.toString()
is FirClassLikeSymbol<*> -> symbol.classId.toString()
else -> "?"
}
}
}
@@ -0,0 +1,18 @@
/*
* 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.declarations.utils.isStatic
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirEnumEntrySymbol
class FirSymbolRendererWithStaticFlag : FirSymbolRenderer() {
override fun renderReference(symbol: FirBasedSymbol<*>): String {
if (symbol !is FirCallableSymbol) return super.renderReference(symbol)
return symbol.callableId.toString() + if (symbol !is FirEnumEntrySymbol && symbol.isStatic) "*s" else ""
}
}