From 4964ff00195f2a5c9694565b551053ef611b04ae Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Fri, 25 Sep 2020 15:10:53 +0300 Subject: [PATCH] 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 --- .../fir/backend/generators/FakeOverrideGenerator.kt | 6 ++++-- .../kotlin/fir/declarations/FirDeclarationOrigin.kt | 8 ++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/FakeOverrideGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/FakeOverrideGenerator.kt index 9c1e3c49e1f..7a29ce2aed9 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/FakeOverrideGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/FakeOverrideGenerator.kt @@ -143,11 +143,13 @@ class FakeOverrideGenerator( scope: FirTypeScope, ) where S : FirCallableSymbol, S : PossiblyFirFakeOverrideSymbol { 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 ) { diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationOrigin.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationOrigin.kt index 79b2af8c730..7dab625148d 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationOrigin.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationOrigin.kt @@ -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 \ No newline at end of file +abstract class FirPluginKey