Update enum entry resolution strategy in lazy resolve

This commit is contained in:
Alexander Udalov
2013-10-31 18:35:13 +04:00
parent bf1ea5fb01
commit 2967b69c4a
4 changed files with 16 additions and 23 deletions
@@ -234,7 +234,7 @@ public class ModifiersChecker {
public static Visibility getDefaultClassVisibility(@NotNull ClassDescriptor descriptor) {
ClassKind kind = descriptor.getKind();
if (kind == ClassKind.ENUM_ENTRY) {
return Visibilities.PRIVATE;
return Visibilities.PUBLIC;
}
if (kind == ClassKind.CLASS_OBJECT) {
return ((ClassDescriptor) descriptor.getContainingDeclaration()).getVisibility();
@@ -198,23 +198,6 @@ public abstract class AbstractLazyMemberScope<D extends DeclarationDescriptor, D
resolveSession.getInjector().getAnnotationResolver().resolveAnnotationsArguments(propertyDescriptor, resolveSession.getTrace(), resolutionScope);
}
// Enum entries are also properties
Collection<JetClassOrObject> classOrObjectDeclarations = declarationProvider.getClassOrObjectDeclarations(name);
for (JetClassOrObject classOrObjectDeclaration : classOrObjectDeclarations) {
if (classOrObjectDeclaration instanceof JetEnumEntry) {
ClassDescriptor classifier = getObjectDescriptor(name);
if (classifier == null) {
throw new IllegalStateException("Object declaration " + name + " found in the DeclarationProvider " + declarationProvider + " but not in the scope " + this);
}
JetScope scope = getScopeForMemberDeclarationResolution(classOrObjectDeclaration);
VariableDescriptor propertyDescriptor = resolveSession.getInjector().getDescriptorResolver()
.resolveObjectDeclaration(scope, thisDescriptor, classOrObjectDeclaration, classifier, resolveSession.getTrace());
result.add(propertyDescriptor);
}
}
getNonDeclaredProperties(name, result);
return result;
@@ -271,7 +271,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements LazyDesc
return JetClassInfoUtil.createClassLikeInfo(objectDeclaration);
}
}
else if (getKind() == ClassKind.OBJECT) {
else if (getKind() == ClassKind.OBJECT || getKind() == ClassKind.ENUM_ENTRY) {
return new SyntheticClassObjectInfo(originalClassInfo, this);
}
else if (getKind() == ClassKind.ENUM_CLASS) {
@@ -7,21 +7,31 @@ internal final enum class Test : jet.Enum<test.Test> {
public class object <class-object-for-Test> {
/*primary*/ private constructor <class-object-for-Test>()
public final val A: test.Test
public final val B: test.Test
public final /*synthesized*/ fun valueOf(/*0*/ value: jet.String): test.Test
public final /*synthesized*/ fun values(): jet.Array<test.Test>
private enum entry A : test.Test {
public enum entry A : test.Test {
/*primary*/ private constructor A()
public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
public class object <class-object-for-A> : test.Test.A {
/*primary*/ private constructor <class-object-for-A>()
public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
}
}
private enum entry B : test.Test {
public enum entry B : test.Test {
/*primary*/ private constructor B()
public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
public class object <class-object-for-B> : test.Test.B {
/*primary*/ private constructor <class-object-for-B>()
public final override /*1*/ /*fake_override*/ fun name(): jet.String
public final override /*1*/ /*fake_override*/ fun ordinal(): jet.Int
}
}
}
}