From b05400154d99ae6362f785578ce07cc5f972f2d9 Mon Sep 17 00:00:00 2001 From: Georgy Bronnikov Date: Sun, 6 Dec 2020 15:58:51 +0300 Subject: [PATCH] IR: remove IrSymbolDeclaration --- .../kotlin/fir/backend/ConversionUtils.kt | 25 +++++++------------ .../KotlinNothingValueExceptionLowering.kt | 3 +-- .../lower/StringConcatenationLowering.kt | 4 --- .../ir/declarations/IrAnonymousInitializer.kt | 3 ++- .../kotlin/ir/declarations/IrClass.kt | 3 ++- .../kotlin/ir/declarations/IrConstructor.kt | 3 ++- .../kotlin/ir/declarations/IrDeclaration.kt | 4 --- .../kotlin/ir/declarations/IrEnumEntry.kt | 3 ++- .../ir/declarations/IrFakeOverrideFunction.kt | 4 ++- .../ir/declarations/IrFakeOverrideProperty.kt | 4 ++- .../kotlin/ir/declarations/IrField.kt | 2 +- .../kotlin/ir/declarations/IrScript.kt | 4 ++- .../ir/declarations/IrSimpleFunction.kt | 3 ++- .../kotlin/ir/declarations/IrTypeAlias.kt | 2 +- .../kotlin/ir/declarations/IrTypeParameter.kt | 3 ++- .../ir/declarations/IrValueParameter.kt | 3 ++- .../kotlin/ir/declarations/IrVariable.kt | 3 ++- .../jetbrains/kotlin/ir/util/SymbolTable.kt | 3 +-- .../common/serialization/ExpectActualTable.kt | 1 - 19 files changed, 38 insertions(+), 42 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt index d34e472b1b6..6e8e5916690 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt @@ -35,13 +35,13 @@ import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.builders.declarations.UNDEFINED_PARAMETER_INDEX import org.jetbrains.kotlin.ir.declarations.* -import org.jetbrains.kotlin.ir.descriptors.WrappedReceiverParameterDescriptor import org.jetbrains.kotlin.ir.expressions.IrConst import org.jetbrains.kotlin.ir.expressions.IrConstKind import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.symbols.* +import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.types.impl.IrErrorTypeImpl import org.jetbrains.kotlin.ir.util.SymbolTable @@ -331,22 +331,15 @@ internal fun IrDeclarationParent.declareThisReceiverParameter( thisOrigin: IrDeclarationOrigin, startOffset: Int = this.startOffset, endOffset: Int = this.endOffset -): IrValueParameter { - val receiverDescriptor = WrappedReceiverParameterDescriptor() - return symbolTable.declareValueParameter( - startOffset, endOffset, thisOrigin, receiverDescriptor, thisType - ) { symbol -> - symbolTable.irFactory.createValueParameter( - startOffset, endOffset, thisOrigin, symbol, - Name.special(""), UNDEFINED_PARAMETER_INDEX, thisType, - varargElementType = null, isCrossinline = false, isNoinline = false, - isHidden = false, isAssignable = false - ).apply { - this.parent = this@declareThisReceiverParameter - receiverDescriptor.bind(this) - } +): IrValueParameter = + symbolTable.irFactory.createValueParameter( + startOffset, endOffset, thisOrigin, IrValueParameterSymbolImpl(), + Name.special(""), UNDEFINED_PARAMETER_INDEX, thisType, + varargElementType = null, isCrossinline = false, isNoinline = false, + isHidden = false, isAssignable = false + ).apply { + this.parent = this@declareThisReceiverParameter } -} fun FirClass<*>.irOrigin(firProvider: FirProvider): IrDeclarationOrigin = when { firProvider.getFirClassifierContainerFileIfAny(symbol) != null -> IrDeclarationOrigin.DEFINED diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/KotlinNothingValueExceptionLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/KotlinNothingValueExceptionLowering.kt index f41342edce7..f904a5a1797 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/KotlinNothingValueExceptionLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/KotlinNothingValueExceptionLowering.kt @@ -9,7 +9,6 @@ import org.jetbrains.kotlin.backend.common.BodyLoweringPass import org.jetbrains.kotlin.backend.common.CommonBackendContext import org.jetbrains.kotlin.ir.builders.irCall import org.jetbrains.kotlin.ir.declarations.IrDeclaration -import org.jetbrains.kotlin.ir.declarations.IrSymbolDeclaration import org.jetbrains.kotlin.ir.expressions.IrBody import org.jetbrains.kotlin.ir.expressions.IrCall import org.jetbrains.kotlin.ir.expressions.IrExpression @@ -23,7 +22,7 @@ class KotlinNothingValueExceptionLowering( ) : BodyLoweringPass { override fun lower(irBody: IrBody, container: IrDeclaration) { if (!skip(container)) { - irBody.transformChildrenVoid(Transformer((container as IrSymbolDeclaration<*>).symbol)) + irBody.transformChildrenVoid(Transformer(container.symbol)) } } diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/StringConcatenationLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/StringConcatenationLowering.kt index e164769b05d..a2cb3dcca7b 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/StringConcatenationLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/StringConcatenationLowering.kt @@ -121,10 +121,6 @@ private class StringConcatenationTransformer(val lower: StringConcatenationLower } override fun visitDeclaration(declaration: IrDeclarationBase): IrStatement { - if (declaration !is IrSymbolDeclaration<*>) { - return super.visitDeclaration(declaration) - } - with(declaration) { buildersStack.add( context.createIrBuilder(declaration.symbol, startOffset, endOffset) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrAnonymousInitializer.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrAnonymousInitializer.kt index cffadea14d9..7c8f0f0ca38 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrAnonymousInitializer.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrAnonymousInitializer.kt @@ -23,9 +23,10 @@ import org.jetbrains.kotlin.ir.symbols.IrAnonymousInitializerSymbol import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor -abstract class IrAnonymousInitializer : IrDeclarationBase(), IrSymbolDeclaration { +abstract class IrAnonymousInitializer : IrDeclarationBase() { @ObsoleteDescriptorBasedAPI abstract override val descriptor: ClassDescriptor // TODO special descriptor for anonymous initializer blocks + abstract override val symbol: IrAnonymousInitializerSymbol abstract val isStatic: Boolean diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrClass.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrClass.kt index 356e8674162..59b68ebdf0f 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrClass.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrClass.kt @@ -29,11 +29,12 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor abstract class IrClass : - IrDeclarationBase(), IrSymbolDeclaration, IrDeclarationWithName, IrDeclarationWithVisibility, + IrDeclarationBase(), IrDeclarationWithName, IrDeclarationWithVisibility, IrDeclarationContainer, IrTypeParametersContainer, IrAttributeContainer, IrMetadataSourceOwner { @ObsoleteDescriptorBasedAPI abstract override val descriptor: ClassDescriptor + abstract override val symbol: IrClassSymbol abstract val kind: ClassKind abstract var modality: Modality diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrConstructor.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrConstructor.kt index 0d07f928444..756f8a0c9c0 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrConstructor.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrConstructor.kt @@ -21,9 +21,10 @@ import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol import org.jetbrains.kotlin.ir.visitors.IrElementVisitor -abstract class IrConstructor : IrFunction(), IrSymbolDeclaration { +abstract class IrConstructor : IrFunction() { @ObsoleteDescriptorBasedAPI abstract override val descriptor: ClassConstructorDescriptor + abstract override val symbol: IrConstructorSymbol abstract val isPrimary: Boolean diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclaration.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclaration.kt index f9710aa93e6..2d296e31522 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclaration.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclaration.kt @@ -48,10 +48,6 @@ interface IrDeclaration : IrStatement, IrSymbolOwner, IrMutableAnnotationContain abstract class IrDeclarationBase : IrElementBase(), IrDeclaration -interface IrSymbolDeclaration : IrDeclaration { - override val symbol: S -} - interface IrOverridableDeclaration : IrDeclaration { var overriddenSymbols: List } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrEnumEntry.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrEnumEntry.kt index 761bf1251a5..4c9276b4c0f 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrEnumEntry.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrEnumEntry.kt @@ -23,9 +23,10 @@ import org.jetbrains.kotlin.ir.symbols.IrEnumEntrySymbol import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor -abstract class IrEnumEntry : IrDeclarationBase(), IrSymbolDeclaration, IrDeclarationWithName { +abstract class IrEnumEntry : IrDeclarationBase(), IrDeclarationWithName { @ObsoleteDescriptorBasedAPI abstract override val descriptor: ClassDescriptor + abstract override val symbol: IrEnumEntrySymbol abstract var correspondingClass: IrClass? abstract var initializerExpression: IrExpressionBody? 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 6d39f830ec9..bda12785227 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,7 +8,9 @@ package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol -interface IrFakeOverrideFunction : IrSymbolDeclaration { +interface IrFakeOverrideFunction : IrDeclaration { + override val symbol: IrSimpleFunctionSymbol + var modality: Modality 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 ccd9a9bea65..f8f6c435c0c 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,7 +8,9 @@ package org.jetbrains.kotlin.ir.declarations import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol -interface IrFakeOverrideProperty : IrSymbolDeclaration { +interface IrFakeOverrideProperty : IrDeclaration { + override val symbol: IrPropertySymbol + var modality: Modality var getter: IrSimpleFunction? var setter: IrSimpleFunction? diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrField.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrField.kt index 8b39978db30..43d7d2cf599 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrField.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrField.kt @@ -16,11 +16,11 @@ import org.jetbrains.kotlin.ir.visitors.IrElementVisitor abstract class IrField : IrDeclarationBase(), - IrSymbolDeclaration, IrDeclarationWithName, IrDeclarationWithVisibility, IrDeclarationParent, IrMetadataSourceOwner { @ObsoleteDescriptorBasedAPI abstract override val descriptor: PropertyDescriptor + abstract override val symbol: IrFieldSymbol abstract var type: IrType abstract val isFinal: Boolean diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrScript.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrScript.kt index 8f242cc2d3b..2ab4f201e8a 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrScript.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrScript.kt @@ -13,9 +13,11 @@ import org.jetbrains.kotlin.ir.types.IrType //TODO: make IrScript as IrPackageFragment, because script is used as a file, not as a class //NOTE: declarations and statements stored separately abstract class IrScript : - IrDeclarationBase(), IrSymbolDeclaration, IrDeclarationWithName, + IrDeclarationBase(), IrDeclarationWithName, IrDeclarationParent, IrStatementContainer { + abstract override val symbol: IrScriptSymbol + // NOTE: is the result of the FE conversion, because there script interpreted as a class and has receiver // TODO: consider removing from here and handle appropriately in the lowering abstract var thisReceiver: IrValueParameter diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrSimpleFunction.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrSimpleFunction.kt index 6a41b6e6eec..78caf32b5fc 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrSimpleFunction.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrSimpleFunction.kt @@ -11,11 +11,12 @@ import org.jetbrains.kotlin.ir.visitors.IrElementVisitor abstract class IrSimpleFunction : IrFunction(), - IrSymbolDeclaration, IrOverridableDeclaration, IrOverridableMember, IrAttributeContainer { + abstract override val symbol: IrSimpleFunctionSymbol + abstract val isTailrec: Boolean abstract val isSuspend: Boolean abstract val isFakeOverride: Boolean diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeAlias.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeAlias.kt index f2fee1943e2..c8a2eb933ef 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeAlias.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeAlias.kt @@ -15,13 +15,13 @@ import org.jetbrains.kotlin.ir.visitors.IrElementVisitor abstract class IrTypeAlias : IrDeclarationBase(), - IrSymbolDeclaration, IrDeclarationWithName, IrDeclarationWithVisibility, IrTypeParametersContainer { @ObsoleteDescriptorBasedAPI abstract override val descriptor: TypeAliasDescriptor + abstract override val symbol: IrTypeAliasSymbol abstract val isActual: Boolean abstract var expandedType: IrType diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeParameter.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeParameter.kt index e6efde84b05..3b9c8b55600 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeParameter.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrTypeParameter.kt @@ -24,9 +24,10 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.types.Variance -abstract class IrTypeParameter : IrDeclarationBase(), IrSymbolDeclaration, IrDeclarationWithName { +abstract class IrTypeParameter : IrDeclarationBase(), IrDeclarationWithName { @ObsoleteDescriptorBasedAPI abstract override val descriptor: TypeParameterDescriptor + abstract override val symbol: IrTypeParameterSymbol abstract val variance: Variance abstract val index: Int diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrValueParameter.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrValueParameter.kt index dd3db5a6a42..88da0d7d526 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrValueParameter.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrValueParameter.kt @@ -24,9 +24,10 @@ import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor -abstract class IrValueParameter : IrValueDeclaration(), IrSymbolDeclaration { +abstract class IrValueParameter : IrValueDeclaration() { @ObsoleteDescriptorBasedAPI abstract override val descriptor: ParameterDescriptor + abstract override val symbol: IrValueParameterSymbol abstract val index: Int abstract var varargElementType: IrType? diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrVariable.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrVariable.kt index 62bf477a1cb..8aff48e4522 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrVariable.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrVariable.kt @@ -21,9 +21,10 @@ import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol -abstract class IrVariable : IrValueDeclaration(), IrSymbolDeclaration { +abstract class IrVariable : IrValueDeclaration() { @ObsoleteDescriptorBasedAPI abstract override val descriptor: VariableDescriptor + abstract override val symbol: IrVariableSymbol abstract val isVar: Boolean abstract val isConst: Boolean diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt index 7d60ccda155..988b01e0e34 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/SymbolTable.kt @@ -195,9 +195,8 @@ class SymbolTable( } } else { if (d.isBound()) { - val result = (d.owner as? IrSymbolDeclaration<*>)?.symbol ?: descriptorToSymbol[d] @Suppress("UNCHECKED_CAST") - result as S? + d.owner.symbol as S } else { descriptorToSymbol[d] } diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/ExpectActualTable.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/ExpectActualTable.kt index 7b9fd41d089..ace9bbdd34c 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/ExpectActualTable.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/ExpectActualTable.kt @@ -90,7 +90,6 @@ class ExpectActualTable(val expectDescriptorToSymbol: MutableMap) return val descriptor = declaration.symbol.descriptor