diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/EnumTest.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/EnumTest.java index 69a5cec55e1..7cdb3f2a630 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/EnumTest.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/EnumTest.java @@ -50,4 +50,8 @@ public class EnumTest extends SingleFileTranslationTest { public void testEnumIsComparable() throws Exception { checkFooBoxIsOk(); } + + public void testNativeEnum() throws Exception { + checkFooBoxIsOk(); + } } diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/ReferenceTranslator.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/ReferenceTranslator.java index e6ef3180d6c..fb52a57cfd2 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/ReferenceTranslator.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/ReferenceTranslator.java @@ -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)); } diff --git a/js/js.translator/testData/enum/cases/nativeEnum.js b/js/js.translator/testData/enum/cases/nativeEnum.js new file mode 100644 index 00000000000..24a189bbaed --- /dev/null +++ b/js/js.translator/testData/enum/cases/nativeEnum.js @@ -0,0 +1,5 @@ +var JsEnum = { + Foo : 1, + Bar : "BAR", + Baz : { ok : "OK" } +}; diff --git a/js/js.translator/testData/enum/cases/nativeEnum.kt b/js/js.translator/testData/enum/cases/nativeEnum.kt new file mode 100644 index 00000000000..36b50f9d595 --- /dev/null +++ b/js/js.translator/testData/enum/cases/nativeEnum.kt @@ -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" +} \ No newline at end of file