/** * start a new procedure/function */ private static MethodDeclarationSyntax StartFunction([NotNull] FunctionDeclaration functionDeclaration) { var method = SyntaxFactory.MethodDeclaration(GetTypeName(functionDeclaration.ReturnType), functionDeclaration.Name); if (!functionDeclaration.Block.Declarations.Any(x => x is ProcedureParameterDeclaration)) { return(method); } var list = new SyntaxNodeOrTokenList(); bool first = true; foreach (var declaration in functionDeclaration.Block.Declarations.OfType <ProcedureParameterDeclaration>()) { if (!first) { list = list.Add(SyntaxFactory.Token(SyntaxKind.CommaToken)); } first = false; var param = SyntaxFactory.Parameter(MapIdentifier(declaration.Name)) .WithType(AddTypeSyntaxSpecification(declaration)); if (declaration.IsVar) { param = param.WithModifiers(SyntaxFactory.TokenList( SyntaxFactory.Token(SyntaxKind.RefKeyword))); } list = list.Add(param); } if (list.Any()) { method = method.WithParameterList(SyntaxFactory.ParameterList( SyntaxFactory.SeparatedList <ParameterSyntax>(list))); } return(method); }