From e8089cc461fd2da6674257ada4208c6b557b662f Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 14 Nov 2013 20:33:57 +0400 Subject: [PATCH] Synthetic class object of enum should always be public #KT-2834 Fixed --- .../DeserializedClassDescriptor.java | 18 ++++----- .../jet/lang/resolve/DescriptorResolver.java | 2 +- .../jet/lang/resolve/ModifiersChecker.java | 5 --- .../lang/resolve/TypeHierarchyResolver.java | 37 ++++++++----------- .../lazy/descriptors/LazyClassDescriptor.java | 8 +++- .../testData/diagnostics/tests/enum/kt2834.kt | 6 +++ .../lazyResolve/namespaceComparator/enum.txt | 2 +- .../parameters/EnumConstructor.txt | 2 +- .../EnumWithGenericConstructorParameter.txt | 2 +- .../EnumWithPrimitiveConstructorParameter.txt | 2 +- .../enum/enumVisibilityBinary.txt | 4 +- .../enum/enumVisibilitySource.txt | 4 +- .../loadKotlinCustom/enum/innerEnumBinary.txt | 2 +- .../innerEnumExistingClassObjectBinary.txt | 2 +- .../innerEnumExistingClassObjectSource.txt | 2 +- .../loadKotlinCustom/enum/innerEnumSource.txt | 2 +- .../enum/simpleEnumBinary.txt | 2 +- .../enum/simpleEnumSource.txt | 2 +- .../checkers/JetDiagnosticsTestGenerated.java | 5 +++ .../java/resolver/JavaClassResolver.java | 2 +- .../jet/lang/resolve/DescriptorUtils.java | 6 ++- 21 files changed, 60 insertions(+), 57 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/enum/kt2834.kt diff --git a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedClassDescriptor.java b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedClassDescriptor.java index 611ed37b8fd..8b34f7d6c2f 100644 --- a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedClassDescriptor.java +++ b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedClassDescriptor.java @@ -25,6 +25,7 @@ import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.descriptors.impl.*; import org.jetbrains.jet.lang.resolve.DescriptorFactory; +import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.OverridingUtil; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.scopes.InnerClassesScopeWrapper; @@ -270,20 +271,15 @@ public class DeserializedClassDescriptor extends AbstractClassDescriptor impleme MutableClassDescriptor classObject = new MutableClassDescriptor(this, getScopeForMemberLookup(), ClassKind.CLASS_OBJECT, false, getClassObjectName(getName())); classObject.setModality(Modality.FINAL); - classObject.setVisibility(getVisibility()); + classObject.setVisibility(DescriptorUtils.getSyntheticClassObjectVisibility()); classObject.setTypeParameterDescriptors(Collections.emptyList()); + classObject.setPrimaryConstructor(DescriptorFactory.createPrimaryConstructorForObject(classObject)); classObject.createTypeConstructor(); - ConstructorDescriptorImpl primaryConstructor = DescriptorFactory.createPrimaryConstructorForObject(classObject); - primaryConstructor.setReturnType(classObject.getDefaultType()); - classObject.setPrimaryConstructor(primaryConstructor); - - JetType defaultType = getDefaultType(); - JetType defaultTypeArray = KotlinBuiltIns.getInstance().getArrayType(defaultType); - classObject.getBuilder().addFunctionDescriptor( - DescriptorFactory.createEnumClassObjectValuesMethod(classObject, defaultTypeArray)); - classObject.getBuilder().addFunctionDescriptor( - DescriptorFactory.createEnumClassObjectValueOfMethod(classObject, defaultType)); + JetType enumType = getDefaultType(); + JetType enumArrayType = KotlinBuiltIns.getInstance().getArrayType(enumType); + classObject.getBuilder().addFunctionDescriptor(DescriptorFactory.createEnumClassObjectValuesMethod(classObject, enumArrayType)); + classObject.getBuilder().addFunctionDescriptor(DescriptorFactory.createEnumClassObjectValueOfMethod(classObject, enumType)); return classObject; } 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 e38efddf3b5..671306e4c99 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java @@ -1285,7 +1285,7 @@ public class DescriptorResolver { classDescriptor, valueParameter.getAnnotations(), resolveModalityFromModifiers(parameter, Modality.FINAL), - resolveVisibilityFromModifiers(parameter), + resolveVisibilityFromModifiers(parameter, Visibilities.INTERNAL), isMutable, name, CallableMemberDescriptor.Kind.DECLARATION diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ModifiersChecker.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ModifiersChecker.java index 7e9e1eab8f7..4c04b2d7f15 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ModifiersChecker.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ModifiersChecker.java @@ -212,11 +212,6 @@ public class ModifiersChecker { return defaultModality; } - @NotNull - public static Visibility resolveVisibilityFromModifiers(@NotNull JetModifierListOwner modifierListOwner) { - return resolveVisibilityFromModifiers(modifierListOwner, Visibilities.INTERNAL); - } - @NotNull public static Visibility resolveVisibilityFromModifiers(@NotNull JetModifierListOwner modifierListOwner, @NotNull Visibility defaultVisibility) { return resolveVisibilityFromModifiers(modifierListOwner.getModifierList(), defaultVisibility); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java index bd566535aef..74eb4afed94 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java @@ -513,32 +513,25 @@ public class TypeHierarchyResolver { } } - private void createClassObjectForEnumClass(JetClass klass, MutableClassDescriptor mutableClassDescriptor) { + private void createClassObjectForEnumClass(@NotNull MutableClassDescriptor mutableClassDescriptor) { if (mutableClassDescriptor.getKind() == ClassKind.ENUM_CLASS) { - MutableClassDescriptor classObjectDescriptor = - createClassObjectDescriptor(mutableClassDescriptor, resolveVisibilityFromModifiers(klass)); - mutableClassDescriptor.getBuilder().setClassObjectDescriptor(classObjectDescriptor); - classObjectDescriptor.getBuilder().addFunctionDescriptor( - DescriptorResolver.createEnumClassObjectValuesMethod(classObjectDescriptor, trace)); - classObjectDescriptor.getBuilder().addFunctionDescriptor( - DescriptorResolver.createEnumClassObjectValueOfMethod(classObjectDescriptor, trace)); + MutableClassDescriptor classObject = createSyntheticClassObject(mutableClassDescriptor); + mutableClassDescriptor.getBuilder().setClassObjectDescriptor(classObject); + classObject.getBuilder().addFunctionDescriptor(DescriptorResolver.createEnumClassObjectValuesMethod(classObject, trace)); + classObject.getBuilder().addFunctionDescriptor(DescriptorResolver.createEnumClassObjectValueOfMethod(classObject, trace)); } } @NotNull - private MutableClassDescriptor createClassObjectDescriptor( - @NotNull ClassDescriptor classDescriptor, - @NotNull Visibility visibility - ) { - MutableClassDescriptor classObjectDescriptor = new MutableClassDescriptor( - classDescriptor, outerScope, ClassKind.CLASS_OBJECT, false, getClassObjectName(classDescriptor.getName())); - classObjectDescriptor.setModality(Modality.FINAL); - classObjectDescriptor.setVisibility(visibility); - classObjectDescriptor.setTypeParameterDescriptors(new ArrayList(0)); - classObjectDescriptor.createTypeConstructor(); - ConstructorDescriptorImpl primaryConstructorForObject = createPrimaryConstructorForObject(null, classObjectDescriptor); - primaryConstructorForObject.setReturnType(classObjectDescriptor.getDefaultType()); - return classObjectDescriptor; + private MutableClassDescriptor createSyntheticClassObject(@NotNull ClassDescriptor classDescriptor) { + MutableClassDescriptor classObject = new MutableClassDescriptor(classDescriptor, outerScope, ClassKind.CLASS_OBJECT, false, + getClassObjectName(classDescriptor.getName())); + classObject.setModality(Modality.FINAL); + classObject.setVisibility(DescriptorUtils.getSyntheticClassObjectVisibility()); + classObject.setTypeParameterDescriptors(Collections.emptyList()); + createPrimaryConstructorForObject(null, classObject); + classObject.createTypeConstructor(); + return classObject; } @NotNull @@ -555,7 +548,7 @@ public class TypeHierarchyResolver { context.getClasses().put(klass, mutableClassDescriptor); trace.record(FQNAME_TO_CLASS_DESCRIPTOR, JetPsiUtil.getFQName(klass), mutableClassDescriptor); - createClassObjectForEnumClass(klass, mutableClassDescriptor); + createClassObjectForEnumClass(mutableClassDescriptor); JetScope classScope = mutableClassDescriptor.getScopeForMemberResolution(); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassDescriptor.java index f9fbd084670..6f472adfe40 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassDescriptor.java @@ -53,6 +53,7 @@ import org.jetbrains.jet.storage.StorageManager; import java.util.*; +import static org.jetbrains.jet.lang.resolve.DescriptorUtils.isEnumClassObject; import static org.jetbrains.jet.lang.resolve.ModifiersChecker.*; import static org.jetbrains.jet.lang.resolve.name.SpecialNames.getClassObjectName; @@ -111,8 +112,9 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements LazyDesc this.typeConstructor = new LazyClassTypeConstructor(); - JetModifierList modifierList = classLikeInfo.getModifierList(); this.kind = classLikeInfo.getClassKind(); + + JetModifierList modifierList = classLikeInfo.getModifierList(); if (kind.isObject()) { this.modality = Modality.FINAL; } @@ -120,7 +122,9 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements LazyDesc Modality defaultModality = kind == ClassKind.TRAIT ? Modality.ABSTRACT : Modality.FINAL; this.modality = resolveModalityFromModifiers(modifierList, defaultModality); } - this.visibility = resolveVisibilityFromModifiers(modifierList, getDefaultClassVisibility(this)); + this.visibility = isEnumClassObject(this) + ? DescriptorUtils.getSyntheticClassObjectVisibility() + : resolveVisibilityFromModifiers(modifierList, getDefaultClassVisibility(this)); this.isInner = isInnerClass(modifierList); StorageManager storageManager = resolveSession.getStorageManager(); diff --git a/compiler/testData/diagnostics/tests/enum/kt2834.kt b/compiler/testData/diagnostics/tests/enum/kt2834.kt new file mode 100644 index 00000000000..da51cbdc694 --- /dev/null +++ b/compiler/testData/diagnostics/tests/enum/kt2834.kt @@ -0,0 +1,6 @@ +private enum class MethodKind { + INSTANCE + STATIC +} + +fun MethodKind.hasThis() = this == MethodKind.INSTANCE diff --git a/compiler/testData/lazyResolve/namespaceComparator/enum.txt b/compiler/testData/lazyResolve/namespaceComparator/enum.txt index 33d20ffb696..5b1516c9d40 100644 --- a/compiler/testData/lazyResolve/namespaceComparator/enum.txt +++ b/compiler/testData/lazyResolve/namespaceComparator/enum.txt @@ -5,7 +5,7 @@ internal final enum class Test : jet.Enum { public final override /*1*/ /*fake_override*/ fun name(): jet.String public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - internal class object { + public class object { /*primary*/ private constructor () public final val A: test.Test public final val B: test.Test diff --git a/compiler/testData/loadKotlin/annotations/parameters/EnumConstructor.txt b/compiler/testData/loadKotlin/annotations/parameters/EnumConstructor.txt index 704eb81c7a3..7e784c6c06d 100644 --- a/compiler/testData/loadKotlin/annotations/parameters/EnumConstructor.txt +++ b/compiler/testData/loadKotlin/annotations/parameters/EnumConstructor.txt @@ -17,7 +17,7 @@ internal final enum class E : jet.Enum { public final override /*1*/ /*fake_override*/ fun name(): jet.String public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - internal class object { + public class object { /*primary*/ private constructor () public final /*synthesized*/ fun valueOf(/*0*/ value: jet.String): test.E public final /*synthesized*/ fun values(): jet.Array diff --git a/compiler/testData/loadKotlin/class/EnumWithGenericConstructorParameter.txt b/compiler/testData/loadKotlin/class/EnumWithGenericConstructorParameter.txt index 667079e2628..1c20ee6c133 100644 --- a/compiler/testData/loadKotlin/class/EnumWithGenericConstructorParameter.txt +++ b/compiler/testData/loadKotlin/class/EnumWithGenericConstructorParameter.txt @@ -5,7 +5,7 @@ internal final enum class EnumWithGenericConstructorParameter : jet.Enum { + public class object { /*primary*/ private constructor () public final /*synthesized*/ fun valueOf(/*0*/ value: jet.String): test.EnumWithGenericConstructorParameter public final /*synthesized*/ fun values(): jet.Array diff --git a/compiler/testData/loadKotlin/class/EnumWithPrimitiveConstructorParameter.txt b/compiler/testData/loadKotlin/class/EnumWithPrimitiveConstructorParameter.txt index 054a368bbca..2904a2d7216 100644 --- a/compiler/testData/loadKotlin/class/EnumWithPrimitiveConstructorParameter.txt +++ b/compiler/testData/loadKotlin/class/EnumWithPrimitiveConstructorParameter.txt @@ -5,7 +5,7 @@ internal final enum class EnumWithPrimitiveConstructorParameter : jet.Enum { + public class object { /*primary*/ private constructor () public final /*synthesized*/ fun valueOf(/*0*/ value: jet.String): test.EnumWithPrimitiveConstructorParameter public final /*synthesized*/ fun values(): jet.Array diff --git a/compiler/testData/loadKotlinCustom/enum/enumVisibilityBinary.txt b/compiler/testData/loadKotlinCustom/enum/enumVisibilityBinary.txt index a18552e47a4..f1b320c34ce 100644 --- a/compiler/testData/loadKotlinCustom/enum/enumVisibilityBinary.txt +++ b/compiler/testData/loadKotlinCustom/enum/enumVisibilityBinary.txt @@ -5,7 +5,7 @@ internal final enum class In : jet.Enum { public final override /*1*/ /*fake_override*/ fun name(): jet.String public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - internal class object { + public class object { private constructor () public final val A: test.In public final /*synthesized*/ fun valueOf(/*0*/ value: jet.String): test.In @@ -18,7 +18,7 @@ private final enum class Pr : jet.Enum { public final override /*1*/ /*fake_override*/ fun name(): jet.String public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - private class object { + public class object { private constructor () public final val A: test.Pr public final /*synthesized*/ fun valueOf(/*0*/ value: jet.String): test.Pr diff --git a/compiler/testData/loadKotlinCustom/enum/enumVisibilitySource.txt b/compiler/testData/loadKotlinCustom/enum/enumVisibilitySource.txt index c4806647b10..e141b6994a7 100644 --- a/compiler/testData/loadKotlinCustom/enum/enumVisibilitySource.txt +++ b/compiler/testData/loadKotlinCustom/enum/enumVisibilitySource.txt @@ -5,7 +5,7 @@ internal final enum class In : jet.Enum { public final override /*1*/ /*fake_override*/ fun name(): jet.String public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - internal class object { + public class object { /*primary*/ private constructor () public final val A: test.In public final /*synthesized*/ fun valueOf(/*0*/ value: jet.String): test.In @@ -24,7 +24,7 @@ private final enum class Pr : jet.Enum { public final override /*1*/ /*fake_override*/ fun name(): jet.String public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - private class object { + public class object { /*primary*/ private constructor () public final val A: test.Pr public final /*synthesized*/ fun valueOf(/*0*/ value: jet.String): test.Pr diff --git a/compiler/testData/loadKotlinCustom/enum/innerEnumBinary.txt b/compiler/testData/loadKotlinCustom/enum/innerEnumBinary.txt index 2eaba6984ee..87a2ee27cb5 100644 --- a/compiler/testData/loadKotlinCustom/enum/innerEnumBinary.txt +++ b/compiler/testData/loadKotlinCustom/enum/innerEnumBinary.txt @@ -8,7 +8,7 @@ internal final class A { public final override /*1*/ /*fake_override*/ fun name(): jet.String public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - internal class object { + public class object { private constructor () public final val ENTRY: test.A.E public final /*synthesized*/ fun valueOf(/*0*/ value: jet.String): test.A.E diff --git a/compiler/testData/loadKotlinCustom/enum/innerEnumExistingClassObjectBinary.txt b/compiler/testData/loadKotlinCustom/enum/innerEnumExistingClassObjectBinary.txt index 66f49dc7e37..609e08678cc 100644 --- a/compiler/testData/loadKotlinCustom/enum/innerEnumExistingClassObjectBinary.txt +++ b/compiler/testData/loadKotlinCustom/enum/innerEnumExistingClassObjectBinary.txt @@ -12,7 +12,7 @@ internal final class A { public final override /*1*/ /*fake_override*/ fun name(): jet.String public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - internal class object { + public class object { private constructor () public final val ENTRY: test.A.E public final /*synthesized*/ fun valueOf(/*0*/ value: jet.String): test.A.E diff --git a/compiler/testData/loadKotlinCustom/enum/innerEnumExistingClassObjectSource.txt b/compiler/testData/loadKotlinCustom/enum/innerEnumExistingClassObjectSource.txt index 9f0f18b3d21..09bf5247f4f 100644 --- a/compiler/testData/loadKotlinCustom/enum/innerEnumExistingClassObjectSource.txt +++ b/compiler/testData/loadKotlinCustom/enum/innerEnumExistingClassObjectSource.txt @@ -12,7 +12,7 @@ internal final class A { public final override /*1*/ /*fake_override*/ fun name(): jet.String public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - internal class object { + public class object { /*primary*/ private constructor () public final val ENTRY: test.A.E public final /*synthesized*/ fun valueOf(/*0*/ value: jet.String): test.A.E diff --git a/compiler/testData/loadKotlinCustom/enum/innerEnumSource.txt b/compiler/testData/loadKotlinCustom/enum/innerEnumSource.txt index 201832d7903..cde9a960dd8 100644 --- a/compiler/testData/loadKotlinCustom/enum/innerEnumSource.txt +++ b/compiler/testData/loadKotlinCustom/enum/innerEnumSource.txt @@ -8,7 +8,7 @@ internal final class A { public final override /*1*/ /*fake_override*/ fun name(): jet.String public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - internal class object { + public class object { /*primary*/ private constructor () public final val ENTRY: test.A.E public final /*synthesized*/ fun valueOf(/*0*/ value: jet.String): test.A.E diff --git a/compiler/testData/loadKotlinCustom/enum/simpleEnumBinary.txt b/compiler/testData/loadKotlinCustom/enum/simpleEnumBinary.txt index 80d9fa7e5df..1e905be393d 100644 --- a/compiler/testData/loadKotlinCustom/enum/simpleEnumBinary.txt +++ b/compiler/testData/loadKotlinCustom/enum/simpleEnumBinary.txt @@ -5,7 +5,7 @@ internal final enum class MyEnum : jet.Enum { public final override /*1*/ /*fake_override*/ fun name(): jet.String public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - internal class object { + public class object { private constructor () public final val ENTRY: test.MyEnum public final /*synthesized*/ fun valueOf(/*0*/ value: jet.String): test.MyEnum diff --git a/compiler/testData/loadKotlinCustom/enum/simpleEnumSource.txt b/compiler/testData/loadKotlinCustom/enum/simpleEnumSource.txt index e0b765e63ce..1171177e9e8 100644 --- a/compiler/testData/loadKotlinCustom/enum/simpleEnumSource.txt +++ b/compiler/testData/loadKotlinCustom/enum/simpleEnumSource.txt @@ -5,7 +5,7 @@ internal final enum class MyEnum : jet.Enum { public final override /*1*/ /*fake_override*/ fun name(): jet.String public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int - internal class object { + public class object { /*primary*/ private constructor () public final val ENTRY: test.MyEnum public final /*synthesized*/ fun valueOf(/*0*/ value: jet.String): test.MyEnum diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index beff12c40ba..9cf96836b25 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -2587,6 +2587,11 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage doTest("compiler/testData/diagnostics/tests/enum/javaEnumWithProperty.kt"); } + @TestMetadata("kt2834.kt") + public void testKt2834() throws Exception { + doTest("compiler/testData/diagnostics/tests/enum/kt2834.kt"); + } + @TestMetadata("compiler/testData/diagnostics/tests/enum/inner") public static class Inner extends AbstractDiagnosticsTestWithEagerResolve { public void testAllFilesPresentInInner() throws Exception { diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaClassResolver.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaClassResolver.java index 82e01dd0343..43dfedfa178 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaClassResolver.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaClassResolver.java @@ -428,7 +428,7 @@ public final class JavaClassResolver { JavaEnumClassObjectDescriptor classObject = new JavaEnumClassObjectDescriptor(enumClass); classObject.setModality(Modality.FINAL); - classObject.setVisibility(enumClass.getVisibility()); + classObject.setVisibility(DescriptorUtils.getSyntheticClassObjectVisibility()); classObject.setTypeParameterDescriptors(Collections.emptyList()); classObject.createTypeConstructor(); diff --git a/core/descriptors/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java b/core/descriptors/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java index 292d9facb5e..20d5a6aa559 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java @@ -28,7 +28,6 @@ import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe; import org.jetbrains.jet.lang.resolve.name.Name; -import org.jetbrains.jet.lang.resolve.name.SpecialNames; import org.jetbrains.jet.lang.resolve.scopes.FilteringScope; import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.types.*; @@ -328,6 +327,11 @@ public class DescriptorUtils { return Visibilities.PUBLIC; } + @NotNull + public static Visibility getSyntheticClassObjectVisibility() { + return Visibilities.PUBLIC; + } + @NotNull public static List getSortedValueArguments( @NotNull AnnotationDescriptor descriptor,