FIR2IR: Refine definition if we need a fake override

`realDeclarationSymbols` that was used before is built from klass.declarations that doesn't
contain e.g. declarations from enhancement
Next time, we should get rid of `realDeclarationSymbols` and use only
originalDeclaration.origin.fromSupertypes, but originalSymbol.callableId.classId == classId
doesn't work correctly
This commit is contained in:
Denis Zharkov
2020-09-25 15:10:53 +03:00
parent 3dfbd36f15
commit 4964ff0019
2 changed files with 8 additions and 6 deletions
@@ -143,11 +143,13 @@ class FakeOverrideGenerator(
scope: FirTypeScope, scope: FirTypeScope,
) where S : FirCallableSymbol<D>, S : PossiblyFirFakeOverrideSymbol<D, S> { ) where S : FirCallableSymbol<D>, S : PossiblyFirFakeOverrideSymbol<D, S> {
if (originalSymbol !is S || originalSymbol in realDeclarationSymbols) return if (originalSymbol !is S || originalSymbol in realDeclarationSymbols) return
val classId = klass.symbol.classId
val originalDeclaration = originalSymbol.fir val originalDeclaration = originalSymbol.fir
if (originalSymbol.callableId.classId == classId && !originalDeclaration.origin.fromSupertypes) return
val origin = IrDeclarationOrigin.FAKE_OVERRIDE val origin = IrDeclarationOrigin.FAKE_OVERRIDE
val baseSymbol = originalSymbol.deepestOverriddenSymbol() as S val baseSymbol = originalSymbol.deepestOverriddenSymbol() as S
val classId = klass.symbol.classId
if ((originalSymbol.isFakeOverride || originalSymbol.isIntersectionOverride) && if ((originalSymbol.isFakeOverride || originalSymbol.isIntersectionOverride) &&
originalSymbol.callableId.classId == classId originalSymbol.callableId.classId == classId
) { ) {
@@ -5,16 +5,16 @@
package org.jetbrains.kotlin.fir.declarations package org.jetbrains.kotlin.fir.declarations
sealed class FirDeclarationOrigin { sealed class FirDeclarationOrigin(val fromSupertypes: Boolean = false) {
object Source : FirDeclarationOrigin() object Source : FirDeclarationOrigin()
object Library : FirDeclarationOrigin() object Library : FirDeclarationOrigin()
object Java : FirDeclarationOrigin() object Java : FirDeclarationOrigin()
object Synthetic : FirDeclarationOrigin() object Synthetic : FirDeclarationOrigin()
object SamConstructor : FirDeclarationOrigin() object SamConstructor : FirDeclarationOrigin()
object FakeOverride : FirDeclarationOrigin() object FakeOverride : FirDeclarationOrigin(fromSupertypes = true)
object Enhancement : FirDeclarationOrigin() object Enhancement : FirDeclarationOrigin()
object ImportedFromObject : FirDeclarationOrigin() object ImportedFromObject : FirDeclarationOrigin()
object IntersectionOverride : FirDeclarationOrigin() object IntersectionOverride : FirDeclarationOrigin(fromSupertypes = true)
object Delegated : FirDeclarationOrigin() object Delegated : FirDeclarationOrigin()
class Plugin(val key: FirPluginKey) : FirDeclarationOrigin() class Plugin(val key: FirPluginKey) : FirDeclarationOrigin()