JS backend: fixed accessing to native enum entries.

This commit is contained in:
Zalim Bashorov
2015-02-24 22:14:13 +03:00
parent e00cdfc8e1
commit f49e4ca3e9
4 changed files with 30 additions and 2 deletions
@@ -50,4 +50,8 @@ public class EnumTest extends SingleFileTranslationTest {
public void testEnumIsComparable() throws Exception {
checkFooBoxIsOk();
}
public void testNativeEnum() throws Exception {
checkFooBoxIsOk();
}
}
@@ -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"
}