Fix building fake overrides for sam and function references

This commit is contained in:
Pavel Kunyavskiy
2022-09-27 12:04:33 +02:00
committed by Space Team
parent 95eaf3d234
commit ea3713f051
5 changed files with 48 additions and 31 deletions
@@ -171,7 +171,8 @@ class IrOverridingUtil(
fun buildFakeOverridesForClassUsingOverriddenSymbols(
clazz: IrClass,
implementedMembers: List<IrOverridableMember> = emptyList(),
compatibilityMode: Boolean
compatibilityMode: Boolean,
ignoredParentSymbols: List<IrSymbol> = emptyList()
): List<IrOverridableMember> {
val overriddenMembers = (clazz.declarations.filterIsInstance<IrOverridableMember>() + implementedMembers)
.flatMap { member -> member.overriddenSymbols.map { it.owner } }
@@ -182,7 +183,7 @@ class IrOverridingUtil(
superClass.declarations
.filterIsInstance<IrOverridableMember>()
.filterNot {
it in overriddenMembers || it.isStaticMember || DescriptorVisibilities.isPrivate(it.visibility)
it in overriddenMembers || it.symbol in ignoredParentSymbols || it.isStaticMember || DescriptorVisibilities.isPrivate(it.visibility)
}
.map { overriddenMember ->
val fakeOverride = fakeOverrideBuilder.fakeOverrideMember(superType, overriddenMember, clazz)
@@ -1125,9 +1125,16 @@ private class FakeOverrideBuilderForLowerings : FakeOverrideBuilderStrategy(empt
}
}
fun IrClass.addFakeOverrides(typeSystem: IrTypeSystemContext, implementedMembers: List<IrOverridableMember> = emptyList()) {
fun IrClass.addFakeOverrides(
typeSystem: IrTypeSystemContext,
implementedMembers: List<IrOverridableMember> = emptyList(),
ignoredParentSymbols: List<IrSymbol> = emptyList()
) {
IrOverridingUtil(typeSystem, FakeOverrideBuilderForLowerings())
.buildFakeOverridesForClassUsingOverriddenSymbols(this, implementedMembers, compatibilityMode = false)
.buildFakeOverridesForClassUsingOverriddenSymbols(this,
implementedMembers = implementedMembers,
compatibilityMode = false,
ignoredParentSymbols = ignoredParentSymbols)
.forEach { addChild(it) }
}