public override TDeclarationNode AddParameters <TDeclarationNode>( TDeclarationNode destination, IEnumerable <IParameterSymbol> parameters, CodeGenerationOptions options, CancellationToken cancellationToken) { var currentParameterList = CSharpSyntaxGenerator.GetParameterList(destination); if (currentParameterList == null) { return(destination); } var currentParamsCount = currentParameterList.Parameters.Count; var seenOptional = currentParamsCount > 0 && currentParameterList.Parameters[currentParamsCount - 1].Default != null; var isFirstParam = currentParamsCount == 0; var newParams = ArrayBuilder <SyntaxNode> .GetInstance(); foreach (var parameter in parameters) { var parameterSyntax = ParameterGenerator.GetParameter(parameter, options, isExplicit: false, isFirstParam: isFirstParam, seenOptional: seenOptional); isFirstParam = false; seenOptional = seenOptional || parameterSyntax.Default != null; newParams.Add(parameterSyntax); } var finalMember = CSharpSyntaxGenerator.Instance.AddParameters(destination, newParams.ToImmutableAndFree()); return(Cast <TDeclarationNode>(finalMember)); }
public override TDeclarationNode AddParameters <TDeclarationNode>( TDeclarationNode destination, IEnumerable <IParameterSymbol> parameters, CSharpCodeGenerationOptions options, CancellationToken cancellationToken) { var currentParameterList = destination.GetParameterList(); var parameterCount = currentParameterList != null ? currentParameterList.Parameters.Count : 0; var seenOptional = currentParameterList != null && parameterCount > 0 && currentParameterList.Parameters[^ 1].Default != null; var isFirstParam = parameterCount == 0; var editor = new SyntaxEditor(destination, CSharpSyntaxGenerator.Instance); foreach (var parameter in parameters) { var parameterSyntax = ParameterGenerator.GetParameter(parameter, options, isExplicit: false, isFirstParam: isFirstParam, seenOptional: seenOptional); AddParameterEditor.AddParameter( CSharpSyntaxFacts.Instance, editor, destination, parameterCount, parameterSyntax, cancellationToken); parameterCount++; isFirstParam = false; seenOptional = seenOptional || parameterSyntax.Default != null; } var finalMember = editor.GetChangedRoot(); return(Cast <TDeclarationNode>(finalMember)); }
public override TDeclarationNode AddParameters <TDeclarationNode>( TDeclarationNode destinationMember, IEnumerable <IParameterSymbol> parameters, CodeGenerationOptions options, CancellationToken cancellationToken) { var memberDeclaration = destinationMember as MemberDeclarationSyntax; if (memberDeclaration == null) { return(destinationMember); } var currentParameterList = memberDeclaration.GetParameterList(); if (currentParameterList == null) { return(destinationMember); } var currentParamsCount = currentParameterList.Parameters.Count; var seenOptional = currentParamsCount > 0 && currentParameterList.Parameters[currentParamsCount - 1].Default != null; var isFirstParam = currentParamsCount == 0; var parameterNodesAndTokens = currentParameterList.Parameters.GetWithSeparators().ToList(); foreach (var parameter in parameters) { if (parameterNodesAndTokens.Count > 0 && parameterNodesAndTokens.Last().Kind() != SyntaxKind.CommaToken) { parameterNodesAndTokens.Add(SyntaxFactory.Token(SyntaxKind.CommaToken)); } var parameterSyntax = ParameterGenerator.GetParameter(parameter, options, isExplicit: false, isFirstParam: isFirstParam, seenOptional: seenOptional); parameterNodesAndTokens.Add(parameterSyntax); isFirstParam = false; seenOptional = seenOptional || parameterSyntax.Default != null; } var finalParameterList = currentParameterList.WithParameters(SyntaxFactory.SeparatedList <ParameterSyntax>(parameterNodesAndTokens)); var finalMember = memberDeclaration.WithParameterList(finalParameterList); return(Cast <TDeclarationNode>(finalMember)); }