Put enum entries into enum class in JDR

This commit is contained in:
Alexander Udalov
2013-11-13 21:26:31 +04:00
parent 60e7722a82
commit 5a4cc1e2fe
15 changed files with 139 additions and 163 deletions
@@ -1642,10 +1642,6 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
}
}
if (descriptor instanceof VariableDescriptorForObject) {
return genObjectClassInstance((VariableDescriptorForObject) descriptor);
}
int index = lookupLocalIndex(descriptor);
if (index >= 0) {
return stackValueForLocal(descriptor, index);
@@ -1731,20 +1727,6 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
throw new UnsupportedOperationException("don't know how to generate reference " + descriptor);
}
@NotNull
private StackValue genObjectClassInstance(@NotNull VariableDescriptorForObject variableDescriptor) {
boolean isEnumEntry = DescriptorUtils.isEnumClassObject(variableDescriptor.getContainingDeclaration());
if (isEnumEntry) {
ClassDescriptor containing = (ClassDescriptor) variableDescriptor.getContainingDeclaration().getContainingDeclaration();
assert containing != null;
Type type = typeMapper.mapType(containing);
return StackValue.field(type, type, variableDescriptor.getName().asString(), true);
}
else {
return StackValue.singleton(variableDescriptor.getObjectClass(), typeMapper);
}
}
private StackValue stackValueForLocal(DeclarationDescriptor descriptor, int index) {
if (descriptor instanceof VariableDescriptor) {
Type sharedVarType = typeMapper.getSharedVarType(descriptor);
@@ -279,7 +279,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
if (inner == null || isTopLevelDeclaration(inner)) {
break;
}
if (inner instanceof ClassDescriptor && !isEnumClassObject(inner)) {
if (inner instanceof ClassDescriptor) {
writeInnerClass((ClassDescriptor) inner);
}
inner = inner.getContainingDeclaration();
@@ -303,9 +303,6 @@ public class AnnotationResolver {
CallableDescriptor callableDescriptor = resolvedCall.getResultingDescriptor();
if (callableDescriptor instanceof PropertyDescriptor) {
PropertyDescriptor propertyDescriptor = (PropertyDescriptor) callableDescriptor;
if (isEnumProperty(propertyDescriptor)) {
return new EnumValue(((VariableDescriptorForObject) propertyDescriptor).getObjectClass());
}
if (AnnotationUtils.isPropertyAcceptableAsAnnotationParameter(propertyDescriptor)) {
return trace.getBindingContext().get(COMPILE_TIME_INITIALIZER, propertyDescriptor);
}
@@ -366,14 +363,6 @@ public class AnnotationResolver {
return expression.accept(visitor, null);
}
private static boolean isEnumProperty(@NotNull PropertyDescriptor descriptor) {
// TODO: this is true only for enum entries loaded from Java, refactor JDR to use classes with class objects instead
ClassifierDescriptor classifier = descriptor.getType().getConstructor().getDeclarationDescriptor();
return classifier != null &&
DescriptorUtils.isEnumClass(classifier) &&
DescriptorUtils.isEnumClassObject(descriptor.getContainingDeclaration());
}
@SuppressWarnings("MethodMayBeStatic")
@NotNull
public List<AnnotationDescriptor> getResolvedAnnotations(@NotNull List<JetAnnotationEntry> annotations, @NotNull BindingTrace trace) {
@@ -11,37 +11,37 @@ public final enum class EnumMembers : jet.Enum<test.EnumMembers> {
private constructor <class-object-for-EnumMembers>()
public final /*synthesized*/ fun valueOf(/*0*/ value: jet.String): test.EnumMembers
public final /*synthesized*/ fun values(): jet.Array<test.EnumMembers>
}
public enum entry FIRST : test.EnumMembers {
private constructor FIRST()
public final override /*1*/ /*fake_override*/ val isFirst: jet.Boolean
public open override /*1*/ /*fake_override*/ fun first(): jet.Boolean
public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
public enum entry FIRST : test.EnumMembers {
private constructor FIRST()
public class object <class-object-for-FIRST> : test.EnumMembers.FIRST {
private constructor <class-object-for-FIRST>()
public final override /*1*/ /*fake_override*/ val isFirst: jet.Boolean
public open override /*1*/ /*fake_override*/ fun first(): jet.Boolean
public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
public class object <class-object-for-FIRST> : test.EnumMembers.FIRST {
private constructor <class-object-for-FIRST>()
public final override /*1*/ /*fake_override*/ val isFirst: jet.Boolean
public open override /*1*/ /*fake_override*/ fun first(): jet.Boolean
public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
}
}
}
public enum entry SECOND : test.EnumMembers {
private constructor SECOND()
public final override /*1*/ /*fake_override*/ val isFirst: jet.Boolean
public open override /*1*/ /*fake_override*/ fun first(): jet.Boolean
public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
public enum entry SECOND : test.EnumMembers {
private constructor SECOND()
public class object <class-object-for-SECOND> : test.EnumMembers.SECOND {
private constructor <class-object-for-SECOND>()
public final override /*1*/ /*fake_override*/ val isFirst: jet.Boolean
public open override /*1*/ /*fake_override*/ fun first(): jet.Boolean
public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
public class object <class-object-for-SECOND> : test.EnumMembers.SECOND {
private constructor <class-object-for-SECOND>()
public final override /*1*/ /*fake_override*/ val isFirst: jet.Boolean
public open override /*1*/ /*fake_override*/ fun first(): jet.Boolean
public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
}
}
}
}
@@ -9,29 +9,29 @@ public final enum class JavaEnum : jet.Enum<test.JavaEnum> {
private constructor <class-object-for-JavaEnum>()
public final /*synthesized*/ fun valueOf(/*0*/ value: jet.String): test.JavaEnum
public final /*synthesized*/ fun values(): jet.Array<test.JavaEnum>
}
public enum entry ANOTHER : test.JavaEnum {
private constructor ANOTHER()
public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
public enum entry ANOTHER : test.JavaEnum {
private constructor ANOTHER()
public class object <class-object-for-ANOTHER> : test.JavaEnum.ANOTHER {
private constructor <class-object-for-ANOTHER>()
public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
public class object <class-object-for-ANOTHER> : test.JavaEnum.ANOTHER {
private constructor <class-object-for-ANOTHER>()
public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
}
}
}
public enum entry ENTRY : test.JavaEnum {
private constructor ENTRY()
public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
public enum entry ENTRY : test.JavaEnum {
private constructor ENTRY()
public class object <class-object-for-ENTRY> : test.JavaEnum.ENTRY {
private constructor <class-object-for-ENTRY>()
public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
public class object <class-object-for-ENTRY> : test.JavaEnum.ENTRY {
private constructor <class-object-for-ENTRY>()
public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
}
}
}
}
@@ -16,17 +16,17 @@ public trait CustomAnnotation : java.lang.Object {
private constructor <class-object-for-MyEnum>()
public final /*synthesized*/ fun valueOf(/*0*/ value: jet.String): test.CustomAnnotation.MyEnum
public final /*synthesized*/ fun values(): jet.Array<test.CustomAnnotation.MyEnum>
}
public enum entry ONE : test.CustomAnnotation.MyEnum {
private constructor ONE()
public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
public enum entry ONE : test.CustomAnnotation.MyEnum {
private constructor ONE()
public class object <class-object-for-ONE> : test.CustomAnnotation.MyEnum.ONE {
private constructor <class-object-for-ONE>()
public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
public class object <class-object-for-ONE> : test.CustomAnnotation.MyEnum.ONE {
private constructor <class-object-for-ONE>()
public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
}
}
}
}
@@ -9,41 +9,41 @@ public final enum class Enum : jet.Enum<test.Enum> {
private constructor <class-object-for-Enum>()
public final /*synthesized*/ fun valueOf(/*0*/ value: jet.String): test.Enum
public final /*synthesized*/ fun values(): jet.Array<test.Enum>
}
public enum entry A : test.Enum {
private constructor A()
public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
public enum entry A : test.Enum {
private constructor A()
public class object <class-object-for-A> : test.Enum.A {
private constructor <class-object-for-A>()
public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
public class object <class-object-for-A> : test.Enum.A {
private constructor <class-object-for-A>()
public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
}
}
}
public enum entry B : test.Enum {
private constructor B()
public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
public enum entry B : test.Enum {
private constructor B()
public class object <class-object-for-B> : test.Enum.B {
private constructor <class-object-for-B>()
public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
public class object <class-object-for-B> : test.Enum.B {
private constructor <class-object-for-B>()
public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
}
}
}
public enum entry C : test.Enum {
private constructor C()
public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
public enum entry C : test.Enum {
private constructor C()
public class object <class-object-for-C> : test.Enum.C {
private constructor <class-object-for-C>()
public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
public class object <class-object-for-C> : test.Enum.C {
private constructor <class-object-for-C>()
public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
}
}
}
@@ -9,17 +9,17 @@ public final enum class StaticMembersInEnum : jet.Enum<test.StaticMembersInEnum>
private constructor <class-object-for-StaticMembersInEnum>()
public final /*synthesized*/ fun valueOf(/*0*/ value: jet.String): test.StaticMembersInEnum
public final /*synthesized*/ fun values(): jet.Array<test.StaticMembersInEnum>
}
public enum entry ENTRY : test.StaticMembersInEnum {
private constructor ENTRY()
public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
public enum entry ENTRY : test.StaticMembersInEnum {
private constructor ENTRY()
public class object <class-object-for-ENTRY> : test.StaticMembersInEnum.ENTRY {
private constructor <class-object-for-ENTRY>()
public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
public class object <class-object-for-ENTRY> : test.StaticMembersInEnum.ENTRY {
private constructor <class-object-for-ENTRY>()
public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
}
}
}
}