Tuple classes have constructors

This commit is contained in:
Andrey Breslav
2012-06-26 19:56:43 +02:00
parent 06aa1478e6
commit eb4bcc35c0
@@ -161,7 +161,8 @@ public class JetStandardClasses {
private static final ClassDescriptor[] TUPLE = new ClassDescriptor[MAX_TUPLE_ORDER + 1];
static {
for (int i = 0; i <= MAX_TUPLE_ORDER; i++) {
List<TypeParameterDescriptor> parameters = new ArrayList<TypeParameterDescriptor>();
List<TypeParameterDescriptor> typeParameters = Lists.newArrayList();
List<ValueParameterDescriptor> constructorValueParameters = Lists.newArrayList();
ClassDescriptorImpl classDescriptor = new ClassDescriptorImpl(
STANDARD_CLASSES_NAMESPACE,
Collections.<AnnotationDescriptor>emptyList(),
@@ -173,23 +174,37 @@ public class JetStandardClasses {
classDescriptor,
Collections.<AnnotationDescriptor>emptyList(),
false, Variance.OUT_VARIANCE, Name.identifier("T" + (j + 1)), j);
parameters.add(typeParameterDescriptor);
typeParameters.add(typeParameterDescriptor);
PropertyDescriptor propertyDescriptor = new PropertyDescriptor(classDescriptor, Collections.<AnnotationDescriptor>emptyList(), Modality.FINAL, Visibilities.PUBLIC, false, false, Name.identifier("_" + (j + 1)), CallableMemberDescriptor.Kind.DECLARATION);
propertyDescriptor.setType(typeParameterDescriptor.getDefaultType(), Collections.<TypeParameterDescriptorImpl>emptyList(), classDescriptor.getImplicitReceiver(), ReceiverDescriptor.NO_RECEIVER);
PropertyGetterDescriptor getterDescriptor = new PropertyGetterDescriptor(propertyDescriptor, Collections.<AnnotationDescriptor>emptyList(), Modality.FINAL, Visibilities.PUBLIC, false, true, CallableMemberDescriptor.Kind.DECLARATION);
getterDescriptor.initialize(typeParameterDescriptor.getDefaultType());
propertyDescriptor.initialize(getterDescriptor, null);
writableScope.addPropertyDescriptor(propertyDescriptor);
ValueParameterDescriptorImpl valueParameterDescriptor =
new ValueParameterDescriptorImpl(classDescriptor, j, Collections.<AnnotationDescriptor>emptyList(),
Name.identifier("_" + (j + 1)), false, typeParameterDescriptor.getDefaultType(),
false,
null);
constructorValueParameters.add(valueParameterDescriptor);
}
writableScope.changeLockLevel(WritableScope.LockLevel.READING);
ConstructorDescriptorImpl constructorDescriptor = new ConstructorDescriptorImpl(classDescriptor, Collections.<AnnotationDescriptor>emptyList(), true);
TUPLE[i] = classDescriptor.initialize(
true,
parameters,
typeParameters,
Collections.singleton(getAnyType()),
writableScope,
Collections.<ConstructorDescriptor>emptySet(), // TODO
null); // TODO : constructor
Collections.<ConstructorDescriptor>singleton(constructorDescriptor),
null);
TUPLE_CONSTRUCTORS.add(TUPLE[i].getTypeConstructor());
constructorDescriptor.initialize(classDescriptor.getTypeConstructor().getParameters(), constructorValueParameters, Visibilities.PUBLIC);
constructorDescriptor.setReturnType(classDescriptor.getDefaultType());
}
}