code: public FunctionType createConstructorType(
        String name,
        Node source,
        Node parameters,
        JSType returnType,
        ImmutableList<TemplateType> templateKeys,
        boolean isAbstract) {
      checkArgument(source == null || source.isFunction() || source.isClass());
      return FunctionType.builder(this)
          .forConstructor()
          .withName(name)
          .withSourceNode(source)
          .withParamsNode(parameters)
          .withReturnType(returnType)
          .withTemplateKeys(templateKeys)
          .withIsAbstract(isAbstract)
          .build();
    }
docs: Creates a constructor function type.
  
  @param name the function's name or {@code null} to indicate that the function is anonymous.
  @param source the node defining this function. Its type ({@link Node#getToken()} ()}) must be
  {@link Token#FUNCTION}.
  @param parameters the function's parameters or {@code null} to indicate that the parameter
  types are unknown.
  @param returnType the function's return type or {@code null} to indicate that the return type
  is unknown.
  @param templateKeys the templatized types for the class.
  @param isAbstract whether the function type represents an abstract class