JS backend: fixed accessing to native enum entries.
This commit is contained in:
@@ -50,4 +50,8 @@ public class EnumTest extends SingleFileTranslationTest {
|
||||
public void testEnumIsComparable() throws Exception {
|
||||
checkFooBoxIsOk();
|
||||
}
|
||||
|
||||
public void testNativeEnum() throws Exception {
|
||||
checkFooBoxIsOk();
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -53,7 +53,7 @@ public final class ReferenceTranslator {
|
||||
) {
|
||||
JsExpression simpleName = translateSimpleName(expression, context);
|
||||
|
||||
// Ignore qualifier if expression is EnumEntry or default object reference and use always use FQ name.
|
||||
// Ignore qualifier if expression is EnumEntry or default object reference and always use FQ name.
|
||||
DeclarationDescriptor descriptor = BindingUtils.getDescriptorForReferenceExpression(context.bindingContext(), expression);
|
||||
//TODO: should go away when objects inside classes are supported
|
||||
if (DescriptorUtils.isDefaultObject(descriptor) && !AnnotationsUtils.isNativeObject(descriptor)) {
|
||||
@@ -61,7 +61,7 @@ public final class ReferenceTranslator {
|
||||
}
|
||||
if (descriptor instanceof ClassDescriptor) {
|
||||
ClassDescriptor entryClass = (ClassDescriptor) descriptor;
|
||||
if (entryClass.getKind() == ClassKind.ENUM_ENTRY) {
|
||||
if (entryClass.getKind() == ClassKind.ENUM_ENTRY && !AnnotationsUtils.isNativeObject(entryClass)) {
|
||||
DeclarationDescriptor enumClass = entryClass.getContainingDeclaration();
|
||||
qualifier = Namer.getDefaultObjectAccessor(translateAsFQReference(enumClass, context));
|
||||
}
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
var JsEnum = {
|
||||
Foo : 1,
|
||||
Bar : "BAR",
|
||||
Baz : { ok : "OK" }
|
||||
};
|
||||
@@ -0,0 +1,19 @@
|
||||
package foo
|
||||
|
||||
native
|
||||
enum class JsEnum {
|
||||
Foo
|
||||
Bar
|
||||
Baz
|
||||
}
|
||||
|
||||
// TODO uncomment when KT-5605 will be fixed
|
||||
// fun JsEnum.extImplicit() = Foo
|
||||
|
||||
fun box(): String {
|
||||
assertEquals(1, JsEnum.Foo)
|
||||
assertEquals("BAR", JsEnum.Bar)
|
||||
assertEquals("OK", (JsEnum.Baz: dynamic).ok)
|
||||
|
||||
return "OK"
|
||||
}
|
||||
Reference in New Issue
Block a user