fix(KT-46961): add support of nested external enums.

This commit is contained in:
Artem Kobzar
2021-10-21 06:40:00 +00:00
committed by Space
parent 3dbf996ec6
commit 876d358fe6
6 changed files with 48 additions and 4 deletions
@@ -88,10 +88,9 @@ class IrElementToJsExpressionTransformer : BaseIrElementToJsNodeTransformer<JsEx
assert(fieldParent.isEnumClass) {
"${field.render()} in non-external class ${fieldParent.render()}"
}
return JsNameRef(
field.getJsNameOrKotlinName().identifier,
context.getNameForClass(fieldParent).makeRef()
).withSource(expression, context)
val receiver = expression.receiver?.accept(this, context) ?: error("Expect expression.receiver to not be null")
return JsNameRef(field.getJsNameOrKotlinName().identifier, receiver).withSource(expression, context)
}
if (fieldParent is IrClass && fieldParent.isInline) {
@@ -6697,6 +6697,11 @@ public class IrBoxJsES6TestGenerated extends AbstractIrBoxJsES6Test {
runTest("js/js.translator/testData/box/native/exception.kt");
}
@TestMetadata("externalNestedEnum.kt")
public void testExternalNestedEnum() throws Exception {
runTest("js/js.translator/testData/box/native/externalNestedEnum.kt");
}
@TestMetadata("inheritanceFromNativeClass.kt")
public void testInheritanceFromNativeClass() throws Exception {
runTest("js/js.translator/testData/box/native/inheritanceFromNativeClass.kt");
@@ -6692,6 +6692,11 @@ public class IrBoxJsTestGenerated extends AbstractIrBoxJsTest {
runTest("js/js.translator/testData/box/native/exception.kt");
}
@TestMetadata("externalNestedEnum.kt")
public void testExternalNestedEnum() throws Exception {
runTest("js/js.translator/testData/box/native/externalNestedEnum.kt");
}
@TestMetadata("inheritanceFromNativeClass.kt")
public void testInheritanceFromNativeClass() throws Exception {
runTest("js/js.translator/testData/box/native/inheritanceFromNativeClass.kt");
@@ -6382,6 +6382,11 @@ public class BoxJsTestGenerated extends AbstractBoxJsTest {
runTest("js/js.translator/testData/box/native/exception.kt");
}
@TestMetadata("externalNestedEnum.kt")
public void testExternalNestedEnum() throws Exception {
runTest("js/js.translator/testData/box/native/externalNestedEnum.kt");
}
@TestMetadata("inheritanceFromNativeClass.kt")
public void testInheritanceFromNativeClass() throws Exception {
runTest("js/js.translator/testData/box/native/inheritanceFromNativeClass.kt");
@@ -0,0 +1,6 @@
var O = {
Foo: {
A: {},
B: {}
}
};
@@ -0,0 +1,24 @@
// KT-46961
// IGNORE_BACKEND: JS
external object O {
enum class Foo {
A, B
}
}
fun box(): String {
val a = foo(O.Foo.A)
val b = foo(O.Foo.B)
if (a != "!") return "fail1: $a"
if (b != "@") return "fail2: $b"
return "OK"
}
fun foo(x: O.Foo) = when (x) {
O.Foo.A -> "!"
O.Foo.B -> "@"
else -> ""
}