diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt index b466cf9c939..26561f61512 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.expressions.mapValueParameters import org.jetbrains.kotlin.ir.expressions.putTypeArguments import org.jetbrains.kotlin.ir.expressions.typeParametersCount +import org.jetbrains.kotlin.ir.util.createIrClassFromDescriptor import org.jetbrains.kotlin.ir.util.declareSimpleFunctionWithOverrides import org.jetbrains.kotlin.ir.util.properties import org.jetbrains.kotlin.ir.util.referenceFunction @@ -84,12 +85,12 @@ class ClassGenerator( val modality = getEffectiveModality(ktClassOrObject, classDescriptor) return context.symbolTable.declareClass(classDescriptor) { - IrClassImpl( - startOffset, endOffset, IrDeclarationOrigin.DEFINED, it, - classDescriptor, - context.symbolTable.nameProvider.nameForDeclaration(classDescriptor), - visibility = visibility, modality = modality, - ).apply { metadata = MetadataSource.Class(it.descriptor) } + createIrClassFromDescriptor( + startOffset, endOffset, IrDeclarationOrigin.DEFINED, it, classDescriptor, + context.symbolTable.nameProvider.nameForDeclaration(classDescriptor), visibility, modality + ).apply { + (this as IrClassImpl).metadata = MetadataSource.Class(it.descriptor) + } }.buildWithScope { irClass -> declarationGenerator.generateGlobalTypeParametersDeclarations(irClass, classDescriptor.declaredTypeParameters) diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/StandaloneDeclarationGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/StandaloneDeclarationGenerator.kt index 9e5bf372050..82848c41ba5 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/StandaloneDeclarationGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/StandaloneDeclarationGenerator.kt @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.ir.declarations.impl.* import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.symbols.* import org.jetbrains.kotlin.ir.types.impl.IrUninitializedType +import org.jetbrains.kotlin.ir.util.createIrClassFromDescriptor import org.jetbrains.kotlin.ir.util.withScope import org.jetbrains.kotlin.psi.KtParameter import org.jetbrains.kotlin.psi.KtPureElement @@ -75,11 +76,10 @@ class StandaloneDeclarationGenerator(private val context: GeneratorContext) { } fun generateClass(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: ClassDescriptor, symbol: IrClassSymbol): IrClass { - - val irClass = IrClassImpl(startOffset, endOffset, origin, symbol, descriptor) + val irClass = createIrClassFromDescriptor(startOffset, endOffset, origin, symbol, descriptor) symbolTable.withScope(irClass) { - irClass.metadata = MetadataSource.Class(descriptor) + (irClass as IrClassImpl).metadata = MetadataSource.Class(descriptor) generateGlobalTypeParametersDeclarations(irClass, descriptor.declaredTypeParameters) irClass.superTypes = descriptor.typeConstructor.supertypes.map { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrClassImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrClassImpl.kt index c22d17ede5e..4eb2ca8a568 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrClassImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/impl/IrClassImpl.kt @@ -27,7 +27,6 @@ import org.jetbrains.kotlin.ir.util.transformIfNeeded import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal import java.util.* import kotlin.collections.ArrayList @@ -53,26 +52,6 @@ class IrClassImpl( IrClass, ClassCarrier { - constructor( - startOffset: Int, - endOffset: Int, - origin: IrDeclarationOrigin, - symbol: IrClassSymbol, - descriptor: ClassDescriptor, - name: Name = descriptor.name, - visibility: Visibility = descriptor.visibility, - modality: Modality = descriptor.modality - ) : this( - startOffset, endOffset, origin, symbol, - name, kind = descriptor.kind, - visibility = visibility, modality = modality, - isCompanion = descriptor.isCompanionObject, isInner = descriptor.isInner, - isData = descriptor.isData, isExternal = descriptor.isEffectivelyExternal(), - isInline = descriptor.isInline, isExpect = descriptor.isExpect, - isFun = descriptor.isFun, - source = descriptor.source - ) - init { symbol.bind(this) } 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 d9ad975e50d..ec09784f77e 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 @@ -5,8 +5,13 @@ package org.jetbrains.kotlin.ir.util -import org.jetbrains.kotlin.descriptors.ParameterDescriptor -import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor +import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.ir.declarations.IrClass +import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin +import org.jetbrains.kotlin.ir.declarations.impl.IrClassImpl +import org.jetbrains.kotlin.ir.symbols.IrClassSymbol +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal import org.jetbrains.kotlin.types.KotlinType val ParameterDescriptor.indexOrMinusOne: Int @@ -20,3 +25,18 @@ val ParameterDescriptor.isCrossinline: Boolean val ParameterDescriptor.isNoinline: Boolean get() = this is ValueParameterDescriptor && isNoinline + +fun createIrClassFromDescriptor( + startOffset: Int, + endOffset: Int, + origin: IrDeclarationOrigin, + symbol: IrClassSymbol, + descriptor: ClassDescriptor, + name: Name = descriptor.name, + visibility: Visibility = descriptor.visibility, + modality: Modality = descriptor.modality +): IrClass = IrClassImpl( + startOffset, endOffset, origin, symbol, name, descriptor.kind, visibility, modality, + descriptor.isCompanionObject, descriptor.isInner, descriptor.isData, descriptor.isEffectivelyExternal(), + descriptor.isInline, descriptor.isExpect, descriptor.isFun, descriptor.source +)