Make enum entry classes have private visibility and properties have public vibility

Tests for backend are broken
This commit is contained in:
Pavel V. Talanov
2012-11-16 18:52:34 +04:00
parent 9c7cb64a30
commit c42380dc0b
9 changed files with 44 additions and 27 deletions
@@ -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.BindingContext.CONSTRUCTOR;
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.getDefaultConstructorVisibility; 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.DescriptorUtils.getExpectedThisObjectIfNeeded;
import static org.jetbrains.jet.lang.resolve.ModifiersChecker.resolveModalityFromModifiers; import static org.jetbrains.jet.lang.resolve.ModifiersChecker.*;
import static org.jetbrains.jet.lang.resolve.ModifiersChecker.resolveVisibilityFromModifiers;
import static org.jetbrains.jet.lexer.JetTokens.OVERRIDE_KEYWORD; import static org.jetbrains.jet.lexer.JetTokens.OVERRIDE_KEYWORD;
/** /**
@@ -116,7 +115,7 @@ public class DescriptorResolver {
descriptor.setTypeParameterDescriptors(typeParameters); descriptor.setTypeParameterDescriptors(typeParameters);
Modality defaultModality = descriptor.getKind() == ClassKind.TRAIT ? Modality.ABSTRACT : Modality.FINAL; Modality defaultModality = descriptor.getKind() == ClassKind.TRAIT ? Modality.ABSTRACT : Modality.FINAL;
descriptor.setModality(resolveModalityFromModifiers(classElement, defaultModality)); descriptor.setModality(resolveModalityFromModifiers(classElement, defaultModality));
descriptor.setVisibility(resolveVisibilityFromModifiers(classElement)); descriptor.setVisibility(resolveVisibilityFromModifiers(classElement, getDefaultClassVisibility(descriptor)));
trace.record(BindingContext.CLASS, classElement, descriptor); trace.record(BindingContext.CLASS, classElement, descriptor);
} }
@@ -804,7 +803,7 @@ public class DescriptorResolver {
containingDeclaration, containingDeclaration,
annotationResolver.getResolvedAnnotations(modifierList, trace), annotationResolver.getResolvedAnnotations(modifierList, trace),
Modality.FINAL, Modality.FINAL,
resolveVisibilityFromModifiers(objectDeclaration), resolveVisibilityFromModifiers(objectDeclaration, getDefaultVisibilityForObjectPropertyDescriptor(classDescriptor)),
false, false,
JetPsiUtil.safeName(objectDeclaration.getName()), JetPsiUtil.safeName(objectDeclaration.getName()),
CallableMemberDescriptor.Kind.DECLARATION CallableMemberDescriptor.Kind.DECLARATION
@@ -29,7 +29,6 @@ import org.jetbrains.jet.lang.psi.JetModifierList;
import org.jetbrains.jet.lang.psi.JetModifierListOwner; import org.jetbrains.jet.lang.psi.JetModifierListOwner;
import org.jetbrains.jet.lexer.JetKeywordToken; import org.jetbrains.jet.lexer.JetKeywordToken;
import org.jetbrains.jet.lexer.JetToken; import org.jetbrains.jet.lexer.JetToken;
import org.jetbrains.jet.lexer.JetTokens;
import java.util.Collection; import java.util.Collection;
import java.util.Map; import java.util.Map;
@@ -195,4 +194,21 @@ public class ModifiersChecker {
if (modifierList.hasModifier(INTERNAL_KEYWORD)) return Visibilities.INTERNAL; if (modifierList.hasModifier(INTERNAL_KEYWORD)) return Visibilities.INTERNAL;
return defaultVisibility; 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;
}
} }
@@ -26,7 +26,10 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
import org.jetbrains.jet.lang.psi.*; 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.FilteringClassLikeInfo;
import org.jetbrains.jet.lang.resolve.lazy.data.JetClassInfoUtil; import org.jetbrains.jet.lang.resolve.lazy.data.JetClassInfoUtil;
import org.jetbrains.jet.lang.resolve.lazy.data.JetClassLikeInfo; import org.jetbrains.jet.lang.resolve.lazy.data.JetClassLikeInfo;
@@ -40,8 +43,7 @@ import org.jetbrains.jet.lang.types.TypeUtils;
import java.util.*; import java.util.*;
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.getClassObjectName; 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.*;
import static org.jetbrains.jet.lang.resolve.ModifiersChecker.resolveVisibilityFromModifiers;
/** /**
* @author abreslav * @author abreslav
@@ -113,7 +115,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements LazyDesc
this.modality = resolveModalityFromModifiers(modifierList, defaultModality); this.modality = resolveModalityFromModifiers(modifierList, defaultModality);
} }
JetModifierList modifierList = classLikeInfo.getModifierList(); JetModifierList modifierList = classLikeInfo.getModifierList();
this.visibility = resolveVisibilityFromModifiers(modifierList, Visibilities.INTERNAL); this.visibility = resolveVisibilityFromModifiers(modifierList, getDefaultClassVisibility(this));
} }
@Override @Override
@@ -6,14 +6,14 @@ internal final enum class test.Test : jet.Enum<test.Test> {
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
internal final class object test.Test.<class-object-for-Test> { internal final class object test.Test.<class-object-for-Test> {
private final /*constructor*/ fun <init>(): test.Test.<class-object-for-Test> private final /*constructor*/ fun <init>(): test.Test.<class-object-for-Test>
internal final val A: test.Test.<class-object-for-Test>.A public final val A: test.Test.<class-object-for-Test>.A
internal final val B: test.Test.<class-object-for-Test>.B public final val B: test.Test.<class-object-for-Test>.B
internal final enum entry test.Test.<class-object-for-Test>.A : 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 private final /*constructor*/ fun <init>(): test.Test.<class-object-for-Test>.A
public final override /*1*/ /*fake_override*/ fun name(): jet.String public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
} }
internal final enum entry test.Test.<class-object-for-Test>.B : test.Test { private final enum entry test.Test.<class-object-for-Test>.B : test.Test {
private final /*constructor*/ fun <init>(): test.Test.<class-object-for-Test>.B private final /*constructor*/ fun <init>(): test.Test.<class-object-for-Test>.B
public final override /*1*/ /*fake_override*/ fun name(): jet.String public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
@@ -6,8 +6,8 @@ internal final enum class test.In : jet.Enum<test.In> {
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
internal final class object test.In.<class-object-for-In> { internal final class object test.In.<class-object-for-In> {
private final /*constructor*/ fun <init>(): test.In.<class-object-for-In> private final /*constructor*/ fun <init>(): test.In.<class-object-for-In>
internal final val A: test.In.<class-object-for-In>.A public final val A: test.In.<class-object-for-In>.A
internal final enum entry test.In.<class-object-for-In>.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 private final /*constructor*/ fun <init>(): test.In.<class-object-for-In>.A
public final override /*1*/ /*fake_override*/ fun name(): jet.String public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
@@ -22,8 +22,8 @@ private final enum class test.Pr : jet.Enum<test.Pr> {
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
private final class object test.Pr.<class-object-for-Pr> { private final class object test.Pr.<class-object-for-Pr> {
private final /*constructor*/ fun <init>(): test.Pr.<class-object-for-Pr> private final /*constructor*/ fun <init>(): test.Pr.<class-object-for-Pr>
internal final val A: test.Pr.<class-object-for-Pr>.A public final val A: test.Pr.<class-object-for-Pr>.A
internal final enum entry test.Pr.<class-object-for-Pr>.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 private final /*constructor*/ fun <init>(): test.Pr.<class-object-for-Pr>.A
public final override /*1*/ /*fake_override*/ fun name(): jet.String public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
@@ -38,8 +38,8 @@ public final enum class test.Pu : jet.Enum<test.Pu> {
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
public final class object test.Pu.<class-object-for-Pu> { public final class object test.Pu.<class-object-for-Pu> {
private final /*constructor*/ fun <init>(): test.Pu.<class-object-for-Pu> private final /*constructor*/ fun <init>(): test.Pu.<class-object-for-Pu>
internal final val A: test.Pu.<class-object-for-Pu>.A public final val A: test.Pu.<class-object-for-Pu>.A
internal final enum entry test.Pu.<class-object-for-Pu>.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 private final /*constructor*/ fun <init>(): test.Pu.<class-object-for-Pu>.A
public final override /*1*/ /*fake_override*/ fun name(): jet.String public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
@@ -10,8 +10,8 @@ internal final class test.A : jet.Any {
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int 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> { 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> private final /*constructor*/ fun <init>(): test.A.<class-object-for-A>.E.<class-object-for-E>
internal 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.<class-object-for-E>.ENTRY
internal final enum entry test.A.<class-object-for-A>.E.<class-object-for-E>.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 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 public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
@@ -10,8 +10,8 @@ internal final class test.A : jet.Any {
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int 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> { 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> private final /*constructor*/ fun <init>(): test.A.<class-object-for-A>.E.<class-object-for-E>
internal 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.<class-object-for-E>.ENTRY
internal final enum entry test.A.<class-object-for-A>.E.<class-object-for-E>.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 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 public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
@@ -6,8 +6,8 @@ internal final enum class test.MyEnum : jet.Enum<test.MyEnum> {
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
internal final class object test.MyEnum.<class-object-for-MyEnum> { internal final class object test.MyEnum.<class-object-for-MyEnum> {
private final /*constructor*/ fun <init>(): test.MyEnum.<class-object-for-MyEnum> private final /*constructor*/ fun <init>(): test.MyEnum.<class-object-for-MyEnum>
internal final val ENTRY: test.MyEnum.<class-object-for-MyEnum>.ENTRY public final val ENTRY: test.MyEnum.<class-object-for-MyEnum>.ENTRY
internal final enum entry test.MyEnum.<class-object-for-MyEnum>.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 private final /*constructor*/ fun <init>(): test.MyEnum.<class-object-for-MyEnum>.ENTRY
public final override /*1*/ /*fake_override*/ fun name(): jet.String public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
+2 -2
View File
@@ -7,5 +7,5 @@ private enum class TheEnum(val rgb : Int) {
//package rendererTest defined in root package //package rendererTest defined in root package
//private final enum class TheEnum : jet.Enum<rendererTest.TheEnum> defined in rendererTest //private final enum class TheEnum : jet.Enum<rendererTest.TheEnum> defined in rendererTest
//value-parameter val rgb : jet.Int defined in rendererTest.TheEnum.<init> //value-parameter val rgb : jet.Int defined in rendererTest.TheEnum.<init>
//internal final class VAL1 : rendererTest.TheEnum defined in rendererTest.TheEnum.<class-object-for-TheEnum> //private final class VAL1 : rendererTest.TheEnum defined in rendererTest.TheEnum.<class-object-for-TheEnum>
//internal final val VAL1 : rendererTest.TheEnum.<class-object-for-TheEnum>.VAL1 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>