Change type of enum entry property

Now such properties have types corresponding to enum class not it's own enum entry classes
This commit is contained in:
Pavel V. Talanov
2012-11-19 15:37:01 +04:00
parent c42380dc0b
commit c39a4dc57a
7 changed files with 22 additions and 10 deletions
@@ -808,7 +808,7 @@ public class DescriptorResolver {
JetPsiUtil.safeName(objectDeclaration.getName()),
CallableMemberDescriptor.Kind.DECLARATION
);
propertyDescriptor.setType(classDescriptor.getDefaultType(), Collections.<TypeParameterDescriptor>emptyList(),
propertyDescriptor.setType(getTypeForObjectDeclaration(classDescriptor), Collections.<TypeParameterDescriptor>emptyList(),
getExpectedThisObjectIfNeeded(containingDeclaration), NO_RECEIVER_PARAMETER);
propertyDescriptor.initialize(createDefaultGetter(propertyDescriptor), null);
trace.record(BindingContext.OBJECT_DECLARATION_CLASS, propertyDescriptor, classDescriptor);
@@ -819,6 +819,18 @@ public class DescriptorResolver {
return propertyDescriptor;
}
@NotNull
private static JetType getTypeForObjectDeclaration(@NotNull ClassDescriptor objectClassDescriptor) {
if (objectClassDescriptor.getKind() == ClassKind.ENUM_ENTRY) {
DeclarationDescriptor containingDeclaration = objectClassDescriptor.getContainingDeclaration().getContainingDeclaration();
assert containingDeclaration instanceof ClassDescriptor;
ClassDescriptor enumClass = (ClassDescriptor) containingDeclaration;
assert enumClass.getKind() == ClassKind.ENUM_CLASS;
return enumClass.getDefaultType();
}
return objectClassDescriptor.getDefaultType();
}
@NotNull
private VariableDescriptor resolveObjectDeclarationAsLocalVariable(
@NotNull DeclarationDescriptor containingDeclaration,
@@ -6,8 +6,8 @@ internal final enum class test.Test : jet.Enum<test.Test> {
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
internal final class object test.Test.<class-object-for-Test> {
private final /*constructor*/ fun <init>(): test.Test.<class-object-for-Test>
public final val A: test.Test.<class-object-for-Test>.A
public final val B: test.Test.<class-object-for-Test>.B
public final val A: test.Test
public final val B: test.Test
private final enum entry test.Test.<class-object-for-Test>.A : test.Test {
private final /*constructor*/ fun <init>(): test.Test.<class-object-for-Test>.A
public final override /*1*/ /*fake_override*/ fun name(): jet.String
@@ -6,7 +6,7 @@ internal final enum class test.In : jet.Enum<test.In> {
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
internal final class object test.In.<class-object-for-In> {
private final /*constructor*/ fun <init>(): test.In.<class-object-for-In>
public final val A: test.In.<class-object-for-In>.A
public final val A: test.In
private final enum entry test.In.<class-object-for-In>.A : test.In {
private final /*constructor*/ fun <init>(): test.In.<class-object-for-In>.A
public final override /*1*/ /*fake_override*/ fun name(): jet.String
@@ -22,7 +22,7 @@ private final enum class test.Pr : jet.Enum<test.Pr> {
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
private final class object test.Pr.<class-object-for-Pr> {
private final /*constructor*/ fun <init>(): test.Pr.<class-object-for-Pr>
public final val A: test.Pr.<class-object-for-Pr>.A
public final val A: test.Pr
private final enum entry test.Pr.<class-object-for-Pr>.A : test.Pr {
private final /*constructor*/ fun <init>(): test.Pr.<class-object-for-Pr>.A
public final override /*1*/ /*fake_override*/ fun name(): jet.String
@@ -38,7 +38,7 @@ public final enum class test.Pu : jet.Enum<test.Pu> {
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
public final class object test.Pu.<class-object-for-Pu> {
private final /*constructor*/ fun <init>(): test.Pu.<class-object-for-Pu>
public final val A: test.Pu.<class-object-for-Pu>.A
public final val A: test.Pu
private final enum entry test.Pu.<class-object-for-Pu>.A : test.Pu {
private final /*constructor*/ fun <init>(): test.Pu.<class-object-for-Pu>.A
public final override /*1*/ /*fake_override*/ fun name(): jet.String
@@ -10,7 +10,7 @@ internal final class test.A : jet.Any {
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
internal final class object test.A.<class-object-for-A>.E.<class-object-for-E> {
private final /*constructor*/ fun <init>(): test.A.<class-object-for-A>.E.<class-object-for-E>
public final val ENTRY: test.A.<class-object-for-A>.E.<class-object-for-E>.ENTRY
public final val ENTRY: test.A.<class-object-for-A>.E
private final enum entry test.A.<class-object-for-A>.E.<class-object-for-E>.ENTRY : test.A.<class-object-for-A>.E {
private final /*constructor*/ fun <init>(): test.A.<class-object-for-A>.E.<class-object-for-E>.ENTRY
public final override /*1*/ /*fake_override*/ fun name(): jet.String
@@ -10,7 +10,7 @@ internal final class test.A : jet.Any {
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
internal final class object test.A.<class-object-for-A>.E.<class-object-for-E> {
private final /*constructor*/ fun <init>(): test.A.<class-object-for-A>.E.<class-object-for-E>
public final val ENTRY: test.A.<class-object-for-A>.E.<class-object-for-E>.ENTRY
public final val ENTRY: test.A.<class-object-for-A>.E
private final enum entry test.A.<class-object-for-A>.E.<class-object-for-E>.ENTRY : test.A.<class-object-for-A>.E {
private final /*constructor*/ fun <init>(): test.A.<class-object-for-A>.E.<class-object-for-E>.ENTRY
public final override /*1*/ /*fake_override*/ fun name(): jet.String
@@ -6,7 +6,7 @@ internal final enum class test.MyEnum : jet.Enum<test.MyEnum> {
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
internal final class object test.MyEnum.<class-object-for-MyEnum> {
private final /*constructor*/ fun <init>(): test.MyEnum.<class-object-for-MyEnum>
public final val ENTRY: test.MyEnum.<class-object-for-MyEnum>.ENTRY
public final val ENTRY: test.MyEnum
private final enum entry test.MyEnum.<class-object-for-MyEnum>.ENTRY : test.MyEnum {
private final /*constructor*/ fun <init>(): test.MyEnum.<class-object-for-MyEnum>.ENTRY
public final override /*1*/ /*fake_override*/ fun name(): jet.String
+1 -1
View File
@@ -8,4 +8,4 @@ private enum class TheEnum(val rgb : Int) {
//private final enum class TheEnum : jet.Enum<rendererTest.TheEnum> defined in rendererTest
//value-parameter val rgb : jet.Int defined in rendererTest.TheEnum.<init>
//private final class VAL1 : rendererTest.TheEnum defined in rendererTest.TheEnum.<class-object-for-TheEnum>
//public final val VAL1 : rendererTest.TheEnum.<class-object-for-TheEnum>.VAL1 defined in rendererTest.TheEnum.<class-object-for-TheEnum>
//public final val VAL1 : rendererTest.TheEnum defined in rendererTest.TheEnum.<class-object-for-TheEnum>