diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/JetStandardClasses.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/JetStandardClasses.java index c9c84c735c8..c8eda59f6f2 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/JetStandardClasses.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/JetStandardClasses.java @@ -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 parameters = new ArrayList(); + List typeParameters = Lists.newArrayList(); + List constructorValueParameters = Lists.newArrayList(); ClassDescriptorImpl classDescriptor = new ClassDescriptorImpl( STANDARD_CLASSES_NAMESPACE, Collections.emptyList(), @@ -173,23 +174,37 @@ public class JetStandardClasses { classDescriptor, Collections.emptyList(), false, Variance.OUT_VARIANCE, Name.identifier("T" + (j + 1)), j); - parameters.add(typeParameterDescriptor); + typeParameters.add(typeParameterDescriptor); + PropertyDescriptor propertyDescriptor = new PropertyDescriptor(classDescriptor, Collections.emptyList(), Modality.FINAL, Visibilities.PUBLIC, false, false, Name.identifier("_" + (j + 1)), CallableMemberDescriptor.Kind.DECLARATION); propertyDescriptor.setType(typeParameterDescriptor.getDefaultType(), Collections.emptyList(), classDescriptor.getImplicitReceiver(), ReceiverDescriptor.NO_RECEIVER); PropertyGetterDescriptor getterDescriptor = new PropertyGetterDescriptor(propertyDescriptor, Collections.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.emptyList(), + Name.identifier("_" + (j + 1)), false, typeParameterDescriptor.getDefaultType(), + false, + null); + constructorValueParameters.add(valueParameterDescriptor); } writableScope.changeLockLevel(WritableScope.LockLevel.READING); + + ConstructorDescriptorImpl constructorDescriptor = new ConstructorDescriptorImpl(classDescriptor, Collections.emptyList(), true); + TUPLE[i] = classDescriptor.initialize( true, - parameters, + typeParameters, Collections.singleton(getAnyType()), writableScope, - Collections.emptySet(), // TODO - null); // TODO : constructor + Collections.singleton(constructorDescriptor), + null); TUPLE_CONSTRUCTORS.add(TUPLE[i].getTypeConstructor()); + + constructorDescriptor.initialize(classDescriptor.getTypeConstructor().getParameters(), constructorValueParameters, Visibilities.PUBLIC); + constructorDescriptor.setReturnType(classDescriptor.getDefaultType()); } }