fix(KT-46961): add support of nested external enums.
This commit is contained in:
+3
-4
@@ -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) {
|
||||
|
||||
Generated
+5
@@ -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");
|
||||
|
||||
+5
@@ -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");
|
||||
|
||||
+5
@@ -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 -> ""
|
||||
}
|
||||
Reference in New Issue
Block a user