protected final void writeParameters(Declaration decl) throws IOException {
   if (decl instanceof Functional) {
     boolean first = true;
     List<ParameterList> parameterLists = ((Functional) decl).getParameterLists();
     for (ParameterList parameterList : parameterLists) {
       for (Parameter parameter : parameterList.getParameters()) {
         String doc = getDoc(parameter, linkRenderer());
         if (!doc.isEmpty()) {
           if (first) {
             first = false;
             open("div class='parameters section'");
             around("span class='title'", "Parameters: ");
             open("ul");
           }
           open("li");
           write(parameter.getName());
           write(doc);
           close("li");
         }
       }
     }
     if (!first) {
       close("ul");
       close("div");
     }
   }
 }
 private JCTree makeCallTypedMethod(
     List<JCStatement> body, java.util.List<ProducedType> parameterTypes) {
   // make the method
   MethodDefinitionBuilder methodBuilder =
       MethodDefinitionBuilder.method(gen, false, Naming.getCallableTypedMethodName());
   methodBuilder.modifiers(Flags.PRIVATE);
   ProducedType returnType = gen.getReturnTypeOfCallable(typeModel);
   methodBuilder.resultType(gen.makeJavaType(returnType, JT_NO_PRIMITIVES), null);
   // add all parameters
   int i = 0;
   for (Parameter param : paramLists.getParameters()) {
     ParameterDefinitionBuilder parameterBuilder =
         ParameterDefinitionBuilder.instance(gen, param.getName());
     JCExpression paramType = gen.makeJavaType(parameterTypes.get(i));
     parameterBuilder.type(paramType, null);
     methodBuilder.parameter(parameterBuilder);
     i++;
   }
   // Return the call result, or null if a void method
   methodBuilder.body(body);
   return methodBuilder.build();
 }
  protected final void writeParameterList(Functional f) throws IOException {
    for (ParameterList lists : f.getParameterLists()) {
      write("(");
      boolean first = true;
      for (Parameter param : lists.getParameters()) {
        if (!first) {
          write(", ");
        } else {
          first = false;
        }

        if (param instanceof FunctionalParameter) {
          writeFunctionalParameter((FunctionalParameter) param);
        } else if (param.isSequenced()) {
          writeSequencedParameter(param);
        } else {
          linkRenderer().to(param.getType()).write();
          write(" ", param.getName());
        }
      }
      write(")");
    }
  }
 public MethodDefinitionBuilder parameter(Parameter param, int flags) {
   String paramName = param.getName();
   String aliasedName = paramName;
   MethodOrValue mov = CodegenUtil.findMethodOrValueForParam(param);
   int mods = 0;
   if (!(mov instanceof Value) || !mov.isVariable() || mov.isCaptured()) {
     mods |= FINAL;
   }
   if (mov instanceof Method || mov instanceof Value && mov.isVariable() && mov.isCaptured()) {
     aliasedName = Naming.getAliasedParameterName(param);
   }
   TypedDeclaration nonWideningDecl;
   ProducedType nonWideningType;
   if (mov instanceof Value) {
     ProducedTypedReference typedRef = gen.getTypedReference(mov);
     ProducedTypedReference nonWideningTypedRef = gen.nonWideningTypeDecl(typedRef);
     nonWideningType = gen.nonWideningType(typedRef, nonWideningTypedRef);
     nonWideningDecl = nonWideningTypedRef.getDeclaration();
   } else {
     nonWideningType = param.getType();
     nonWideningDecl = param;
   }
   return parameter(mods, paramName, aliasedName, param, nonWideningDecl, nonWideningType, flags);
 }
 public MethodDefinitionBuilder parameter(
     Parameter paramDecl, ProducedType paramType, int mods, int flags) {
   String name = paramDecl.getName();
   return parameter(mods, name, paramDecl, paramDecl, paramType, flags);
 }
 @Override
 public String toString() {
   return parameter.getName() + " = " + term;
 }
 private String getCallableTempVarName(Parameter param) {
   // prefix them with $$ if we only forward, otherwise we need them to have the proper names
   return forwardCallTo != null ? Naming.getCallableTempVarName(param) : param.getName();
 }
 private void writeSequencedParameter(Parameter param) throws IOException {
   ProducedType sequencedParamType = param.getUnit().getIteratedType(param.getType());
   linkRenderer().to(sequencedParamType).write();
   write("...");
   write(" ", param.getName());
 }