diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/AsmUtil.java b/compiler/backend/src/org/jetbrains/jet/codegen/AsmUtil.java index f82199043c5..94959cd6f0d 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/AsmUtil.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/AsmUtil.java @@ -244,13 +244,13 @@ public class AsmUtil { if (memberVisibility == Visibilities.LOCAL && memberDescriptor instanceof CallableMemberDescriptor) { return ACC_PUBLIC; } + if (isEnumEntry(memberDescriptor)) { + return NO_FLAG_PACKAGE_PRIVATE; + } if (memberVisibility != Visibilities.PRIVATE) { return null; } // the following code is only for PRIVATE visibility of member - if (isEnumEntry(memberDescriptor)) { - return NO_FLAG_PACKAGE_PRIVATE; - } if (memberDescriptor instanceof ConstructorDescriptor) { if (isAnonymousObject(containingDeclaration)) { return NO_FLAG_PACKAGE_PRIVATE; diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index 3899aea5158..3423035c536 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -1676,6 +1676,13 @@ public class ExpressionCodegen extends JetVisitor implem if (classDescriptor.getKind() == ClassKind.OBJECT) { return StackValue.singleton(classDescriptor, typeMapper); } + if (classDescriptor.getKind() == ClassKind.ENUM_ENTRY) { + DeclarationDescriptor enumClass = classDescriptor.getContainingDeclaration().getContainingDeclaration(); + assert enumClass != null && DescriptorUtils.isEnumClass(enumClass) + : "Enum entry should be declared in enum class object: " + descriptor; + Type type = typeMapper.mapType((ClassDescriptor) enumClass); + return StackValue.field(type, type, descriptor.getName().asString(), true); + } ClassDescriptor classObjectDescriptor = classDescriptor.getClassObjectDescriptor(); assert classObjectDescriptor != null : "Class object is not found for " + descriptor; return StackValue.singleton(classObjectDescriptor, typeMapper); diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java index b67e4c3d1ec..c0cb1d79826 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java @@ -1036,7 +1036,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { } private void generateFieldForSingleton() { - if (isEnumClass(descriptor)) return; + if (isEnumClass(descriptor) || isEnumEntry(descriptor)) return; ClassDescriptor classObjectDescriptor = descriptor.getClassObjectDescriptor(); ClassDescriptor fieldTypeDescriptor;