From b28339e8bc6bf76be1e27f6f1f984fafc3ba8d4e Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 1 Feb 2024 15:11:10 +0100 Subject: [PATCH] IR: do not build fake overrides for static members if not needed This is kind of another fix for KT-65456, independent from the one in the previous commit. Here we restore the old behavior of `buildFakeOverridesForClassUsingOverriddenSymbols`, which is used in places where fake overrides for static declarations from superclasses are not necessary at all, such as SAM adapters or annotation implementation classes. --- .../kotlin/ir/overrides/IrFakeOverrideBuilder.kt | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrFakeOverrideBuilder.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrFakeOverrideBuilder.kt index 20d905b6fc0..74f8ff0cfde 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrFakeOverrideBuilder.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrFakeOverrideBuilder.kt @@ -109,7 +109,7 @@ class IrFakeOverrideBuilder( val superClass = superType.getClass() ?: error("Unexpected super type: $superType") superClass.declarations .filterIsInstanceAnd { - it !in overriddenMembers && it.symbol !in ignoredParentSymbols + it !in overriddenMembers && it.symbol !in ignoredParentSymbols && !it.isStaticMember } .mapNotNull { overriddenMember -> val fakeOverride = strategy.fakeOverrideMember(superType, overriddenMember, clazz) ?: return@mapNotNull null @@ -125,6 +125,16 @@ class IrFakeOverrideBuilder( return fakeOverrides } + private val IrOverridableMember.isStaticMember: Boolean + get() = when (this) { + is IrFunction -> + dispatchReceiverParameter == null + is IrProperty -> + backingField?.isStatic == true || + getter?.let { it.dispatchReceiverParameter == null } == true + else -> error("Unknown overridable member: ${render()}") + } + private fun generateOverridesInFunctionGroup( membersFromSupertypes: List, membersFromCurrent: List,