LR: values() and valueOf() created properly for enums' class objects
This commit is contained in:
+18
-18
@@ -17,7 +17,6 @@
|
|||||||
package org.jetbrains.jet.lang.resolve.lazy;
|
package org.jetbrains.jet.lang.resolve.lazy;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.google.common.collect.Sets;
|
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
@@ -139,26 +138,26 @@ public class LazyClassMemberScope extends AbstractLazyMemberScope<LazyClassDescr
|
|||||||
fromSupertypes.addAll(supertype.getMemberScope().getFunctions(name));
|
fromSupertypes.addAll(supertype.getMemberScope().getFunctions(name));
|
||||||
}
|
}
|
||||||
generateDelegatingDescriptors(name, MemberExtractor.EXTRACT_FUNCTIONS, result);
|
generateDelegatingDescriptors(name, MemberExtractor.EXTRACT_FUNCTIONS, result);
|
||||||
|
generateEnumClassObjectMethods(result, name);
|
||||||
generateFakeOverrides(name, fromSupertypes, result, FunctionDescriptor.class);
|
generateFakeOverrides(name, fromSupertypes, result, FunctionDescriptor.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void generateEnumClassObjectMethods() {
|
private void generateEnumClassObjectMethods(@NotNull Collection<? super FunctionDescriptor> result, @NotNull Name name) {
|
||||||
DeclarationDescriptor containingDeclaration = thisDescriptor.getContainingDeclaration();
|
DeclarationDescriptor containingDeclaration = thisDescriptor.getContainingDeclaration();
|
||||||
if(containingDeclaration instanceof ClassDescriptor) {
|
if (!(containingDeclaration instanceof ClassDescriptor)) return;
|
||||||
ClassDescriptor classDescriptor = (ClassDescriptor) containingDeclaration;
|
ClassDescriptor classDescriptor = (ClassDescriptor) containingDeclaration;
|
||||||
if(classDescriptor.getKind() == ClassKind.ENUM_CLASS) {
|
if (classDescriptor.getClassObjectDescriptor() != thisDescriptor) return;
|
||||||
if(classDescriptor.getClassObjectDescriptor() == thisDescriptor) {
|
if (classDescriptor.getKind() != ClassKind.ENUM_CLASS) return;
|
||||||
SimpleFunctionDescriptor valuesMethod = DescriptorResolver
|
|
||||||
.createEnumClassObjectValuesMethod(classDescriptor, thisDescriptor, resolveSession.getTrace());
|
if (name.equals(DescriptorResolver.VALUES_METHOD_NAME)) {
|
||||||
functionDescriptors.put(valuesMethod.getName(), Collections.<FunctionDescriptor>singleton(valuesMethod));
|
SimpleFunctionDescriptor valuesMethod = DescriptorResolver
|
||||||
allDescriptors.add(valuesMethod);
|
.createEnumClassObjectValuesMethod(classDescriptor, resolveSession.getTrace());
|
||||||
SimpleFunctionDescriptor valueOfMethod = DescriptorResolver.createEnumClassObjectValueOfMethod(classDescriptor,
|
result.add(valuesMethod);
|
||||||
thisDescriptor,
|
}
|
||||||
resolveSession.getTrace());
|
else if (name.equals(DescriptorResolver.VALUE_OF_METHOD_NAME)) {
|
||||||
functionDescriptors.put(valueOfMethod.getName(), Collections.<FunctionDescriptor>singleton(valueOfMethod));
|
SimpleFunctionDescriptor valueOfMethod = DescriptorResolver.createEnumClassObjectValueOfMethod(classDescriptor,
|
||||||
allDescriptors.add(valueOfMethod);
|
resolveSession.getTrace());
|
||||||
}
|
result.add(valueOfMethod);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -248,7 +247,8 @@ public class LazyClassMemberScope extends AbstractLazyMemberScope<LazyClassDescr
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
generateEnumClassObjectMethods();
|
getFunctions(DescriptorResolver.VALUES_METHOD_NAME);
|
||||||
|
getFunctions(DescriptorResolver.VALUE_OF_METHOD_NAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user