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));
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
        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));
        }