Пример #1
0
 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);
        }