public override void Initialize(AnalysisContext analysisContext) { analysisContext.EnableConcurrentExecution(); analysisContext.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.Analyze); analysisContext.RegisterCompilationStartAction(compilationStartAnalysisContext => { var compilationTypes = new CompilationSecurityTypes(compilationStartAnalysisContext.Compilation); if (compilationTypes.HandleProcessCorruptedStateExceptionsAttribute == null) { return; } compilationStartAnalysisContext.RegisterOperationBlockAction(operationBlockAnalysisContext => { if (operationBlockAnalysisContext.OwningSymbol.Kind != SymbolKind.Method) { return; } var method = (IMethodSymbol) operationBlockAnalysisContext.OwningSymbol; if (!ContainsHandleProcessCorruptedStateExceptionsAttribute(method, compilationTypes)) { return; } foreach (var operation in operationBlockAnalysisContext.OperationBlocks) { var walker = new EmptyThrowInsideCatchAllWalker(compilationTypes); walker.Visit(operation); foreach (var catchClause in walker.CatchAllCatchClausesWithoutEmptyThrow) { operationBlockAnalysisContext.ReportDiagnostic(catchClause.Syntax.CreateDiagnostic(Rule, method.ToDisplayString())); } } }); }); }
public override void Initialize(AnalysisContext analysisContext) { analysisContext.EnableConcurrentExecution(); analysisContext.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.Analyze); analysisContext.RegisterCompilationStartAction(compilationStartAnalysisContext => { var compilationTypes = new CompilationSecurityTypes(compilationStartAnalysisContext.Compilation); if (compilationTypes.HandleProcessCorruptedStateExceptionsAttribute == null) { return; } compilationStartAnalysisContext.RegisterOperationBlockAction(operationBlockAnalysisContext => { if (operationBlockAnalysisContext.OwningSymbol.Kind != SymbolKind.Method) { return; } var method = (IMethodSymbol)operationBlockAnalysisContext.OwningSymbol; if (!ContainsHandleProcessCorruptedStateExceptionsAttribute(method, compilationTypes)) { return; } foreach (var operation in operationBlockAnalysisContext.OperationBlocks) { var walker = new EmptyThrowInsideCatchAllWalker(compilationTypes); walker.Visit(operation); foreach (var catchClause in walker.CatchAllCatchClausesWithoutEmptyThrow) { operationBlockAnalysisContext.ReportDiagnostic(catchClause.Syntax.CreateDiagnostic(Rule, method.ToDisplayString())); } } }); }); }