public void CreateAnalyzerWithinCodeBlock(CodeBlockStartAnalysisContext <SyntaxKind> context) { var blockAnalyzer = new CodeBlockAnalyzer(); context.RegisterCodeBlockEndAction(blockAnalyzer.AnalyzeCodeBlock); context.RegisterSyntaxNodeAction(blockAnalyzer.AnalyzeNode, blockAnalyzer.SyntaxKindsOfInterest.ToArray()); }
/// <summary> /// Initialize the analyzer. /// </summary> /// <param name="analysisContext">Analyzer Context.</param> public override void Initialize(AnalysisContext analysisContext) { analysisContext.RegisterCompilationStartAction( (context) => { var compilationTypes = new CompilationSecurityTypes(context.Compilation); if (compilationTypes.HandleProcessCorruptedStateExceptionsAttribute != null) { context.RegisterCodeBlockStartAction <TLanguageKindEnum>( codeBlockStartContext => { ISymbol owningSymbol = codeBlockStartContext.OwningSymbol; if (owningSymbol.Kind == SymbolKind.Method) { var method = (IMethodSymbol)owningSymbol; ImmutableArray <AttributeData> attributes = method.GetAttributes(); if (attributes.FirstOrDefault(attribute => attribute.AttributeClass == compilationTypes.HandleProcessCorruptedStateExceptionsAttribute) != null) { CodeBlockAnalyzer analyzer = GetAnalyzer(compilationTypes, owningSymbol, codeBlockStartContext.CodeBlock); codeBlockStartContext.RegisterSyntaxNodeAction(analyzer.AnalyzeCatchClause, analyzer.CatchClauseKind); codeBlockStartContext.RegisterSyntaxNodeAction(analyzer.AnalyzeThrowStatement, analyzer.ThrowStatementKind); codeBlockStartContext.RegisterCodeBlockEndAction(analyzer.AnalyzeCodeBlockEnd); } } }); } }); }