private static bool CheckContainingNode(SyntaxNode node)
        {
            switch (node.Kind())
            {
            case SyntaxKind.ForEachStatement:
            case SyntaxKind.ForStatement:
            case SyntaxKind.UsingStatement:
            case SyntaxKind.WhileStatement:
            case SyntaxKind.DoStatement:
            case SyntaxKind.LockStatement:
            case SyntaxKind.FixedStatement:
            case SyntaxKind.UnsafeStatement:
            case SyntaxKind.TryStatement:
            case SyntaxKind.CheckedStatement:
            case SyntaxKind.UncheckedStatement:
                return(true);

            case SyntaxKind.IfStatement:
                return(IfElseChainAnalysis.IsTopmostIf((IfStatementSyntax)node));

            case SyntaxKind.ElseClause:
                return(IfElseChainAnalysis.IsEndOfChain((ElseClauseSyntax)node));
            }

            return(false);
        }
        private static void AddBracesToIfElseChain(CodeRefactoringContext context, IfStatementSyntax ifStatement)
        {
            if (IfElseChainAnalysis.IsTopmostIf(ifStatement) &&
                ifStatement.Else != null &&
                ifStatement.IfKeyword.Span.Contains(context.Span))
            {
                var result = new IfElseChainAnalysisResult(ifStatement);

                if (result.AddBracesToChain)
                {
                    context.RegisterRefactoring(
                        "Add braces to if-else chain",
                        cancellationToken =>
                    {
                        return(AddBracesToIfElseChainRefactoring.RefactorAsync(
                                   context.Document,
                                   ifStatement,
                                   cancellationToken));
                    });
                }

                if (result.RemoveBracesFromChain)
                {
                    context.RegisterRefactoring(
                        "Remove braces from if-else chain",
                        cancellationToken =>
                    {
                        return(RemoveBracesFromIfElseChainRefactoring.RefactorAsync(
                                   context.Document,
                                   ifStatement,
                                   cancellationToken));
                    });
                }
            }
        }
 private static void SwapStatements(CodeRefactoringContext context, IfStatementSyntax ifStatement)
 {
     if (IfElseChainAnalysis.IsTopmostIf(ifStatement) &&
         ifStatement.Statement != null &&
         ifStatement.Condition != null &&
         ifStatement.Condition.Span.Contains(context.Span))
     {
         StatementSyntax falseStatement = ifStatement.Else?.Statement;
         if (falseStatement != null &&
             !falseStatement.IsKind(SyntaxKind.IfStatement))
         {
             context.RegisterRefactoring(
                 "Swap if-else statements",
                 cancellationToken =>
             {
                 return(SwapStatementsAsync(
                            context.Document,
                            ifStatement,
                            cancellationToken));
             });
         }
     }
 }