Getting rid of unneeded parameters

+ constants introduced
This commit is contained in:
Andrey Breslav
2012-08-15 13:34:18 +04:00
parent 5ee995b8cb
commit 24b83dd8f7
2 changed files with 18 additions and 12 deletions
@@ -54,6 +54,9 @@ import static org.jetbrains.jet.lang.resolve.BindingContext.CONSTRUCTOR;
* @author abreslav * @author abreslav
*/ */
public class DescriptorResolver { public class DescriptorResolver {
public static final Name VALUE_OF_METHOD_NAME = Name.identifier("valueOf");
public static final Name VALUES_METHOD_NAME = Name.identifier("values");
@NotNull @NotNull
private TypeResolver typeResolver; private TypeResolver typeResolver;
@NotNull @NotNull
@@ -1142,43 +1145,46 @@ public class DescriptorResolver {
} }
public static SimpleFunctionDescriptor createEnumClassObjectValuesMethod( public static SimpleFunctionDescriptor createEnumClassObjectValuesMethod(
final ClassDescriptor mutableClassDescriptor, final ClassDescriptor enumClassDescriptor,
ClassDescriptor classObjectDescriptor,
BindingTrace trace BindingTrace trace
) { ) {
ClassDescriptor classObjectDescriptor = enumClassDescriptor.getClassObjectDescriptor();
assert classObjectDescriptor != null : "Enum class has no class object";
List<AnnotationDescriptor> annotations = Collections.<AnnotationDescriptor>emptyList(); List<AnnotationDescriptor> annotations = Collections.<AnnotationDescriptor>emptyList();
SimpleFunctionDescriptorImpl values = SimpleFunctionDescriptorImpl values =
new SimpleFunctionDescriptorImpl(classObjectDescriptor, annotations, new SimpleFunctionDescriptorImpl(classObjectDescriptor, annotations,
Name.identifier("values"), VALUES_METHOD_NAME,
CallableMemberDescriptor.Kind.DECLARATION); CallableMemberDescriptor.Kind.DECLARATION);
ClassReceiver classReceiver = new ClassReceiver(classObjectDescriptor); ClassReceiver classReceiver = new ClassReceiver(classObjectDescriptor);
JetType type = DeferredType.create(trace, new LazyValue<JetType>() { JetType type = DeferredType.create(trace, new LazyValue<JetType>() {
@Override @Override
protected JetType compute() { protected JetType compute() {
return JetStandardLibrary.getInstance().getArrayType(mutableClassDescriptor.getDefaultType()); return JetStandardLibrary.getInstance().getArrayType(enumClassDescriptor.getDefaultType());
} }
}); });
values.initialize(null, classReceiver, Collections.<TypeParameterDescriptor>emptyList(),Collections.<ValueParameterDescriptor>emptyList(), values.initialize(null, classReceiver, Collections.<TypeParameterDescriptor>emptyList(),
Collections.<ValueParameterDescriptor>emptyList(),
type, Modality.FINAL, type, Modality.FINAL,
Visibilities.PUBLIC, false); Visibilities.PUBLIC, false);
return values; return values;
} }
public static SimpleFunctionDescriptor createEnumClassObjectValueOfMethod( public static SimpleFunctionDescriptor createEnumClassObjectValueOfMethod(
final ClassDescriptor mutableClassDescriptor, final ClassDescriptor enumClassDescriptor,
ClassDescriptor classObjectDescriptor,
BindingTrace trace BindingTrace trace
) { ) {
ClassDescriptor classObjectDescriptor = enumClassDescriptor.getClassObjectDescriptor();
assert classObjectDescriptor != null : "Enum class has no class object";
List<AnnotationDescriptor> annotations = Collections.<AnnotationDescriptor>emptyList(); List<AnnotationDescriptor> annotations = Collections.<AnnotationDescriptor>emptyList();
SimpleFunctionDescriptorImpl values = SimpleFunctionDescriptorImpl values =
new SimpleFunctionDescriptorImpl(classObjectDescriptor, annotations, new SimpleFunctionDescriptorImpl(classObjectDescriptor, annotations,
Name.identifier("valueOf"), VALUE_OF_METHOD_NAME,
CallableMemberDescriptor.Kind.DECLARATION); CallableMemberDescriptor.Kind.DECLARATION);
ClassReceiver classReceiver = new ClassReceiver(classObjectDescriptor); ClassReceiver classReceiver = new ClassReceiver(classObjectDescriptor);
JetType type = DeferredType.create(trace, new LazyValue<JetType>() { JetType type = DeferredType.create(trace, new LazyValue<JetType>() {
@Override @Override
protected JetType compute() { protected JetType compute() {
return mutableClassDescriptor.getDefaultType(); return enumClassDescriptor.getDefaultType();
} }
}); });
ValueParameterDescriptor parameterDescriptor = new ValueParameterDescriptorImpl( ValueParameterDescriptor parameterDescriptor = new ValueParameterDescriptorImpl(
@@ -292,6 +292,7 @@ public class TypeHierarchyResolver {
MutableClassDescriptor classObjectDescriptor = new MutableClassDescriptor( MutableClassDescriptor classObjectDescriptor = new MutableClassDescriptor(
mutableClassDescriptor, outerScope, ClassKind.OBJECT, mutableClassDescriptor, outerScope, ClassKind.OBJECT,
Name.special("<class-object-for-" + klass.getName() + ">")); Name.special("<class-object-for-" + klass.getName() + ">"));
mutableClassDescriptor.getBuilder().setClassObjectDescriptor(classObjectDescriptor);
classObjectDescriptor.setModality(Modality.FINAL); classObjectDescriptor.setModality(Modality.FINAL);
classObjectDescriptor.setVisibility(DescriptorResolver.resolveVisibilityFromModifiers(klass.getModifierList())); classObjectDescriptor.setVisibility(DescriptorResolver.resolveVisibilityFromModifiers(klass.getModifierList()));
classObjectDescriptor.setTypeParameterDescriptors(new ArrayList<TypeParameterDescriptor>(0)); classObjectDescriptor.setTypeParameterDescriptors(new ArrayList<TypeParameterDescriptor>(0));
@@ -299,9 +300,8 @@ public class TypeHierarchyResolver {
ConstructorDescriptorImpl primaryConstructorForObject = ConstructorDescriptorImpl primaryConstructorForObject =
createPrimaryConstructorForObject(null, classObjectDescriptor); createPrimaryConstructorForObject(null, classObjectDescriptor);
primaryConstructorForObject.setReturnType(classObjectDescriptor.getDefaultType()); primaryConstructorForObject.setReturnType(classObjectDescriptor.getDefaultType());
classObjectDescriptor.getBuilder().addFunctionDescriptor(DescriptorResolver.createEnumClassObjectValuesMethod(mutableClassDescriptor, classObjectDescriptor, trace)); classObjectDescriptor.getBuilder().addFunctionDescriptor(DescriptorResolver.createEnumClassObjectValuesMethod(mutableClassDescriptor, trace));
classObjectDescriptor.getBuilder().addFunctionDescriptor(DescriptorResolver.createEnumClassObjectValueOfMethod(mutableClassDescriptor, classObjectDescriptor,trace)); classObjectDescriptor.getBuilder().addFunctionDescriptor(DescriptorResolver.createEnumClassObjectValueOfMethod(mutableClassDescriptor, trace));
mutableClassDescriptor.getBuilder().setClassObjectDescriptor(classObjectDescriptor);
} }
} }