private static void AnalyzeCatchClause(SyntaxNodeAnalysisContext context)
        {
            var catchClause = (CatchClauseSyntax)context.Node;

            if (catchClause.Filter != null)
            {
                return;
            }

            if (!(catchClause.Block.Statements.FirstOrDefault() is IfStatementSyntax ifStatement))
            {
                return;
            }

            if (IsThrowStatementWithoutExpression(ifStatement.Statement.SingleNonBlockStatementOrDefault())
                ^ IsThrowStatementWithoutExpression(ifStatement.Else?.Statement.SingleNonBlockStatementOrDefault()))
            {
                if (AwaitExpressionWalker.ContainsAwaitExpression(ifStatement.Condition))
                {
                    return;
                }

                if (ifStatement.ContainsUnbalancedIfElseDirectives())
                {
                    return;
                }

                DiagnosticHelpers.ReportDiagnostic(context, DiagnosticDescriptors.UseExceptionFilter, ifStatement.IfKeyword);
            }
        }
Пример #2
0
 private RemoveAsyncAwaitAnalysis(AwaitExpressionWalker walker)
 {
     Walker          = walker;
     AwaitExpression = null;
 }