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:
+4
-2
@@ -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,19 +5,19 @@
|
|||||||
|
|
||||||
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()
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class FirPluginKey
|
abstract class FirPluginKey
|
||||||
|
|||||||
Reference in New Issue
Block a user