public void VisitParameterList(ParameterListSyntax node)
        {
            if (node == null)
                throw new ArgumentNullException("node");

            node.Validate();

            if (node.Parameters.Count == 0)
            {
                if (_writer.Configuration.Spaces.BeforeParentheses.MethodDeclarationEmptyParentheses)
                    _writer.WriteSpace();
            }
            else
            {
                if (_writer.Configuration.Spaces.BeforeParentheses.MethodDeclarationParentheses)
                    _writer.WriteSpace();
            }

            _writer.WriteSyntax(Syntax.OpenParen);

            if (_writer.Configuration.Other.AlignMultiLineConstructs.MethodParameters)
                _writer.SetAlignmentBreak(true);

            bool spacesWithin = false;

            if (node.Parent != null)
            {
                switch (node.Parent.SyntaxKind)
                {
                    case SyntaxKind.MethodDeclaration:
                        spacesWithin =
                            node.Parameters.Count > 0
                            ? _writer.Configuration.Spaces.WithinParentheses.MethodDeclarationParentheses
                            : _writer.Configuration.Spaces.WithinParentheses.MethodDeclarationEmptyParentheses;
                        break;
                }
            }

            if (spacesWithin)
                _writer.WriteSpace();

            bool hadOne = false;

            foreach (var parameter in node.Parameters)
            {
                if (hadOne)
                    _writer.WriteListSeparator();
                else
                    hadOne = true;

                parameter.Accept(this);
            }

            if (spacesWithin && node.Parameters.Count > 0)
                _writer.WriteSpace();

            if (_writer.Configuration.Other.AlignMultiLineConstructs.MethodParameters)
                _writer.SetAlignmentBreak(false);

            _writer.WriteSyntax(Syntax.CloseParen);
        }