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 c1a77995f08..a768a59d7f4 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java @@ -50,8 +50,7 @@ import static org.jetbrains.jet.lang.diagnostics.Errors.*; import static org.jetbrains.jet.lang.resolve.BindingContext.CONSTRUCTOR; import static org.jetbrains.jet.lang.resolve.DescriptorUtils.getDefaultConstructorVisibility; import static org.jetbrains.jet.lang.resolve.DescriptorUtils.getExpectedThisObjectIfNeeded; -import static org.jetbrains.jet.lang.resolve.ModifiersChecker.resolveModalityFromModifiers; -import static org.jetbrains.jet.lang.resolve.ModifiersChecker.resolveVisibilityFromModifiers; +import static org.jetbrains.jet.lang.resolve.ModifiersChecker.*; import static org.jetbrains.jet.lexer.JetTokens.OVERRIDE_KEYWORD; /** @@ -116,7 +115,7 @@ public class DescriptorResolver { descriptor.setTypeParameterDescriptors(typeParameters); Modality defaultModality = descriptor.getKind() == ClassKind.TRAIT ? Modality.ABSTRACT : Modality.FINAL; descriptor.setModality(resolveModalityFromModifiers(classElement, defaultModality)); - descriptor.setVisibility(resolveVisibilityFromModifiers(classElement)); + descriptor.setVisibility(resolveVisibilityFromModifiers(classElement, getDefaultClassVisibility(descriptor))); trace.record(BindingContext.CLASS, classElement, descriptor); } @@ -804,7 +803,7 @@ public class DescriptorResolver { containingDeclaration, annotationResolver.getResolvedAnnotations(modifierList, trace), Modality.FINAL, - resolveVisibilityFromModifiers(objectDeclaration), + resolveVisibilityFromModifiers(objectDeclaration, getDefaultVisibilityForObjectPropertyDescriptor(classDescriptor)), false, JetPsiUtil.safeName(objectDeclaration.getName()), 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 8428536d29b..6283b06cf97 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ModifiersChecker.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ModifiersChecker.java @@ -29,7 +29,6 @@ import org.jetbrains.jet.lang.psi.JetModifierList; import org.jetbrains.jet.lang.psi.JetModifierListOwner; import org.jetbrains.jet.lexer.JetKeywordToken; import org.jetbrains.jet.lexer.JetToken; -import org.jetbrains.jet.lexer.JetTokens; import java.util.Collection; import java.util.Map; @@ -195,4 +194,21 @@ public class ModifiersChecker { if (modifierList.hasModifier(INTERNAL_KEYWORD)) return Visibilities.INTERNAL; return defaultVisibility; } + + @NotNull + public static Visibility getDefaultClassVisibility(@NotNull ClassDescriptor descriptor) { + ClassKind kind = descriptor.getKind(); + if (kind == ClassKind.ENUM_ENTRY) { + return Visibilities.PRIVATE; + } + return Visibilities.INTERNAL; + } + + @NotNull + public static Visibility getDefaultVisibilityForObjectPropertyDescriptor(@NotNull ClassDescriptor objectClassDescriptor) { + if (objectClassDescriptor.getKind() == ClassKind.ENUM_ENTRY) { + return Visibilities.PUBLIC; + } + return Visibilities.INTERNAL; + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassDescriptor.java index 2d618311c01..a1fe0fc2202 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassDescriptor.java @@ -26,7 +26,10 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.psi.*; -import org.jetbrains.jet.lang.resolve.*; +import org.jetbrains.jet.lang.resolve.AnnotationResolver; +import org.jetbrains.jet.lang.resolve.BindingContext; +import org.jetbrains.jet.lang.resolve.DescriptorResolver; +import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.lazy.data.FilteringClassLikeInfo; import org.jetbrains.jet.lang.resolve.lazy.data.JetClassInfoUtil; import org.jetbrains.jet.lang.resolve.lazy.data.JetClassLikeInfo; @@ -40,8 +43,7 @@ import org.jetbrains.jet.lang.types.TypeUtils; import java.util.*; import static org.jetbrains.jet.lang.resolve.DescriptorUtils.getClassObjectName; -import static org.jetbrains.jet.lang.resolve.ModifiersChecker.resolveModalityFromModifiers; -import static org.jetbrains.jet.lang.resolve.ModifiersChecker.resolveVisibilityFromModifiers; +import static org.jetbrains.jet.lang.resolve.ModifiersChecker.*; /** * @author abreslav @@ -113,7 +115,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements LazyDesc this.modality = resolveModalityFromModifiers(modifierList, defaultModality); } JetModifierList modifierList = classLikeInfo.getModifierList(); - this.visibility = resolveVisibilityFromModifiers(modifierList, Visibilities.INTERNAL); + this.visibility = resolveVisibilityFromModifiers(modifierList, getDefaultClassVisibility(this)); } @Override diff --git a/compiler/testData/lazyResolve/namespaceComparator/enum.txt b/compiler/testData/lazyResolve/namespaceComparator/enum.txt index 565b6d0df1e..c8b83a76a7e 100644 --- a/compiler/testData/lazyResolve/namespaceComparator/enum.txt +++ b/compiler/testData/lazyResolve/namespaceComparator/enum.txt @@ -6,14 +6,14 @@ 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. - internal final val A: test.Test..A - internal final val B: test.Test..B - internal final enum entry test.Test..A : test.Test { + public final val A: test.Test..A + public final val B: test.Test..B + 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 public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int } - internal final enum entry test.Test..B : test.Test { + private final enum entry test.Test..B : test.Test { private final /*constructor*/ fun (): test.Test..B public final override /*1*/ /*fake_override*/ fun name(): jet.String public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int diff --git a/compiler/testData/loadKotlinCustom/enum/enumVisibilitySource.txt b/compiler/testData/loadKotlinCustom/enum/enumVisibilitySource.txt index 4a16371e26f..08e87955c57 100644 --- a/compiler/testData/loadKotlinCustom/enum/enumVisibilitySource.txt +++ b/compiler/testData/loadKotlinCustom/enum/enumVisibilitySource.txt @@ -6,8 +6,8 @@ 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. - internal final val A: test.In..A - internal final enum entry test.In..A : test.In { + public final val A: test.In..A + 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 public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int @@ -22,8 +22,8 @@ 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. - internal final val A: test.Pr..A - internal final enum entry test.Pr..A : test.Pr { + public final val A: test.Pr..A + 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 public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int @@ -38,8 +38,8 @@ 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. - internal final val A: test.Pu..A - internal final enum entry test.Pu..A : test.Pu { + public final val A: test.Pu..A + 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 public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int diff --git a/compiler/testData/loadKotlinCustom/enum/innerEnumExistingClassObjectSource.txt b/compiler/testData/loadKotlinCustom/enum/innerEnumExistingClassObjectSource.txt index 5b02b0508f5..e3337d5c9e9 100644 --- a/compiler/testData/loadKotlinCustom/enum/innerEnumExistingClassObjectSource.txt +++ b/compiler/testData/loadKotlinCustom/enum/innerEnumExistingClassObjectSource.txt @@ -10,8 +10,8 @@ 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. - internal final val ENTRY: test.A..E..ENTRY - internal final enum entry test.A..E..ENTRY : test.A..E { + public final val ENTRY: test.A..E..ENTRY + 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 public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int diff --git a/compiler/testData/loadKotlinCustom/enum/innerEnumSource.txt b/compiler/testData/loadKotlinCustom/enum/innerEnumSource.txt index 13bb16d5e0b..b0a001d4f72 100644 --- a/compiler/testData/loadKotlinCustom/enum/innerEnumSource.txt +++ b/compiler/testData/loadKotlinCustom/enum/innerEnumSource.txt @@ -10,8 +10,8 @@ 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. - internal final val ENTRY: test.A..E..ENTRY - internal final enum entry test.A..E..ENTRY : test.A..E { + public final val ENTRY: test.A..E..ENTRY + 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 public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int diff --git a/compiler/testData/loadKotlinCustom/enum/simpleEnumSource.txt b/compiler/testData/loadKotlinCustom/enum/simpleEnumSource.txt index bc21d396901..b565b951105 100644 --- a/compiler/testData/loadKotlinCustom/enum/simpleEnumSource.txt +++ b/compiler/testData/loadKotlinCustom/enum/simpleEnumSource.txt @@ -6,8 +6,8 @@ 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. - internal final val ENTRY: test.MyEnum..ENTRY - internal final enum entry test.MyEnum..ENTRY : test.MyEnum { + public final val ENTRY: test.MyEnum..ENTRY + 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 public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int diff --git a/compiler/testData/renderer/Enum.kt b/compiler/testData/renderer/Enum.kt index adae5dea9c7..3520a3ea0f6 100644 --- a/compiler/testData/renderer/Enum.kt +++ b/compiler/testData/renderer/Enum.kt @@ -7,5 +7,5 @@ private enum class TheEnum(val rgb : Int) { //package rendererTest defined in root package //private final enum class TheEnum : jet.Enum defined in rendererTest //value-parameter val rgb : jet.Int defined in rendererTest.TheEnum. -//internal final class VAL1 : rendererTest.TheEnum defined in rendererTest.TheEnum. -//internal final val VAL1 : rendererTest.TheEnum..VAL1 defined in rendererTest.TheEnum. \ No newline at end of file +//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