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) {
|
public static Visibility getDefaultClassVisibility(@NotNull ClassDescriptor descriptor) {
|
||||||
ClassKind kind = descriptor.getKind();
|
ClassKind kind = descriptor.getKind();
|
||||||
if (kind == ClassKind.ENUM_ENTRY) {
|
if (kind == ClassKind.ENUM_ENTRY) {
|
||||||
return Visibilities.PRIVATE;
|
return Visibilities.PUBLIC;
|
||||||
}
|
}
|
||||||
if (kind == ClassKind.CLASS_OBJECT) {
|
if (kind == ClassKind.CLASS_OBJECT) {
|
||||||
return ((ClassDescriptor) descriptor.getContainingDeclaration()).getVisibility();
|
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);
|
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);
|
getNonDeclaredProperties(name, result);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
+1
-1
@@ -271,7 +271,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements LazyDesc
|
|||||||
return JetClassInfoUtil.createClassLikeInfo(objectDeclaration);
|
return JetClassInfoUtil.createClassLikeInfo(objectDeclaration);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (getKind() == ClassKind.OBJECT) {
|
else if (getKind() == ClassKind.OBJECT || getKind() == ClassKind.ENUM_ENTRY) {
|
||||||
return new SyntheticClassObjectInfo(originalClassInfo, this);
|
return new SyntheticClassObjectInfo(originalClassInfo, this);
|
||||||
}
|
}
|
||||||
else if (getKind() == ClassKind.ENUM_CLASS) {
|
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> {
|
public class object <class-object-for-Test> {
|
||||||
/*primary*/ private constructor <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 valueOf(/*0*/ value: jet.String): test.Test
|
||||||
public final /*synthesized*/ fun values(): jet.Array<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()
|
/*primary*/ private constructor 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
|
||||||
|
|
||||||
|
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()
|
/*primary*/ private constructor 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
|
||||||
|
|
||||||
|
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