From 69f6dc059d4b72b5f068cd789d081ee3591e131e Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Thu, 21 Oct 2021 19:21:35 +0300 Subject: [PATCH] [JS IR] Export type for enum class and not extends kotlin.Enum in TS ^KT-37916 fixed ^KT-44494 fixed --- .../kotlin/ir/backend/js/export/ExportModelGenerator.kt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/export/ExportModelGenerator.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/export/ExportModelGenerator.kt index 70265df4163..34fbe6cf07a 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/export/ExportModelGenerator.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/export/ExportModelGenerator.kt @@ -226,7 +226,7 @@ class ExportModelGenerator( // TODO: Handle non-exported super types val superType = klass.superTypes - .firstOrNull { !it.classifierOrFail.isInterface && !it.isAny() } + .firstOrNull { !it.classifierOrFail.isInterface && it.canBeUsedAsSuperTypeOfExportedClasses() } ?.let { exportType(it).takeIf { it !is ExportedType.ErrorType } } val superInterfaces = klass.superTypes @@ -271,6 +271,9 @@ class ExportModelGenerator( ) } + private fun IrType.canBeUsedAsSuperTypeOfExportedClasses(): Boolean = + !this.isAny() && classifierOrNull != context.irBuiltIns.enumClass + private fun exportTypeArgument(type: IrTypeArgument): ExportedType { if (type is IrTypeProjection) return exportType(type.type) @@ -328,7 +331,6 @@ class ExportModelGenerator( when (klass.kind) { ClassKind.ANNOTATION_CLASS, - ClassKind.ENUM_CLASS, ClassKind.ENUM_ENTRY -> ExportedType.ErrorType("Class $name with kind: ${klass.kind}") @@ -336,6 +338,7 @@ class ExportModelGenerator( ExportedType.TypeOf(name) ClassKind.CLASS, + ClassKind.ENUM_CLASS, ClassKind.INTERFACE -> ExportedType.ClassType( name, type.arguments.map { exportTypeArgument(it) }