From f46761a241ba9235ec3f38c053317c792a08b0e7 Mon Sep 17 00:00:00 2001 From: Sergej Jaskiewicz Date: Tue, 13 Jun 2023 19:10:05 +0200 Subject: [PATCH] [IR] Reorder parameters in IrFactory#createClass This is to prepare for IrFactory auto-generation (KT-59308). --- .../fir/backend/Fir2IrClassifierStorage.kt | 40 ++++++++++++------- .../kotlin/fir/backend/IrBuiltInsOverFir.kt | 34 ++++++++++++++-- .../kotlin/ir/interpreter/IrTreeBuildUtils.kt | 14 ++++--- .../IrDescriptorBasedFunctionFactory.kt | 9 ++++- .../declarations/declarationBuilders.kt | 19 +++++++-- .../kotlin/ir/declarations/IrFactory.kt | 6 +-- .../ir/declarations/impl/IrFactoryImpl.kt | 6 +-- .../declarations/impl/IrFactoryImplForJsIC.kt | 12 +++--- .../ir/declarations/lazy/LazyIrFactory.kt | 24 ++++++++--- .../ir/util/DeepCopyIrTreeWithSymbols.kt | 19 ++++----- .../kotlin/ir/util/DescriptorToIrUtil.kt | 19 +++++++-- .../MissingDeclarationStubGenerator.kt | 6 +-- .../IrDeclarationDeserializer.kt | 28 +++++++------ 13 files changed, 161 insertions(+), 75 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrClassifierStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrClassifierStorage.kt index eea91f9397e..72d391edf2b 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrClassifierStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrClassifierStorage.kt @@ -7,7 +7,6 @@ package org.jetbrains.kotlin.fir.backend import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.fir.containingClassForLocalAttr -import org.jetbrains.kotlin.fir.containingClassLookupTag import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.utils.* import org.jetbrains.kotlin.fir.expressions.FirAnonymousObjectExpression @@ -352,18 +351,18 @@ class Fir2IrClassifierStorage( val irClass = regularClass.convertWithOffsets { startOffset, endOffset -> declareIrClass(signature) { symbol -> irFactory.createClass( - startOffset, - endOffset, - regularClass.computeIrOrigin(predefinedOrigin), - symbol, - regularClass.name, - regularClass.classKind, - components.visibilityConverter.convertToDescriptorVisibility(visibility), - modality, + startOffset = startOffset, + endOffset = endOffset, + origin = regularClass.computeIrOrigin(predefinedOrigin), + name = regularClass.name, + visibility = components.visibilityConverter.convertToDescriptorVisibility(visibility), + symbol = symbol, + kind = regularClass.classKind, + modality = modality, + isExternal = regularClass.isExternal, isCompanion = regularClass.isCompanion, isInner = regularClass.isInner, isData = regularClass.isData, - isExternal = regularClass.isExternal, isValue = regularClass.isInline, isExpect = regularClass.isExpect, isFun = regularClass.isFun @@ -391,10 +390,15 @@ class Fir2IrClassifierStorage( val modality = Modality.FINAL val irAnonymousObject = anonymousObject.convertWithOffsets { startOffset, endOffset -> irFactory.createClass( - startOffset, endOffset, origin, IrClassSymbolImpl(), name, + startOffset = startOffset, + endOffset = endOffset, + origin = origin, + name = name, + visibility = components.visibilityConverter.convertToDescriptorVisibility(visibility), + symbol = IrClassSymbolImpl(), // NB: for unknown reason, IR uses 'CLASS' kind for simple anonymous objects - anonymousObject.classKind.takeIf { it == ClassKind.ENUM_ENTRY } ?: ClassKind.CLASS, - components.visibilityConverter.convertToDescriptorVisibility(visibility), modality + kind = anonymousObject.classKind.takeIf { it == ClassKind.ENUM_ENTRY } ?: ClassKind.CLASS, + modality = modality, ).apply { metadata = FirMetadataSource.Class(anonymousObject) } @@ -634,8 +638,14 @@ class Fir2IrClassifierStorage( return symbolTable.referenceClass(signature, { Fir2IrClassSymbol(signature) }) { irFactory.createClass( - UNDEFINED_OFFSET, UNDEFINED_OFFSET, IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB, it, classId.shortClassName, - ClassKind.CLASS, DescriptorVisibilities.DEFAULT_VISIBILITY, Modality.FINAL, + startOffset = UNDEFINED_OFFSET, + endOffset = UNDEFINED_OFFSET, + origin = IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB, + name = classId.shortClassName, + visibility = DescriptorVisibilities.DEFAULT_VISIBILITY, + symbol = it, + kind = ClassKind.CLASS, + modality = Modality.FINAL, ).apply { parent = irParent } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/IrBuiltInsOverFir.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/IrBuiltInsOverFir.kt index caf8a6f772f..ee921a5a5d1 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/IrBuiltInsOverFir.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/IrBuiltInsOverFir.kt @@ -710,8 +710,21 @@ class IrBuiltInsOverFir( origin = IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB build() irFactory.createClass( - startOffset, endOffset, origin, symbol, name, kind, visibility, modality, - isCompanion, isInner, isData, isExternal, isValue, isExpect, isFun + startOffset = startOffset, + endOffset = endOffset, + origin = origin, + name = name, + visibility = visibility, + symbol = symbol, + kind = kind, + modality = modality, + isExternal = isExternal, + isCompanion = isCompanion, + isInner = isInner, + isData = isData, + isValue = isValue, + isExpect = isExpect, + isFun = isFun, ) }.also { it.parent = parent @@ -776,8 +789,21 @@ class IrBuiltInsOverFir( origin = IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB builderBlock() irFactory.createClass( - startOffset, endOffset, origin, symbol, name, kind, visibility, modality, - isCompanion, isInner, isData, isExternal, isValue, isExpect, isFun + startOffset = startOffset, + endOffset = endOffset, + origin = origin, + name = name, + visibility = visibility, + symbol = symbol, + kind = kind, + modality = modality, + isExternal = isExternal, + isCompanion = isCompanion, + isInner = isInner, + isData = isData, + isValue = isValue, + isExpect = isExpect, + isFun = isFun, ) }.also { it.parent = this diff --git a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/IrTreeBuildUtils.kt b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/IrTreeBuildUtils.kt index af3f1c34323..3fb2b0c2e07 100644 --- a/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/IrTreeBuildUtils.kt +++ b/compiler/ir/ir.interpreter/src/org/jetbrains/kotlin/ir/interpreter/IrTreeBuildUtils.kt @@ -19,10 +19,6 @@ import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl import org.jetbrains.kotlin.ir.declarations.impl.IrVariableImpl import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.* -import org.jetbrains.kotlin.ir.interpreter.state.Complex -import org.jetbrains.kotlin.ir.interpreter.state.ExceptionState -import org.jetbrains.kotlin.ir.interpreter.state.Primitive -import org.jetbrains.kotlin.ir.interpreter.state.State import org.jetbrains.kotlin.ir.symbols.impl.IrClassSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrVariableSymbolImpl @@ -108,8 +104,14 @@ internal fun createTempFunction( internal fun createTempClass(name: Name, origin: IrDeclarationOrigin = TEMP_CLASS_FOR_INTERPRETER): IrClass { return IrFactoryImpl.createClass( - SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, origin, IrClassSymbolImpl(), name, - ClassKind.CLASS, DescriptorVisibilities.PRIVATE, Modality.FINAL + startOffset = SYNTHETIC_OFFSET, + endOffset = SYNTHETIC_OFFSET, + origin = origin, + name = name, + visibility = DescriptorVisibilities.PRIVATE, + symbol = IrClassSymbolImpl(), + kind = ClassKind.CLASS, + modality = Modality.FINAL, ) } diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/descriptors/IrDescriptorBasedFunctionFactory.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/descriptors/IrDescriptorBasedFunctionFactory.kt index 7f9ef39d5cf..00fa62490cf 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/descriptors/IrDescriptorBasedFunctionFactory.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/descriptors/IrDescriptorBasedFunctionFactory.kt @@ -433,7 +433,14 @@ class IrDescriptorBasedFunctionFactory( val name = functionClassName(isK, isSuspend, n) if (symbol.isBound) return symbol.owner val klass = irFactory.createClass( - offset, offset, classOrigin, symbol, Name.identifier(name), ClassKind.INTERFACE, DescriptorVisibilities.PUBLIC, Modality.ABSTRACT + startOffset = offset, + endOffset = offset, + origin = classOrigin, + name = Name.identifier(name), + visibility = DescriptorVisibilities.PUBLIC, + symbol = symbol, + kind = ClassKind.INTERFACE, + modality = Modality.ABSTRACT, ) val r = klass.createTypeParameters(n, descriptorFactory) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/declarations/declarationBuilders.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/declarations/declarationBuilders.kt index d5ba671e1bb..64cda3d246c 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/declarations/declarationBuilders.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/declarations/declarationBuilders.kt @@ -27,10 +27,21 @@ import org.jetbrains.kotlin.types.Variance @PublishedApi internal fun IrFactory.buildClass(builder: IrClassBuilder): IrClass = with(builder) { createClass( - startOffset, endOffset, origin, - IrClassSymbolImpl(), - name, kind, visibility, modality, - isCompanion, isInner, isData, isExternal, isValue, isExpect, isFun + startOffset = startOffset, + endOffset = endOffset, + origin = origin, + name = name, + visibility = visibility, + symbol = IrClassSymbolImpl(), + kind = kind, + modality = modality, + isExternal = isExternal, + isCompanion = isCompanion, + isInner = isInner, + isData = isData, + isValue = isValue, + isExpect = isExpect, + isFun = isFun, ) } 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 eccd92da2c6..e96ee48b2f4 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 @@ -31,15 +31,15 @@ interface IrFactory { startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, - symbol: IrClassSymbol, name: Name, - kind: ClassKind, visibility: DescriptorVisibility, + symbol: IrClassSymbol, + kind: ClassKind, modality: Modality, + isExternal: Boolean = false, isCompanion: Boolean = false, isInner: Boolean = false, isData: Boolean = false, - isExternal: Boolean = false, isValue: Boolean = false, isExpect: Boolean = false, isFun: Boolean = false, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImpl.kt index bbe29ce967b..43e0edb01dd 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImpl.kt @@ -38,15 +38,15 @@ abstract class AbstractIrFactoryImpl : IrFactory { startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, - symbol: IrClassSymbol, name: Name, - kind: ClassKind, visibility: DescriptorVisibility, + symbol: IrClassSymbol, + kind: ClassKind, modality: Modality, + isExternal: Boolean, isCompanion: Boolean, isInner: Boolean, isData: Boolean, - isExternal: Boolean, isValue: Boolean, isExpect: Boolean, isFun: Boolean, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImplForJsIC.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImplForJsIC.kt index f81e4ffc32c..8a31149d14f 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImplForJsIC.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrFactoryImplForJsIC.kt @@ -50,15 +50,15 @@ class IrFactoryImplForJsIC(override val stageController: StageController) : Abst startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, - symbol: IrClassSymbol, name: Name, - kind: ClassKind, visibility: DescriptorVisibility, + symbol: IrClassSymbol, + kind: ClassKind, modality: Modality, + isExternal: Boolean, isCompanion: Boolean, isInner: Boolean, isData: Boolean, - isExternal: Boolean, isValue: Boolean, isExpect: Boolean, isFun: Boolean, @@ -68,15 +68,15 @@ class IrFactoryImplForJsIC(override val stageController: StageController) : Abst startOffset, endOffset, origin, - symbol, name, - kind, visibility, + symbol, + kind, modality, + isExternal, isCompanion, isInner, isData, - isExternal, isValue, isExpect, isFun, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/LazyIrFactory.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/LazyIrFactory.kt index 3f1316a824e..05403af6b04 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/LazyIrFactory.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/lazy/LazyIrFactory.kt @@ -24,15 +24,15 @@ class LazyIrFactory( startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, - symbol: IrClassSymbol, name: Name, - kind: ClassKind, visibility: DescriptorVisibility, + symbol: IrClassSymbol, + kind: ClassKind, modality: Modality, + isExternal: Boolean, isCompanion: Boolean, isInner: Boolean, isData: Boolean, - isExternal: Boolean, isValue: Boolean, isExpect: Boolean, isFun: Boolean, @@ -41,8 +41,22 @@ class LazyIrFactory( symbol.owner else delegate.createClass( - startOffset, endOffset, origin, symbol, name, kind, visibility, modality, - isCompanion, isInner, isData, isExternal, isValue, isExpect, isFun, source + startOffset, + endOffset, + origin, + name, + visibility, + symbol, + kind, + modality, + isExternal, + isCompanion, + isInner, + isData, + isValue, + isExpect, + isFun, + source, ) override fun createConstructor( diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt index 894bf8e97e7..6f4a28e1294 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeepCopyIrTreeWithSymbols.kt @@ -141,20 +141,21 @@ open class DeepCopyIrTreeWithSymbols( override fun visitClass(declaration: IrClass): IrClass = declaration.factory.createClass( - declaration.startOffset, declaration.endOffset, - mapDeclarationOrigin(declaration.origin), - symbolRemapper.getDeclaredClass(declaration.symbol), - symbolRenamer.getClassName(declaration.symbol), - declaration.kind, - declaration.visibility, - declaration.modality, + startOffset = declaration.startOffset, + endOffset = declaration.endOffset, + origin = mapDeclarationOrigin(declaration.origin), + name = symbolRenamer.getClassName(declaration.symbol), + visibility = declaration.visibility, + symbol = symbolRemapper.getDeclaredClass(declaration.symbol), + kind = declaration.kind, + modality = declaration.modality, + isExternal = declaration.isExternal, isCompanion = declaration.isCompanion, isInner = declaration.isInner, isData = declaration.isData, - isExternal = declaration.isExternal, isValue = declaration.isValue, isExpect = declaration.isExpect, - isFun = declaration.isFun + isFun = declaration.isFun, ).apply { transformAnnotations(declaration) copyTypeParametersFrom(declaration) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DescriptorToIrUtil.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DescriptorToIrUtil.kt index 18bfa94b45d..ac0c2715159 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DescriptorToIrUtil.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DescriptorToIrUtil.kt @@ -37,7 +37,20 @@ fun IrFactory.createIrClassFromDescriptor( visibility: DescriptorVisibility = descriptor.visibility, modality: Modality = descriptor.modality ): IrClass = createClass( - startOffset, endOffset, origin, symbol, name, descriptor.kind, visibility, modality, - descriptor.isCompanionObject, descriptor.isInner, descriptor.isData, descriptor.isEffectivelyExternal(), - descriptor.isValueClass(), descriptor.isExpect, descriptor.isFun, descriptor.source + startOffset = startOffset, + endOffset = endOffset, + origin = origin, + name = name, + visibility = visibility, + symbol = symbol, + kind = descriptor.kind, + modality = modality, + isExternal = descriptor.isEffectivelyExternal(), + isCompanion = descriptor.isCompanionObject, + isInner = descriptor.isInner, + isData = descriptor.isData, + isValue = descriptor.isValueClass(), + isExpect = descriptor.isExpect, + isFun = descriptor.isFun, + source = descriptor.source, ) diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/linkage/partial/MissingDeclarationStubGenerator.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/linkage/partial/MissingDeclarationStubGenerator.kt index d183f892fd1..d39d5f9408e 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/linkage/partial/MissingDeclarationStubGenerator.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/linkage/partial/MissingDeclarationStubGenerator.kt @@ -69,11 +69,11 @@ internal class MissingDeclarationStubGenerator(private val builtIns: IrBuiltIns) startOffset = UNDEFINED_OFFSET, endOffset = UNDEFINED_OFFSET, origin = PartiallyLinkedDeclarationOrigin.MISSING_DECLARATION, - symbol = symbol, name = symbol.guessName(), - kind = ClassKind.CLASS, visibility = DescriptorVisibilities.DEFAULT_VISIBILITY, - modality = Modality.OPEN + symbol = symbol, + kind = ClassKind.CLASS, + modality = Modality.OPEN, ).apply { setCommonParent() createImplicitParameterDeclarationWithWrappedDescriptor() diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrDeclarationDeserializer.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrDeclarationDeserializer.kt index 20204ce8c6e..1ee3aa74979 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrDeclarationDeserializer.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/serialization/IrDeclarationDeserializer.kt @@ -357,19 +357,21 @@ class IrDeclarationDeserializer( } symbolTable.declareClass(signature, { symbol.checkSymbolType(CLASS_SYMBOL) }) { irFactory.createClass( - startOffset, endOffset, origin, - it, - deserializeName(proto.name), - flags.kind, - flags.visibility, - effectiveModality, - flags.isCompanion, - flags.isInner, - flags.isData, - flags.isExternal || isEffectivelyExternal, - flags.isValue, - flags.isExpect, - flags.isFun, + startOffset = startOffset, + endOffset = endOffset, + origin = origin, + name = deserializeName(proto.name), + visibility = flags.visibility, + symbol = it, + kind = flags.kind, + modality = effectiveModality, + isExternal = flags.isExternal || isEffectivelyExternal, + isCompanion = flags.isCompanion, + isInner = flags.isInner, + isData = flags.isData, + isValue = flags.isValue, + isExpect = flags.isExpect, + isFun = flags.isFun, ) }.usingParent { typeParameters = deserializeTypeParameters(proto.typeParameterList, true)