[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,22 +86,24 @@ 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>) { else -> error("Unexpected declaration for overriddenSymbols: $this")
}
set(value) {
when (this) { when (this) {
is IrSimpleFunction -> this.overriddenSymbols = is IrSimpleFunction -> this.overriddenSymbols =
value.map { it as? IrSimpleFunctionSymbol ?: error("Unexpected function overridden symbol: $it") } value.map { it as? IrSimpleFunctionSymbol ?: error("Unexpected function overridden symbol: $it") }
is IrProperty -> { is IrProperty -> {
this.overriddenSymbols = val overriddenProperties = value.map { it as? IrPropertySymbol ?: error("Unexpected property overridden symbol: $it") }
value.map { it as? IrPropertySymbol ?: error("Unexpected property overridden symbol: $it") }
val getter = this.getter ?: error("Property has no getter: ${render()}") val getter = this.getter ?: error("Property has no getter: ${render()}")
getter.overriddenSymbols = value.map { (it.owner as IrProperty).getter!!.symbol } getter.overriddenSymbols = overriddenProperties.map { it.owner.getter!!.symbol }
this.setter?.let { setter -> this.setter?.let { setter ->
setter.overriddenSymbols = value.mapNotNull { (it.owner as IrProperty).setter?.symbol } setter.overriddenSymbols = overriddenProperties.mapNotNull { it.owner.setter?.symbol }
} }
this.overriddenSymbols = overriddenProperties
} }
else -> error("Unexpected declaration for overriddenSymbols: $this") else -> error("Unexpected declaration for overriddenSymbols: $this")
} }
@@ -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()