From e5c6a5b80d173921e7ea16a7ed52d67e8d3997d7 Mon Sep 17 00:00:00 2001 From: Roman Artemev Date: Mon, 7 Jun 2021 18:51:00 +0300 Subject: [PATCH] [IR] Clean up Fake Override builder a bit --- .../kotlin/ir/overrides/IrOverridingUtil.kt | 42 ++++++++++--------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrOverridingUtil.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrOverridingUtil.kt index 4f618091bef..705d28fd734 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrOverridingUtil.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/overrides/IrOverridingUtil.kt @@ -86,26 +86,28 @@ class IrOverridingUtil( originalSuperTypes.clear() } - private val IrOverridableMember.overriddenSymbols: List - get() = (this as? IrOverridableDeclaration<*>)?.overriddenSymbols - ?: error("Unexpected IrOverridableMember: $this") - - private fun IrOverridableMember.setOverriddenSymbols(value: List) { - 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 } - } - } + private var IrOverridableMember.overriddenSymbols: List + get() = when (this) { + is IrSimpleFunction -> this.overriddenSymbols + is IrProperty -> this.overriddenSymbols 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) { val superTypes = clazz.superTypes @@ -225,7 +227,7 @@ class IrOverridingUtil( } } //strategy.setOverriddenDescriptors(fromCurrent, overridden) - fromCurrent.setOverriddenSymbols(overridden.map { it.original.symbol }) + fromCurrent.overriddenSymbols = overridden.map { it.original.symbol } return bound } @@ -383,7 +385,7 @@ class IrOverridingUtil( } } - fakeOverride.setOverriddenSymbols(effectiveOverridden.map { it.original.symbol }) + fakeOverride.overriddenSymbols = effectiveOverridden.map { it.original.symbol } assert( fakeOverride.overriddenSymbols.isNotEmpty()