FIR: Remove FirCallableSymbol::overriddenSymbol

This commit is contained in:
Denis Zharkov
2020-11-05 13:40:30 +03:00
parent 78b374ec88
commit 7b48625b58
13 changed files with 66 additions and 57 deletions
@@ -34,13 +34,13 @@ val FirCallableDeclaration<*>.isIntersectionOverride get() = origin == FirDeclar
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
get() = if (isSubstitutionOverride) originalForSubstitutionOverrideAttr 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
get() = if (isIntersectionOverride) originalForIntersectionOverrideAttr else null
inline val <reified S : FirCallableSymbol<*>> S.baseForIntersectionOverride: S?
get() = fir.baseForIntersectionOverride?.symbol as S?
@@ -61,3 +61,11 @@ inline fun <reified D : FirCallableDeclaration<*>> D.unwrapFakeOverrides(): D {
}
inline fun <reified S : FirCallableSymbol<*>> S.unwrapFakeOverrides(): S = fir.unwrapFakeOverrides().symbol as S
private object SubstitutedOverrideOriginalKey : FirDeclarationDataKey()
var <D : FirCallableDeclaration<*>>
D.originalForSubstitutionOverrideAttr: D? by FirDeclarationDataRegistry.data(SubstitutedOverrideOriginalKey)
private object IntersectionOverrideOriginalKey : FirDeclarationDataKey()
var <D : FirCallableDeclaration<*>>
D.originalForIntersectionOverrideAttr: D? by FirDeclarationDataRegistry.data(IntersectionOverrideOriginalKey)
@@ -8,6 +8,4 @@ package org.jetbrains.kotlin.fir.symbols
import org.jetbrains.kotlin.fir.FirSymbolOwner
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
interface PossiblyFirFakeOverrideSymbol<E, S : FirBasedSymbol<E>> : FirBasedSymbol<E> where E : FirSymbolOwner<E>, E : FirDeclaration {
val overriddenSymbol: S?
}
interface PossiblyFirFakeOverrideSymbol<E, S : FirBasedSymbol<E>> : FirBasedSymbol<E> where E : FirSymbolOwner<E>, E : FirDeclaration
@@ -14,9 +14,6 @@ import org.jetbrains.kotlin.fir.symbols.CallableId
abstract class FirCallableSymbol<D : FirCallableDeclaration<D>> : AbstractFirBasedSymbol<D>() {
abstract val callableId: CallableId
open val overriddenSymbol: FirCallableSymbol<D>?
get() = null
}
val FirCallableSymbol<*>.isStatic: Boolean get() = (fir as? FirMemberDeclaration)?.status?.isStatic == true
@@ -24,12 +24,10 @@ sealed class FirFunctionSymbol<D : FirFunction<D>>(
open class FirNamedFunctionSymbol(
callableId: CallableId,
override val overriddenSymbol: FirNamedFunctionSymbol? = null,
) : FirFunctionSymbol<FirSimpleFunction>(callableId), PossiblyFirFakeOverrideSymbol<FirSimpleFunction, FirNamedFunctionSymbol>
class FirConstructorSymbol(
callableId: CallableId,
override val overriddenSymbol: FirConstructorSymbol? = null
callableId: CallableId
) : FirFunctionSymbol<FirConstructor>(callableId)
open class FirAccessorSymbol(
@@ -23,7 +23,6 @@ open class FirVariableSymbol<D : FirVariable<D>>(override val callableId: Callab
open class FirPropertySymbol(
callableId: CallableId,
override val overriddenSymbol: FirPropertySymbol? = null,
) : FirVariableSymbol<FirProperty>(callableId), PossiblyFirFakeOverrideSymbol<FirProperty, FirPropertySymbol> {
// TODO: should we use this constructor for local variables?
constructor(name: Name) : this(CallableId(name))