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,
) where S : FirCallableSymbol<D>, S : PossiblyFirFakeOverrideSymbol<D, S> {
if (originalSymbol !is S || originalSymbol in realDeclarationSymbols) return
val classId = klass.symbol.classId
val originalDeclaration = originalSymbol.fir
if (originalSymbol.callableId.classId == classId && !originalDeclaration.origin.fromSupertypes) return
val origin = IrDeclarationOrigin.FAKE_OVERRIDE
val baseSymbol = originalSymbol.deepestOverriddenSymbol() as S
val classId = klass.symbol.classId
if ((originalSymbol.isFakeOverride || originalSymbol.isIntersectionOverride) &&
originalSymbol.callableId.classId == classId
) {
@@ -5,19 +5,19 @@
package org.jetbrains.kotlin.fir.declarations
sealed class FirDeclarationOrigin {
sealed class FirDeclarationOrigin(val fromSupertypes: Boolean = false) {
object Source : FirDeclarationOrigin()
object Library : FirDeclarationOrigin()
object Java : FirDeclarationOrigin()
object Synthetic : FirDeclarationOrigin()
object SamConstructor : FirDeclarationOrigin()
object FakeOverride : FirDeclarationOrigin()
object FakeOverride : FirDeclarationOrigin(fromSupertypes = true)
object Enhancement : FirDeclarationOrigin()
object ImportedFromObject : FirDeclarationOrigin()
object IntersectionOverride : FirDeclarationOrigin()
object IntersectionOverride : FirDeclarationOrigin(fromSupertypes = true)
object Delegated : FirDeclarationOrigin()
class Plugin(val key: FirPluginKey) : FirDeclarationOrigin()
}
abstract class FirPluginKey
abstract class FirPluginKey