FIR: Drop PossiblyFirFakeOverrideSymbol

This commit is contained in:
Denis Zharkov
2020-11-05 13:43:40 +03:00
parent 7b48625b58
commit 2e4c41c0d8
5 changed files with 8 additions and 24 deletions
@@ -15,7 +15,6 @@ import org.jetbrains.kotlin.fir.originalForSubstitutionOverride
import org.jetbrains.kotlin.fir.scopes.*
import org.jetbrains.kotlin.fir.scopes.impl.delegatedWrapperData
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
import org.jetbrains.kotlin.fir.symbols.PossiblyFirFakeOverrideSymbol
import org.jetbrains.kotlin.fir.symbols.impl.*
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
import org.jetbrains.kotlin.ir.declarations.*
@@ -85,12 +84,12 @@ internal class DelegatedMemberGenerator(
}
}
private inline fun <reified S, reified D : FirCallableMemberDeclaration<D>> S.unwrapDelegateTarget(
private inline fun <reified S : FirCallableSymbol<D>, reified D : FirCallableMemberDeclaration<D>> S.unwrapDelegateTarget(
subClassLookupTag: ConeClassLikeLookupTag,
noinline directOverridden: S.() -> List<S>,
firField: FirField,
firSubClass: FirClass<*>,
): D? where S : FirCallableSymbol<D>, S : PossiblyFirFakeOverrideSymbol<D, S> {
): D? {
val unwrappedIntersectionSymbol =
this.unwrapIntersectionOverride(directOverridden) ?: return null
@@ -117,7 +116,6 @@ internal class DelegatedMemberGenerator(
}
private fun <S : FirCallableSymbol<*>> S.unwrapIntersectionOverride(directOverridden: S.() -> List<S>): S? {
if (this !is PossiblyFirFakeOverrideSymbol<*, *>) return this
if (this.fir.isIntersectionOverride) return directOverridden().firstOrNull { it.fir.delegatedWrapperData != null }
return this
}
@@ -18,7 +18,6 @@ import org.jetbrains.kotlin.fir.scopes.impl.FirFakeOverrideGenerator
import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
import org.jetbrains.kotlin.fir.symbols.PossiblyFirFakeOverrideSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
@@ -130,7 +129,7 @@ class FakeOverrideGenerator(
return result
}
private inline fun <reified D : FirCallableMemberDeclaration<D>, reified S, reified I : IrDeclaration> createFakeOverriddenIfNeeded(
private inline fun <reified D : FirCallableMemberDeclaration<D>, reified S : FirCallableSymbol<D>, reified I : IrDeclaration> createFakeOverriddenIfNeeded(
klass: FirClass<*>,
irClass: IrClass,
isLocal: Boolean,
@@ -144,7 +143,7 @@ class FakeOverrideGenerator(
realDeclarationSymbols: Set<AbstractFirBasedSymbol<*>>,
computeDirectOverridden: FirTypeScope.(S) -> List<S>,
scope: FirTypeScope,
) where S : FirCallableSymbol<D>, S : PossiblyFirFakeOverrideSymbol<D, S> {
) {
if (originalSymbol !is S || originalSymbol in realDeclarationSymbols) return
val classLookupTag = klass.symbol.toLookupTag()
val originalDeclaration = originalSymbol.fir
@@ -189,7 +188,7 @@ class FakeOverrideGenerator(
}
}
private inline fun <S : FirCallableSymbol<*>> computeBaseSymbols(
private inline fun <reified S : FirCallableSymbol<*>> computeBaseSymbols(
symbol: S,
basedSymbol: S,
directOverridden: FirTypeScope.(S) -> List<S>,
@@ -199,7 +198,7 @@ class FakeOverrideGenerator(
if (symbol.fir.origin != FirDeclarationOrigin.IntersectionOverride) return listOf(basedSymbol)
return scope.directOverridden(symbol).map {
@Suppress("UNCHECKED_CAST")
if (it is PossiblyFirFakeOverrideSymbol<*, *> && it.fir.isSubstitutionOverride && it.dispatchReceiverClassOrNull() == containingClass)
if (it.fir.isSubstitutionOverride && it.dispatchReceiverClassOrNull() == containingClass)
it.originalForSubstitutionOverride!!
else
it
@@ -1,11 +0,0 @@
/*
* Copyright 2010-2020 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.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
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.fir.symbols.impl
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.symbols.AccessorSymbol
import org.jetbrains.kotlin.fir.symbols.CallableId
import org.jetbrains.kotlin.fir.symbols.PossiblyFirFakeOverrideSymbol
import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
@@ -24,7 +23,7 @@ sealed class FirFunctionSymbol<D : FirFunction<D>>(
open class FirNamedFunctionSymbol(
callableId: CallableId,
) : FirFunctionSymbol<FirSimpleFunction>(callableId), PossiblyFirFakeOverrideSymbol<FirSimpleFunction, FirNamedFunctionSymbol>
) : FirFunctionSymbol<FirSimpleFunction>(callableId)
class FirConstructorSymbol(
callableId: CallableId
@@ -12,7 +12,6 @@ import org.jetbrains.kotlin.fir.declarations.FirVariable
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.symbols.CallableId
import org.jetbrains.kotlin.fir.symbols.PossiblyFirFakeOverrideSymbol
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
@@ -23,7 +22,7 @@ open class FirVariableSymbol<D : FirVariable<D>>(override val callableId: Callab
open class FirPropertySymbol(
callableId: CallableId,
) : FirVariableSymbol<FirProperty>(callableId), PossiblyFirFakeOverrideSymbol<FirProperty, FirPropertySymbol> {
) : FirVariableSymbol<FirProperty>(callableId) {
// TODO: should we use this constructor for local variables?
constructor(name: Name) : this(CallableId(name))
}