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 df61180021a..02bf781452e 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 @@ -54,6 +54,8 @@ class ClassGenerator( return context.symbolTable.declareClass( startOffset, endOffset, IrDeclarationOrigin.DEFINED, classDescriptor ).buildWithScope { irClass -> + declarationGenerator.generateGlobalTypeParametersDeclarations(irClass, classDescriptor.declaredTypeParameters) + classDescriptor.typeConstructor.supertypes.mapTo(irClass.superTypes) { it.toIrType() } @@ -65,8 +67,6 @@ class ClassGenerator( classDescriptor.thisAsReceiverParameter.type.toIrType() ) - declarationGenerator.generateGlobalTypeParametersDeclarations(irClass, classDescriptor.declaredTypeParameters) - val irPrimaryConstructor = generatePrimaryConstructor(irClass, ktClassOrObject) if (irPrimaryConstructor != null) { generateDeclarationsForPrimaryConstructorParameters(irClass, irPrimaryConstructor, ktClassOrObject) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt index 9e5e2b1a452..146fff21b3f 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DeclarationStubGenerator.kt @@ -138,12 +138,13 @@ class DeclarationStubGenerator( private fun generateClassStub(descriptor: ClassDescriptor): IrClass = symbolTable.declareClass(UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, descriptor).also { irClass -> + generateTypeParameterStubs(descriptor.declaredTypeParameters, irClass) + // TODO get rid of code duplication, see ClassGenerator#generateClass descriptor.typeConstructor.supertypes.mapNotNullTo(irClass.superTypes) { it.toIrType() } - generateTypeParameterStubs(descriptor.declaredTypeParameters, irClass) irClass.thisReceiver = descriptor.thisAsReceiverParameter.generateReceiverParameterStub() generateChildStubs(descriptor.constructors, irClass) generateMemberStubs(descriptor.defaultType.memberScope, irClass) 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 7e6e2c9c658..dd12ad344e6 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 @@ -99,11 +99,11 @@ open class DeepCopyIrTreeWithSymbols( symbolRemapper.getDeclaredClass(declaration.symbol) ).apply { transformAnnotations(declaration) + declaration.typeParameters.transformTo(typeParameters) declaration.superTypes.mapTo(superTypes) { it.remapType() } thisReceiver = declaration.thisReceiver?.transform() - declaration.typeParameters.transformTo(typeParameters) declaration.transformDeclarationsTo(this) }