FIR: Get rid of usages of FirCallableSymbol::overriddenSymbol

This commit is contained in:
Denis Zharkov
2020-10-30 12:36:06 +03:00
parent 728c2a808f
commit 4282e27d73
25 changed files with 114 additions and 123 deletions
@@ -16,7 +16,7 @@ fun FirCallableSymbol<*>.dispatchReceiverClassOrNull(): ConeClassLikeLookupTag?
fun FirCallableDeclaration<*>.dispatchReceiverClassOrNull(): ConeClassLikeLookupTag? {
if (this !is FirCallableMemberDeclaration<*>) return null
if (dispatchReceiverType is ConeIntersectionType && isIntersectionOverride) return symbol.overriddenSymbol!!.fir.dispatchReceiverClassOrNull()
if (dispatchReceiverType is ConeIntersectionType && isIntersectionOverride) return symbol.baseForIntersectionOverride!!.fir.dispatchReceiverClassOrNull()
return (dispatchReceiverType as? ConeClassLikeType)?.lookupTag
}
@@ -32,3 +32,32 @@ var FirCallableDeclaration<*>.containingClassAttr: ConeClassLikeLookupTag? by Fi
val FirCallableDeclaration<*>.isIntersectionOverride get() = origin == FirDeclarationOrigin.IntersectionOverride
val FirCallableDeclaration<*>.isSubstitutionOverride get() = origin == FirDeclarationOrigin.SubstitutionOverride
inline val <reified D : FirCallableDeclaration<*>> D.originalForSubstitutionOverride: D?
get() = if (isSubstitutionOverride) symbol.overriddenSymbol?.fir as D? else null
inline val <reified S : FirCallableSymbol<*>> S.originalForSubstitutionOverride: S?
get() = fir.originalForSubstitutionOverride?.symbol as S?
inline val <reified D : FirCallableDeclaration<*>> D.baseForIntersectionOverride: D?
get() = if (isIntersectionOverride) symbol.overriddenSymbol?.fir as D? else null
inline val <reified S : FirCallableSymbol<*>> S.baseForIntersectionOverride: S?
get() = fir.baseForIntersectionOverride?.symbol as S?
inline fun <reified D : FirCallableDeclaration<*>> D.originalIfFakeOverride(): D? =
originalForSubstitutionOverride ?: baseForIntersectionOverride
inline fun <reified S : FirCallableSymbol<*>> S.originalIfFakeOverride(): S? =
fir.originalIfFakeOverride()?.symbol as S?
inline fun <reified D : FirCallableDeclaration<*>> D.unwrapFakeOverrides(): D {
var current = this
do {
val next = current.originalIfFakeOverride() ?: return current
current = next
} while (true)
}
inline fun <reified S : FirCallableSymbol<*>> S.unwrapFakeOverrides(): S = fir.unwrapFakeOverrides().symbol as S
@@ -1008,7 +1008,7 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM
}
private fun AbstractFirBasedSymbol<*>.unwrapIntersectionOverrides(): AbstractFirBasedSymbol<*> {
if (this is FirCallableSymbol<*> && fir.isIntersectionOverride) return overriddenSymbol!!.unwrapIntersectionOverrides()
(this as? FirCallableSymbol<*>)?.baseForIntersectionOverride?.let { return it.unwrapIntersectionOverrides() }
return this
}
@@ -27,12 +27,3 @@ val FirCallableSymbol<*>.isExtension: Boolean
is FirProperty -> fir.receiverTypeRef != null
else -> false
}
inline fun <reified E : FirCallableSymbol<*>> E.unwrapSubstitutionOverrides(): E {
var current = this
while (current.overriddenSymbol != null) {
current = current.overriddenSymbol as E
}
return current
}