Exemplo n.º 1
0
        public void VisitForStatement(ForStatementSyntax node)
        {
            if (node == null)
                throw new ArgumentNullException("node");

            node.Validate();

            WriteLeadingTrivia(node);

            _writer.WriteIndent();
            _writer.WriteKeyword(PrinterKeyword.For);

            if (_writer.Configuration.Spaces.BeforeParentheses.ForParentheses)
                _writer.WriteSpace();

            _writer.WriteSyntax(Syntax.OpenParen);

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

            if (_writer.Configuration.Spaces.WithinParentheses.ForParentheses)
                _writer.WriteSpace();

            bool hadOne = false;

            if (node.Declaration != null)
                node.Declaration.Accept(this);

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

                initializer.Accept(this);
            }

            _writer.WriteStatementSeparator(_writer.Configuration.LineBreaksAndWrapping.LineWrapping.WrapForStatementHeader);

            if (node.Condition != null)
                node.Condition.Accept(this);

            _writer.WriteStatementSeparator(_writer.Configuration.LineBreaksAndWrapping.LineWrapping.WrapForStatementHeader);

            hadOne = false;

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

                incrementor.Accept(this);
            }

            if (_writer.Configuration.Spaces.WithinParentheses.ForParentheses)
                _writer.WriteSpace();

            _writer.WriteSyntax(Syntax.CloseParen);

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

            VisitBlockStatement(node.Statement);

            WriteTrailingTrivia(node);
        }