public sealed override void Initialize(AnalysisContext context) { context.RegisterCompilationStartAction(c => { var analyzer = new CompilationAnalyzer(c.Compilation); c.RegisterSyntaxTreeAction(analyzer.AnalyzeSyntaxTree); c.RegisterSemanticModelAction(CompilationAnalyzer.AnalyzeSemanticModel); }); }
//creates an instance of a class to perform the analysis statefully, and registers for various actions private void SetupAnalysis(CompilationStartAnalysisContext context) { //state collector CompilationAnalyzer compilationAnalyzer = new CompilationAnalyzer(); //collects all class, method, field, and property symbols as state context.RegisterSymbolAction(compilationAnalyzer.AddClass, SymbolKind.NamedType); context.RegisterSymbolAction(compilationAnalyzer.AddMethod, SymbolKind.Method); context.RegisterSymbolAction(compilationAnalyzer.AddField, SymbolKind.Field); context.RegisterSymbolAction(compilationAnalyzer.AddProperty, SymbolKind.Property); //analyzes the state that has been collected context.RegisterCompilationEndAction(compilationAnalyzer.ReportCompilationEndDiagnostics); }