[IR] Clean up Fake Override builder a bit

This commit is contained in:
Roman Artemev
2021-06-07 18:51:00 +03:00
committed by teamcityserver
parent 1831c0a14b
commit e5c6a5b80d
@@ -86,26 +86,28 @@ class IrOverridingUtil(
originalSuperTypes.clear() originalSuperTypes.clear()
} }
private val IrOverridableMember.overriddenSymbols: List<IrSymbol> private var IrOverridableMember.overriddenSymbols: List<IrSymbol>
get() = (this as? IrOverridableDeclaration<*>)?.overriddenSymbols get() = when (this) {
?: error("Unexpected IrOverridableMember: $this") is IrSimpleFunction -> this.overriddenSymbols
is IrProperty -> this.overriddenSymbols
private fun IrOverridableMember.setOverriddenSymbols(value: List<IrSymbol>) {
when (this) {
is IrSimpleFunction -> this.overriddenSymbols =
value.map { it as? IrSimpleFunctionSymbol ?: error("Unexpected function overridden symbol: $it") }
is IrProperty -> {
this.overriddenSymbols =
value.map { it as? IrPropertySymbol ?: error("Unexpected property overridden symbol: $it") }
val getter = this.getter ?: error("Property has no getter: ${render()}")
getter.overriddenSymbols = value.map { (it.owner as IrProperty).getter!!.symbol }
this.setter?.let { setter ->
setter.overriddenSymbols = value.mapNotNull { (it.owner as IrProperty).setter?.symbol }
}
}
else -> error("Unexpected declaration for overriddenSymbols: $this") else -> error("Unexpected declaration for overriddenSymbols: $this")
} }
} set(value) {
when (this) {
is IrSimpleFunction -> this.overriddenSymbols =
value.map { it as? IrSimpleFunctionSymbol ?: error("Unexpected function overridden symbol: $it") }
is IrProperty -> {
val overriddenProperties = value.map { it as? IrPropertySymbol ?: error("Unexpected property overridden symbol: $it") }
val getter = this.getter ?: error("Property has no getter: ${render()}")
getter.overriddenSymbols = overriddenProperties.map { it.owner.getter!!.symbol }
this.setter?.let { setter ->
setter.overriddenSymbols = overriddenProperties.mapNotNull { it.owner.setter?.symbol }
}
this.overriddenSymbols = overriddenProperties
}
else -> error("Unexpected declaration for overriddenSymbols: $this")
}
}
fun buildFakeOverridesForClass(clazz: IrClass) { fun buildFakeOverridesForClass(clazz: IrClass) {
val superTypes = clazz.superTypes val superTypes = clazz.superTypes
@@ -225,7 +227,7 @@ class IrOverridingUtil(
} }
} }
//strategy.setOverriddenDescriptors(fromCurrent, overridden) //strategy.setOverriddenDescriptors(fromCurrent, overridden)
fromCurrent.setOverriddenSymbols(overridden.map { it.original.symbol }) fromCurrent.overriddenSymbols = overridden.map { it.original.symbol }
return bound return bound
} }
@@ -383,7 +385,7 @@ class IrOverridingUtil(
} }
} }
fakeOverride.setOverriddenSymbols(effectiveOverridden.map { it.original.symbol }) fakeOverride.overriddenSymbols = effectiveOverridden.map { it.original.symbol }
assert( assert(
fakeOverride.overriddenSymbols.isNotEmpty() fakeOverride.overriddenSymbols.isNotEmpty()