diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java index a768a59d7f4..78aaac2b462 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java @@ -808,7 +808,7 @@ public class DescriptorResolver { JetPsiUtil.safeName(objectDeclaration.getName()), CallableMemberDescriptor.Kind.DECLARATION ); - propertyDescriptor.setType(classDescriptor.getDefaultType(), Collections.emptyList(), + propertyDescriptor.setType(getTypeForObjectDeclaration(classDescriptor), Collections.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, diff --git a/compiler/testData/lazyResolve/namespaceComparator/enum.txt b/compiler/testData/lazyResolve/namespaceComparator/enum.txt index c8b83a76a7e..eafc6242434 100644 --- a/compiler/testData/lazyResolve/namespaceComparator/enum.txt +++ b/compiler/testData/lazyResolve/namespaceComparator/enum.txt @@ -6,8 +6,8 @@ internal final enum class test.Test : jet.Enum { public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int internal final class object test.Test. { private final /*constructor*/ fun (): test.Test. - public final val A: test.Test..A - public final val B: test.Test..B + public final val A: test.Test + public final val B: test.Test private final enum entry test.Test..A : test.Test { private final /*constructor*/ fun (): test.Test..A public final override /*1*/ /*fake_override*/ fun name(): jet.String diff --git a/compiler/testData/loadKotlinCustom/enum/enumVisibilitySource.txt b/compiler/testData/loadKotlinCustom/enum/enumVisibilitySource.txt index 08e87955c57..81b4543d464 100644 --- a/compiler/testData/loadKotlinCustom/enum/enumVisibilitySource.txt +++ b/compiler/testData/loadKotlinCustom/enum/enumVisibilitySource.txt @@ -6,7 +6,7 @@ internal final enum class test.In : jet.Enum { public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int internal final class object test.In. { private final /*constructor*/ fun (): test.In. - public final val A: test.In..A + public final val A: test.In private final enum entry test.In..A : test.In { private final /*constructor*/ fun (): test.In..A public final override /*1*/ /*fake_override*/ fun name(): jet.String @@ -22,7 +22,7 @@ private final enum class test.Pr : jet.Enum { public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int private final class object test.Pr. { private final /*constructor*/ fun (): test.Pr. - public final val A: test.Pr..A + public final val A: test.Pr private final enum entry test.Pr..A : test.Pr { private final /*constructor*/ fun (): test.Pr..A public final override /*1*/ /*fake_override*/ fun name(): jet.String @@ -38,7 +38,7 @@ public final enum class test.Pu : jet.Enum { public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int public final class object test.Pu. { private final /*constructor*/ fun (): test.Pu. - public final val A: test.Pu..A + public final val A: test.Pu private final enum entry test.Pu..A : test.Pu { private final /*constructor*/ fun (): test.Pu..A public final override /*1*/ /*fake_override*/ fun name(): jet.String diff --git a/compiler/testData/loadKotlinCustom/enum/innerEnumExistingClassObjectSource.txt b/compiler/testData/loadKotlinCustom/enum/innerEnumExistingClassObjectSource.txt index e3337d5c9e9..302c0e875e7 100644 --- a/compiler/testData/loadKotlinCustom/enum/innerEnumExistingClassObjectSource.txt +++ b/compiler/testData/loadKotlinCustom/enum/innerEnumExistingClassObjectSource.txt @@ -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..E. { private final /*constructor*/ fun (): test.A..E. - public final val ENTRY: test.A..E..ENTRY + public final val ENTRY: test.A..E private final enum entry test.A..E..ENTRY : test.A..E { private final /*constructor*/ fun (): test.A..E..ENTRY public final override /*1*/ /*fake_override*/ fun name(): jet.String diff --git a/compiler/testData/loadKotlinCustom/enum/innerEnumSource.txt b/compiler/testData/loadKotlinCustom/enum/innerEnumSource.txt index b0a001d4f72..07d028be7c6 100644 --- a/compiler/testData/loadKotlinCustom/enum/innerEnumSource.txt +++ b/compiler/testData/loadKotlinCustom/enum/innerEnumSource.txt @@ -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..E. { private final /*constructor*/ fun (): test.A..E. - public final val ENTRY: test.A..E..ENTRY + public final val ENTRY: test.A..E private final enum entry test.A..E..ENTRY : test.A..E { private final /*constructor*/ fun (): test.A..E..ENTRY public final override /*1*/ /*fake_override*/ fun name(): jet.String diff --git a/compiler/testData/loadKotlinCustom/enum/simpleEnumSource.txt b/compiler/testData/loadKotlinCustom/enum/simpleEnumSource.txt index b565b951105..ab7a96f9b17 100644 --- a/compiler/testData/loadKotlinCustom/enum/simpleEnumSource.txt +++ b/compiler/testData/loadKotlinCustom/enum/simpleEnumSource.txt @@ -6,7 +6,7 @@ internal final enum class test.MyEnum : jet.Enum { public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int internal final class object test.MyEnum. { private final /*constructor*/ fun (): test.MyEnum. - public final val ENTRY: test.MyEnum..ENTRY + public final val ENTRY: test.MyEnum private final enum entry test.MyEnum..ENTRY : test.MyEnum { private final /*constructor*/ fun (): test.MyEnum..ENTRY public final override /*1*/ /*fake_override*/ fun name(): jet.String diff --git a/compiler/testData/renderer/Enum.kt b/compiler/testData/renderer/Enum.kt index 3520a3ea0f6..5c85dd1ce41 100644 --- a/compiler/testData/renderer/Enum.kt +++ b/compiler/testData/renderer/Enum.kt @@ -8,4 +8,4 @@ private enum class TheEnum(val rgb : Int) { //private final enum class TheEnum : jet.Enum defined in rendererTest //value-parameter val rgb : jet.Int defined in rendererTest.TheEnum. //private final class VAL1 : rendererTest.TheEnum defined in rendererTest.TheEnum. -//public final val VAL1 : rendererTest.TheEnum..VAL1 defined in rendererTest.TheEnum. \ No newline at end of file +//public final val VAL1 : rendererTest.TheEnum defined in rendererTest.TheEnum. \ No newline at end of file