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) {
|
assert(fieldParent.isEnumClass) {
|
||||||
"${field.render()} in non-external class ${fieldParent.render()}"
|
"${field.render()} in non-external class ${fieldParent.render()}"
|
||||||
}
|
}
|
||||||
return JsNameRef(
|
|
||||||
field.getJsNameOrKotlinName().identifier,
|
val receiver = expression.receiver?.accept(this, context) ?: error("Expect expression.receiver to not be null")
|
||||||
context.getNameForClass(fieldParent).makeRef()
|
return JsNameRef(field.getJsNameOrKotlinName().identifier, receiver).withSource(expression, context)
|
||||||
).withSource(expression, context)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fieldParent is IrClass && fieldParent.isInline) {
|
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");
|
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")
|
@TestMetadata("inheritanceFromNativeClass.kt")
|
||||||
public void testInheritanceFromNativeClass() throws Exception {
|
public void testInheritanceFromNativeClass() throws Exception {
|
||||||
runTest("js/js.translator/testData/box/native/inheritanceFromNativeClass.kt");
|
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");
|
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")
|
@TestMetadata("inheritanceFromNativeClass.kt")
|
||||||
public void testInheritanceFromNativeClass() throws Exception {
|
public void testInheritanceFromNativeClass() throws Exception {
|
||||||
runTest("js/js.translator/testData/box/native/inheritanceFromNativeClass.kt");
|
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");
|
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")
|
@TestMetadata("inheritanceFromNativeClass.kt")
|
||||||
public void testInheritanceFromNativeClass() throws Exception {
|
public void testInheritanceFromNativeClass() throws Exception {
|
||||||
runTest("js/js.translator/testData/box/native/inheritanceFromNativeClass.kt");
|
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