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:
committed by
Space Team
parent
70899d492d
commit
978d52d05b
@@ -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 -> "?"
|
||||
}
|
||||
}
|
||||
}
|
||||
+18
@@ -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 ""
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user