[FIR] Introduce extension unwrapFakeOverridesOrDelegated()

This commit is contained in:
Kirill Rakhman
2023-03-10 18:51:21 +01:00
committed by Space Team
parent 35dfcb61bb
commit d20ad67aa9
10 changed files with 39 additions and 46 deletions
@@ -19,7 +19,6 @@ import org.jetbrains.kotlin.fir.renderer.ConeTypeRendererForDebugging
import org.jetbrains.kotlin.fir.resolve.defaultType
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
import org.jetbrains.kotlin.fir.resolve.toFirRegularClassSymbol
import org.jetbrains.kotlin.fir.scopes.impl.delegatedWrapperData
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.types.*
@@ -462,24 +461,6 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
}
}
private inline fun <reified D : FirCallableDeclaration> D.originalIfFakeOverrideOrDelegated(): D? {
return when (origin) {
FirDeclarationOrigin.SubstitutionOverride, FirDeclarationOrigin.IntersectionOverride -> originalIfFakeOverride()
FirDeclarationOrigin.Delegated -> delegatedWrapperData!!.wrapped
else -> this
}
}
private inline fun <reified D : FirCallableDeclaration> D.getOriginal(): D {
var current = this
var next = this.originalIfFakeOverrideOrDelegated() ?: this
while (current != next) {
current = next
next = current.originalIfFakeOverrideOrDelegated() ?: current
}
return current
}
private fun renderImplicitReceiver(symbol: FirBasedSymbol<*>, psi: PsiElement?) {
val receiverType = (symbol.fir as? FirCallableDeclaration)?.dispatchReceiverType ?: return
val implicitReceiverIndex = implicitReceivers.indexOf(receiverType)
@@ -493,7 +474,7 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
}
private fun renderField(field: FirField, data: StringBuilder) {
val original = field.getOriginal()
val original = field.unwrapFakeOverridesOrDelegated()
if (original.isVal) data.append("val ") else if (original.isVar) data.append("var ")
data.append("(")
@@ -537,7 +518,7 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
}
private fun renderPropertySymbol(symbol: FirPropertySymbol, data: StringBuilder) {
val fir = symbol.fir.getOriginal()
val fir = symbol.fir.unwrapFakeOverridesOrDelegated()
data.append(if (fir.isVar) "var" else "val").append(" ")
renderListInTriangles(fir.typeParameters, data, withSpace = true)
@@ -559,7 +540,7 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
private fun renderFunctionSymbol(symbol: FirNamedFunctionSymbol, data: StringBuilder, call: FirFunctionCall? = null) {
data.append("fun ")
val fir = symbol.fir.getOriginal()
val fir = symbol.fir.unwrapFakeOverridesOrDelegated()
renderListInTriangles(fir.typeParameters, data, true)
val id = getSymbolId(symbol)
@@ -625,7 +606,7 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() {
override fun visitConstructor(constructor: FirConstructor, data: StringBuilder) {
renderConstructorSymbol(constructor.symbol, data)
visitValueParameters(constructor.getOriginal().valueParameters, data)
visitValueParameters(constructor.unwrapFakeOverridesOrDelegated().valueParameters, data)
}
override fun visitTypeParameterRef(typeParameterRef: FirTypeParameterRef, data: StringBuilder) {