From 9bd44e01f59ceed833449c1adc9352214193db02 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Thu, 21 Oct 2021 16:52:54 +0300 Subject: [PATCH] [JS IR] Export enum members like from usual classes ^KT-37916 fixed ^KT-44494 fixed --- .../transformers/irToJs/JsClassGenerator.kt | 2 +- .../testData/box/export/exportEnumClass.kt | 41 +++++++++++++++++-- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/JsClassGenerator.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/JsClassGenerator.kt index 75b5a264a33..c518aa378a9 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/JsClassGenerator.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/JsClassGenerator.kt @@ -100,7 +100,7 @@ class JsClassGenerator(private val irClass: IrClass, val context: JsGenerationCo classBlock.statements += generateClassMetadata() - if (!irClass.isInterface && !irClass.isEnumClass && !irClass.isEnumEntry) { + if (!irClass.isInterface && !irClass.isEnumEntry) { for (property in properties) { if (property.getter?.extensionReceiverParameter != null || property.setter?.extensionReceiverParameter != null) continue diff --git a/js/js.translator/testData/box/export/exportEnumClass.kt b/js/js.translator/testData/box/export/exportEnumClass.kt index 671200e85cd..4a2c38e512d 100644 --- a/js/js.translator/testData/box/export/exportEnumClass.kt +++ b/js/js.translator/testData/box/export/exportEnumClass.kt @@ -12,13 +12,32 @@ enum class Foo { val foo = ordinal - fun bar() = name + fun bar(value: String) = value + + fun bay() = name companion object { val baz = "baz" } } +@JsExport +enum class Bar { + A, + B { + var d = "d" + init { + d = "d2" + } + }; + + val foo = ordinal + + fun bar(value: String) = value + + fun bay() = name +} + // FILE: test.js function box() { if (this["export-enum-class"].Foo.A !== this["export-enum-class"].Foo.A) return "fail1" @@ -29,6 +48,22 @@ function box() { if (this["export-enum-class"].Foo.A.foo !== 0) return "fail4" if (this["export-enum-class"].Foo.B.foo !== 1) return "fail5" - if (this["export-enum-class"].Foo.A.bar() !== "A") return "fail6" - if (this["export-enum-class"].Foo.B.bar() !== "B") return "fail7" + if (this["export-enum-class"].Foo.A.bar("A") !== "A") return "fail6" + if (this["export-enum-class"].Foo.B.bar("B") !== "B") return "fail7" + + if (this["export-enum-class"].Foo.A.bay() !== "A") return "fail8" + if (this["export-enum-class"].Foo.B.bay() !== "B") return "fail9" + + if (this["export-enum-class"].Bar.A.foo !== 0) return "fail10" + if (this["export-enum-class"].Bar.B.foo !== 1) return "fail11" + + if (this["export-enum-class"].Bar.A.bar("A") !== "A") return "fail12" + if (this["export-enum-class"].Bar.B.bar("B") !== "B") return "fail13" + + if (this["export-enum-class"].Bar.A.bay() !== "A") return "fail14" + if (this["export-enum-class"].Bar.B.bay() !== "B") return "fail15" + + if (this["export-enum-class"].Bar.B.constructor.prototype.hasOwnProperty('baz')) return "fail16" + + return "OK" } \ No newline at end of file