/// <summary>
        /// Add an assignment to default value for the given parameter/variable
        /// </summary>
        /// <param name="methodDeclarationSyntax">method/accessor where to inject the assignment</param>
        /// <param name="outParameterParameterName">parameter/variable name</param>
        /// <param name="outParameterParameterType">parameter/variable type</param>
        /// <returns>the method with a block containing an initialization to default for the given variables/parameters</returns>
        public BaseMethodDeclarationSyntax AddDefaultInitializer(BaseMethodDeclarationSyntax methodDeclarationSyntax, SyntaxToken outParameterParameterName, TypeSyntax outParameterParameterType)
        {
            if (methodDeclarationSyntax.Body == null)
            {
                throw new InvalidOperationException(
                          "Cant' add default initializer(s) to expression bodied or virtual method.");
            }

            IEnumerable <StatementSyntax> initializers;
            IEnumerable <StatementSyntax> originalStatements;

            if (methodDeclarationSyntax.Body.Statements.Count > 0 && methodDeclarationSyntax.Body.Statements[0].HasAnnotation(blockMarker))
            {
                // we add a new initializer, we need to get the existing ones
                initializers = (methodDeclarationSyntax.Body.Statements[0] as BlockSyntax).Statements;
                // we can skip the initializer helper block
                originalStatements = methodDeclarationSyntax.Body.Statements.Skip(1);
            }
            else
            {
                // this is the first initializer helper, no pre existing ones
                initializers = Array.Empty <StatementSyntax>();
                // keep all statements
                originalStatements = methodDeclarationSyntax.Body.Statements;
            }

            var initializer = SyntaxFactory.ExpressionStatement(SyntaxFactory.AssignmentExpression(
                                                                    SyntaxKind.SimpleAssignmentExpression, SyntaxFactory.IdentifierName(outParameterParameterName),
                                                                    outParameterParameterType.BuildDefaultExpression()));
            var initializersBlock = SyntaxFactory.Block(initializers.Append(initializer))
                                    .WithAdditionalAnnotations(blockMarker);

            return(methodDeclarationSyntax.WithBody(methodDeclarationSyntax.Body.WithStatements(new SyntaxList <StatementSyntax>(originalStatements.Prepend(initializersBlock)))).WithAdditionalAnnotations(Marker));
        }