diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java index ae0d051f2bc..3891a67dc1a 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java @@ -59,7 +59,6 @@ import static org.jetbrains.jet.lang.resolve.DescriptorUtils.*; import static org.jetbrains.jet.lang.resolve.ModifiersChecker.*; import static org.jetbrains.jet.lexer.JetTokens.OVERRIDE_KEYWORD; import static org.jetbrains.jet.lexer.JetTokens.VARARG_KEYWORD; -import static org.jetbrains.jet.storage.LockBasedStorageManager.NO_LOCKS; public class DescriptorResolver { public static final Name COPY_METHOD_NAME = Name.identifier("copy"); @@ -1375,39 +1374,6 @@ public class DescriptorResolver { } } - @NotNull - public static SimpleFunctionDescriptor createEnumClassObjectValuesMethod( - @NotNull ClassDescriptor classObject, - @NotNull BindingTrace trace - ) { - final ClassDescriptor enumClassDescriptor = (ClassDescriptor) classObject.getContainingDeclaration(); - assert DescriptorUtils.isEnumClass(enumClassDescriptor) : "values should be created in enum class: " + enumClassDescriptor; - return DescriptorFactory - .createEnumClassObjectValuesMethod(classObject, DeferredType.create(NO_LOCKS, trace, new Function0() { - @Override - public JetType invoke() { - return KotlinBuiltIns.getInstance().getArrayType(enumClassDescriptor.getDefaultType()); - } - })); - } - - - @NotNull - public static SimpleFunctionDescriptor createEnumClassObjectValueOfMethod( - @NotNull ClassDescriptor classObject, - @NotNull BindingTrace trace - ) { - final ClassDescriptor enumClassDescriptor = (ClassDescriptor) classObject.getContainingDeclaration(); - assert DescriptorUtils.isEnumClass(enumClassDescriptor) : "valueOf should be created in enum class: " + enumClassDescriptor; - return DescriptorFactory - .createEnumClassObjectValueOfMethod(classObject, DeferredType.create(NO_LOCKS, trace, new Function0() { - @Override - public JetType invoke() { - return enumClassDescriptor.getDefaultType(); - } - })); - } - public static boolean checkHasOuterClassInstance( @NotNull JetScope scope, @NotNull BindingTrace trace, diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassDescriptor.java index cffa635f470..3433ace0987 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassDescriptor.java @@ -31,6 +31,7 @@ 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; @@ -82,8 +83,8 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes private final boolean isInner; private final Annotations annotations; - private final NullableLazyValue classObjectDescriptor; - private final MemoizedFunctionToNotNull extraClassObjectDescriptors; + private final NullableLazyValue classObjectDescriptor; + private final MemoizedFunctionToNotNull extraClassObjectDescriptors; private final LazyClassMemberScope unsubstitutedMemberScope; @@ -154,15 +155,15 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes this.annotations = Annotations.EMPTY; } - this.classObjectDescriptor = storageManager.createNullableLazyValue(new Function0() { + this.classObjectDescriptor = storageManager.createNullableLazyValue(new Function0() { @Override - public ClassDescriptorWithResolutionScopes invoke() { + public ClassDescriptor invoke() { return computeClassObjectDescriptor(declarationProvider.getOwnerInfo().getClassObject()); } }); - this.extraClassObjectDescriptors = storageManager.createMemoizedFunction(new Function1() { + this.extraClassObjectDescriptors = storageManager.createMemoizedFunction(new Function1() { @Override - public ClassDescriptorWithResolutionScopes invoke(JetClassObject classObject) { + public ClassDescriptor invoke(JetClassObject classObject) { return computeClassObjectDescriptor(classObject); } }); @@ -313,7 +314,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes } @Override - public ClassDescriptorWithResolutionScopes getClassObjectDescriptor() { + public ClassDescriptor getClassObjectDescriptor() { return classObjectDescriptor.invoke(); } @@ -340,7 +341,10 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes } @Nullable - private ClassDescriptorWithResolutionScopes computeClassObjectDescriptor(@Nullable JetClassObject classObject) { + 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); @@ -358,7 +362,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes JetObjectDeclaration objectDeclaration = classObject.getObjectDeclaration(); return JetClassInfoUtil.createClassLikeInfo(objectDeclaration); } - else if (getKind() == ClassKind.OBJECT || getKind() == ClassKind.ENUM_ENTRY || getKind() == ClassKind.ENUM_CLASS) { + else if (getKind() == ClassKind.OBJECT || getKind() == ClassKind.ENUM_ENTRY) { return new SyntheticClassObjectInfo(originalClassInfo, this); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassMemberScope.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassMemberScope.java index 3782a6aa546..435d96b95b4 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassMemberScope.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassMemberScope.java @@ -148,7 +148,6 @@ public class LazyClassMemberScope extends AbstractLazyMemberScope result, @NotNull Name name) { - if (!DescriptorUtils.isEnumClassObject(thisDescriptor)) return; - - if (name.equals(DescriptorFactory.VALUES_METHOD_NAME)) { - SimpleFunctionDescriptor valuesMethod = DescriptorResolver - .createEnumClassObjectValuesMethod(thisDescriptor, trace); - result.add(valuesMethod); - } - else if (name.equals(DescriptorFactory.VALUE_OF_METHOD_NAME)) { - SimpleFunctionDescriptor valueOfMethod = DescriptorResolver - .createEnumClassObjectValueOfMethod(thisDescriptor, trace); - result.add(valueOfMethod); - } - } - @NotNull @Override @SuppressWarnings("unchecked") @@ -311,9 +295,6 @@ public class LazyClassMemberScope extends AbstractLazyMemberScope