private static Task <Document> RefactorAsync( Document document, IfStatementSyntax ifStatement, StatementListSelection selectedStatements, CancellationToken cancellationToken) { int count = selectedStatements.Count; StatementSyntax newStatement; if (count == 1 && !ifStatement.AsCascade().Any(f => f.Statement?.Kind() == SyntaxKind.Block)) { newStatement = selectedStatements.First(); } else { newStatement = SyntaxFactory.Block(selectedStatements); } ElseClauseSyntax elseClause = SyntaxFactory.ElseClause(newStatement).WithFormatterAnnotation(); IfStatementSyntax lastIfStatement = ifStatement.GetCascadeInfo().Last; IfStatementSyntax newIfStatement = ifStatement.ReplaceNode( lastIfStatement, lastIfStatement.WithElse(elseClause)); SyntaxList <StatementSyntax> newStatements = selectedStatements .UnderlyingList .Replace(ifStatement, newIfStatement) .RemoveRange(selectedStatements.FirstIndex, count); return(document.ReplaceStatementsAsync(SyntaxInfo.StatementListInfo(selectedStatements), newStatements, cancellationToken)); }
private static async Task <Document> RefactorAsync( Document document, IfStatementSyntax ifStatement, CancellationToken cancellationToken) { StatementListInfo statementsInfo = SyntaxInfo.StatementListInfo(ifStatement); IfStatementCascadeInfo ifCascadeInfo = ifStatement.GetCascadeInfo(); StatementListInfo newStatementsInfo = await RefactorAsync( document, ifStatement, statementsInfo, CreateNewIfStatement, ifCascadeInfo.Count, ifCascadeInfo.EndsWithElse, cancellationToken).ConfigureAwait(false); return(await document.ReplaceNodeAsync(statementsInfo.Parent, newStatementsInfo.Parent, cancellationToken).ConfigureAwait(false)); }