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 {
|
public void testEnumIsComparable() throws Exception {
|
||||||
checkFooBoxIsOk();
|
checkFooBoxIsOk();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testNativeEnum() throws Exception {
|
||||||
|
checkFooBoxIsOk();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -53,7 +53,7 @@ public final class ReferenceTranslator {
|
|||||||
) {
|
) {
|
||||||
JsExpression simpleName = translateSimpleName(expression, context);
|
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);
|
DeclarationDescriptor descriptor = BindingUtils.getDescriptorForReferenceExpression(context.bindingContext(), expression);
|
||||||
//TODO: should go away when objects inside classes are supported
|
//TODO: should go away when objects inside classes are supported
|
||||||
if (DescriptorUtils.isDefaultObject(descriptor) && !AnnotationsUtils.isNativeObject(descriptor)) {
|
if (DescriptorUtils.isDefaultObject(descriptor) && !AnnotationsUtils.isNativeObject(descriptor)) {
|
||||||
@@ -61,7 +61,7 @@ public final class ReferenceTranslator {
|
|||||||
}
|
}
|
||||||
if (descriptor instanceof ClassDescriptor) {
|
if (descriptor instanceof ClassDescriptor) {
|
||||||
ClassDescriptor entryClass = (ClassDescriptor) descriptor;
|
ClassDescriptor entryClass = (ClassDescriptor) descriptor;
|
||||||
if (entryClass.getKind() == ClassKind.ENUM_ENTRY) {
|
if (entryClass.getKind() == ClassKind.ENUM_ENTRY && !AnnotationsUtils.isNativeObject(entryClass)) {
|
||||||
DeclarationDescriptor enumClass = entryClass.getContainingDeclaration();
|
DeclarationDescriptor enumClass = entryClass.getContainingDeclaration();
|
||||||
qualifier = Namer.getDefaultObjectAccessor(translateAsFQReference(enumClass, context));
|
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