Drop enum class object hack
Place valueOf() and values() into the static scope of the corresponding enum class #KT-5580 Fixed #KT-2410 Fixed
This commit is contained in:
@@ -21,7 +21,10 @@ import com.intellij.psi.PsiNameIdentifierOwner;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.descriptors.*;
|
||||
import org.jetbrains.jet.lang.descriptors.impl.*;
|
||||
import org.jetbrains.jet.lang.descriptors.impl.ConstructorDescriptorImpl;
|
||||
import org.jetbrains.jet.lang.descriptors.impl.MutableClassDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.impl.MutablePackageFragmentDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.impl.PackageLikeBuilder;
|
||||
import org.jetbrains.jet.lang.psi.*;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import org.jetbrains.jet.lang.resolve.name.SpecialNames;
|
||||
@@ -30,7 +33,6 @@ import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.WriteThroughScope;
|
||||
import org.jetbrains.jet.lang.types.JetType;
|
||||
import org.jetbrains.jet.storage.LockBasedStorageManager;
|
||||
import org.jetbrains.jet.utils.DFS;
|
||||
|
||||
import javax.inject.Inject;
|
||||
@@ -448,21 +450,13 @@ public class TypeHierarchyResolver {
|
||||
@NotNull JetClass klass,
|
||||
@NotNull DeclarationDescriptor containingDeclaration
|
||||
) {
|
||||
ClassKind kind = getClassKind(klass);
|
||||
// Kind check is needed in order to not consider enums as inner in any case
|
||||
// (otherwise it would be impossible to create a class object in the enum)
|
||||
boolean isInner = kind == ClassKind.CLASS && klass.isInner();
|
||||
MutableClassDescriptor descriptor = new MutableClassDescriptor(
|
||||
containingDeclaration, outerScope, kind, isInner, JetPsiUtil.safeName(klass.getName()),
|
||||
toSourceElement(klass));
|
||||
containingDeclaration, outerScope, getClassKind(klass), klass.isInner(), JetPsiUtil.safeName(klass.getName()),
|
||||
toSourceElement(klass)
|
||||
);
|
||||
c.getDeclaredClasses().put(klass, descriptor);
|
||||
trace.record(FQNAME_TO_CLASS_DESCRIPTOR, JetNamedDeclarationUtil.getUnsafeFQName(klass), descriptor);
|
||||
|
||||
if (descriptor.getKind() == ClassKind.ENUM_CLASS) {
|
||||
ClassDescriptor classObject = new EnumClassObjectDescriptor(LockBasedStorageManager.NO_LOCKS, descriptor);
|
||||
descriptor.getBuilder().setClassObjectDescriptor(classObject);
|
||||
}
|
||||
|
||||
prepareForDeferredCall(descriptor.getScopeForMemberDeclarationResolution(), descriptor, klass);
|
||||
|
||||
return descriptor;
|
||||
|
||||
+2
-7
@@ -31,7 +31,6 @@ import org.jetbrains.annotations.ReadOnly;
|
||||
import org.jetbrains.jet.lang.descriptors.*;
|
||||
import org.jetbrains.jet.lang.descriptors.annotations.Annotations;
|
||||
import org.jetbrains.jet.lang.descriptors.impl.ClassDescriptorBase;
|
||||
import org.jetbrains.jet.lang.descriptors.impl.EnumClassObjectDescriptor;
|
||||
import org.jetbrains.jet.lang.psi.*;
|
||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||
@@ -353,9 +352,6 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes
|
||||
|
||||
@Nullable
|
||||
private ClassDescriptor computeClassObjectDescriptor(@Nullable JetClassObject classObject) {
|
||||
if (getKind() == ClassKind.ENUM_CLASS) {
|
||||
return new EnumClassObjectDescriptor(resolveSession.getStorageManager(), this);
|
||||
}
|
||||
JetClassLikeInfo classObjectInfo = getClassObjectInfo(classObject);
|
||||
if (classObjectInfo != null) {
|
||||
return new LazyClassDescriptor(resolveSession, this, getClassObjectName(getName()), classObjectInfo);
|
||||
@@ -366,12 +362,11 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes
|
||||
@Nullable
|
||||
private JetClassLikeInfo getClassObjectInfo(@Nullable JetClassObject classObject) {
|
||||
if (classObject != null) {
|
||||
if (getKind() != ClassKind.CLASS && getKind() != ClassKind.TRAIT && getKind() != ClassKind.ANNOTATION_CLASS || isInner()) {
|
||||
if (getKind().isSingleton() || isInner()) {
|
||||
resolveSession.getTrace().report(CLASS_OBJECT_NOT_ALLOWED.on(classObject));
|
||||
}
|
||||
|
||||
JetObjectDeclaration objectDeclaration = classObject.getObjectDeclaration();
|
||||
return JetClassInfoUtil.createClassLikeInfo(objectDeclaration);
|
||||
return JetClassInfoUtil.createClassLikeInfo(classObject.getObjectDeclaration());
|
||||
}
|
||||
else if (getKind() == ClassKind.OBJECT || getKind() == ClassKind.ENUM_ENTRY) {
|
||||
return new SyntheticClassObjectInfo(originalClassInfo, this);
|
||||
|
||||
Reference in New Issue
Block a user