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.
This commit is contained in:
committed by
Space Team
parent
a22c16e745
commit
b28339e8bc
@@ -109,7 +109,7 @@ class IrFakeOverrideBuilder(
|
||||
val superClass = superType.getClass() ?: error("Unexpected super type: $superType")
|
||||
superClass.declarations
|
||||
.filterIsInstanceAnd<IrOverridableMember> {
|
||||
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<FakeOverride>,
|
||||
membersFromCurrent: List<IrOverridableMember>,
|
||||
|
||||
Reference in New Issue
Block a user