From f240d51d2c2a738ce9a085ca153aa85efcc3c1a0 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 21 Jul 2020 22:57:12 +0200 Subject: [PATCH] IR: do not inherit IrFakeOverride* from IrFunction/IrProperty This will help to reduce boilerplate after making the latter classes. Without this change, IrFunctionCommonImpl would not be able to be a class because it would introduce a diamond class hierarchy, and thus that would require copying all its contents to IrFunctionImpl and IrFakeOverrideFunctionImpl. --- .../kotlin/ir/declarations/impl/IrFactoryImpl.kt | 2 +- .../kotlin/ir/declarations/impl/IrFunctionImpl.kt | 3 ++- .../kotlin/ir/declarations/impl/IrPropertyImpl.kt | 3 ++- .../ir/declarations/persistent/PersistentIrFactory.kt | 2 +- .../ir/declarations/persistent/PersistentIrFunction.kt | 3 ++- .../ir/declarations/persistent/PersistentIrProperty.kt | 3 ++- .../src/org/jetbrains/kotlin/ir/declarations/IrFactory.kt | 2 +- .../kotlin/ir/declarations/IrFakeOverrideFunction.kt | 6 +++--- .../kotlin/ir/declarations/IrFakeOverrideProperty.kt | 8 +++++--- .../kotlin/backend/common/overrides/FakeOverrides.kt | 8 +------- 10 files changed, 20 insertions(+), 20 deletions(-) diff --git a/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImpl.kt b/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImpl.kt index 53a4040838b..4a5a5dffb40 100644 --- a/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImpl.kt +++ b/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImpl.kt @@ -185,7 +185,7 @@ object IrFactoryImpl : IrFactory { isDelegated: Boolean, isExternal: Boolean, isExpect: Boolean, - ): IrFakeOverrideProperty = + ): IrProperty = IrFakeOverridePropertyImpl( startOffset, endOffset, origin, name, visibility, modality, isVar, isConst, isLateinit, isDelegated, isExternal, isExpect, diff --git a/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionImpl.kt b/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionImpl.kt index 8e1613f4eae..2412861b347 100644 --- a/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionImpl.kt +++ b/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrFunctionImpl.kt @@ -104,10 +104,11 @@ class IrFakeOverrideFunctionImpl( get() = _symbol?.descriptor ?: WrappedSimpleFunctionDescriptor() @OptIn(ObsoleteDescriptorBasedAPI::class) - override fun acquireSymbol(symbol: IrSimpleFunctionSymbol) { + override fun acquireSymbol(symbol: IrSimpleFunctionSymbol): IrSimpleFunction { assert(_symbol == null) { "$this already has symbol _symbol" } _symbol = symbol symbol.bind(this) (symbol.descriptor as? WrappedSimpleFunctionDescriptor)?.bind(this) + return this } } diff --git a/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrPropertyImpl.kt b/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrPropertyImpl.kt index d79101934a3..4f068d3d42f 100644 --- a/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrPropertyImpl.kt +++ b/compiler/ir/ir.tree.impl/src/org/jetbrains/kotlin/ir/declarations/impl/IrPropertyImpl.kt @@ -103,10 +103,11 @@ class IrFakeOverridePropertyImpl( get() = _symbol?.descriptor ?: WrappedPropertyDescriptor() @OptIn(ObsoleteDescriptorBasedAPI::class) - override fun acquireSymbol(symbol: IrPropertySymbol) { + override fun acquireSymbol(symbol: IrPropertySymbol): IrProperty { assert(_symbol == null) { "$this already has symbol _symbol" } _symbol = symbol symbol.bind(this) (symbol.descriptor as? WrappedPropertyDescriptor)?.bind(this) + return this } } diff --git a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrFactory.kt b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrFactory.kt index f7d7566a0c5..87b94c58861 100644 --- a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrFactory.kt +++ b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrFactory.kt @@ -189,7 +189,7 @@ object PersistentIrFactory : IrFactory { isDelegated: Boolean, isExternal: Boolean, isExpect: Boolean, - ): IrFakeOverrideProperty = + ): IrProperty = PersistentIrFakeOverrideProperty( startOffset, endOffset, origin, name, visibility, modality, isVar, isConst, isLateinit, isDelegated, isExternal, isExpect, diff --git a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrFunction.kt b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrFunction.kt index 966fb0540bc..6359c6cb350 100644 --- a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrFunction.kt +++ b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrFunction.kt @@ -133,10 +133,11 @@ internal class PersistentIrFakeOverrideFunction( get() = _symbol?.descriptor ?: WrappedSimpleFunctionDescriptor() @OptIn(ObsoleteDescriptorBasedAPI::class) - override fun acquireSymbol(symbol: IrSimpleFunctionSymbol) { + override fun acquireSymbol(symbol: IrSimpleFunctionSymbol): IrSimpleFunction { assert(_symbol == null) { "$this already has symbol _symbol" } _symbol = symbol symbol.bind(this) (symbol.descriptor as? WrappedSimpleFunctionDescriptor)?.bind(this) + return this } } diff --git a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrProperty.kt b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrProperty.kt index 818dab457fd..6753da7ce77 100644 --- a/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrProperty.kt +++ b/compiler/ir/ir.tree.persistent/src/org/jetbrains/kotlin/ir/declarations/persistent/PersistentIrProperty.kt @@ -140,10 +140,11 @@ internal class PersistentIrFakeOverrideProperty( get() = _symbol?.descriptor ?: WrappedPropertyDescriptor() @OptIn(ObsoleteDescriptorBasedAPI::class) - override fun acquireSymbol(symbol: IrPropertySymbol) { + override fun acquireSymbol(symbol: IrPropertySymbol): IrProperty { assert(_symbol == null) { "$this already has symbol _symbol" } _symbol = symbol symbol.bind(this) (symbol.descriptor as? WrappedPropertyDescriptor)?.bind(this) + return this } } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFactory.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFactory.kt index 3d4e1c5696e..726b3420e30 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFactory.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFactory.kt @@ -160,7 +160,7 @@ interface IrFactory { isDelegated: Boolean, isExternal: Boolean, isExpect: Boolean, - ): IrFakeOverrideProperty + ): IrProperty fun createTypeAlias( startOffset: Int, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFakeOverrideFunction.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFakeOverrideFunction.kt index 3fa743f545b..6d39f830ec9 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFakeOverrideFunction.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFakeOverrideFunction.kt @@ -8,8 +8,8 @@ package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol -interface IrFakeOverrideFunction : IrSimpleFunction { - override var modality: Modality +interface IrFakeOverrideFunction : IrSymbolDeclaration { + var modality: Modality - fun acquireSymbol(symbol: IrSimpleFunctionSymbol) + fun acquireSymbol(symbol: IrSimpleFunctionSymbol): IrSimpleFunction } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFakeOverrideProperty.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFakeOverrideProperty.kt index 1867cbc4ba1..ccd9a9bea65 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFakeOverrideProperty.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrFakeOverrideProperty.kt @@ -8,8 +8,10 @@ package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol -interface IrFakeOverrideProperty : IrProperty { - override var modality: Modality +interface IrFakeOverrideProperty : IrSymbolDeclaration { + var modality: Modality + var getter: IrSimpleFunction? + var setter: IrSimpleFunction? - fun acquireSymbol(symbol: IrPropertySymbol) + fun acquireSymbol(symbol: IrPropertySymbol): IrProperty } diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/overrides/FakeOverrides.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/overrides/FakeOverrides.kt index 8a36f611c04..8e4811af2d5 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/overrides/FakeOverrides.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/overrides/FakeOverrides.kt @@ -17,7 +17,6 @@ package org.jetbrains.kotlin.backend.common.overrides import org.jetbrains.kotlin.backend.common.serialization.signature.IdSignatureSerializer -import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns import org.jetbrains.kotlin.ir.descriptors.WrappedPropertyDescriptor @@ -31,9 +30,6 @@ import org.jetbrains.kotlin.ir.types.IrTypeProjection import org.jetbrains.kotlin.ir.types.extractTypeParameters import org.jetbrains.kotlin.ir.types.getClass import org.jetbrains.kotlin.ir.util.SymbolTable -import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid -import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid -import org.jetbrains.kotlin.ir.visitors.acceptVoid import org.jetbrains.kotlin.types.Variance interface PlatformFakeOverrideClassFilter { @@ -124,7 +120,6 @@ class FakeOverrideBuilder( symbolTable.declareSimpleFunctionFromLinker(WrappedSimpleFunctionDescriptor(), signature) { declaration.acquireSymbol(it) - declaration } } @@ -136,7 +131,7 @@ class FakeOverrideBuilder( // To break this loop we use temp symbol in correspondingProperty. val tempSymbol = IrPropertySymbolImpl(WrappedPropertyDescriptor()).also { - it.bind(declaration) + it.bind(declaration as IrProperty) } declaration.getter?.let { it.correspondingPropertySymbol = tempSymbol @@ -149,7 +144,6 @@ class FakeOverrideBuilder( symbolTable.declarePropertyFromLinker(WrappedPropertyDescriptor(), signature) { declaration.acquireSymbol(it) - declaration } declaration.getter?.let {