Update enum entry resolution strategy in lazy resolve
This commit is contained in:
@@ -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();
|
||||
|
||||
-17
@@ -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;
|
||||
|
||||
+1
-1
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user