public IncrementalAnalyzerProcessor( IAsynchronousOperationListener listener, IEnumerable <Lazy <IIncrementalAnalyzerProvider, IncrementalAnalyzerProviderMetadata> > analyzerProviders, Registration registration, int highBackOffTimeSpanInMs, int normalBackOffTimeSpanInMs, int lowBackOffTimeSpanInMs, CancellationToken shutdownToken) { _logAggregator = new LogAggregator(); _listener = listener; _registration = registration; _cacheService = registration.GetService <IProjectCacheService>(); _lazyDiagnosticAnalyzerService = new Lazy <IDiagnosticAnalyzerService>(() => GetDiagnosticAnalyzerService(analyzerProviders)); var analyzersGetter = new AnalyzersGetter(analyzerProviders); // create analyzers lazily. var lazyActiveFileAnalyzers = new Lazy <ImmutableArray <IIncrementalAnalyzer> >(() => GetIncrementalAnalyzers(_registration, analyzersGetter, onlyHighPriorityAnalyzer: true)); var lazyAllAnalyzers = new Lazy <ImmutableArray <IIncrementalAnalyzer> >(() => GetIncrementalAnalyzers(_registration, analyzersGetter, onlyHighPriorityAnalyzer: false)); // event and worker queues _documentTracker = _registration.GetService <IDocumentTrackingService>(); var globalNotificationService = _registration.GetService <IGlobalOperationNotificationService>(); _highPriorityProcessor = new HighPriorityProcessor(listener, this, lazyActiveFileAnalyzers, highBackOffTimeSpanInMs, shutdownToken); _normalPriorityProcessor = new NormalPriorityProcessor(listener, this, lazyAllAnalyzers, globalNotificationService, normalBackOffTimeSpanInMs, shutdownToken); _lowPriorityProcessor = new LowPriorityProcessor(listener, this, lazyAllAnalyzers, globalNotificationService, lowBackOffTimeSpanInMs, shutdownToken); }
private static ImmutableArray <IIncrementalAnalyzer> GetIncrementalAnalyzers( Registration registration, AnalyzersGetter analyzersGetter, bool onlyHighPriorityAnalyzer ) { var orderedAnalyzers = analyzersGetter.GetOrderedAnalyzers( registration.Workspace, onlyHighPriorityAnalyzer ); SolutionCrawlerLogger.LogAnalyzers( registration.CorrelationId, registration.Workspace, orderedAnalyzers, onlyHighPriorityAnalyzer ); return(orderedAnalyzers); }
public IncrementalAnalyzerProcessor( IAsynchronousOperationListener listener, IEnumerable <Lazy <IIncrementalAnalyzerProvider, IncrementalAnalyzerProviderMetadata> > analyzerProviders, bool initializeLazily, Registration registration, TimeSpan highBackOffTimeSpan, TimeSpan normalBackOffTimeSpan, TimeSpan lowBackOffTimeSpan, CancellationToken shutdownToken) { _listener = listener; _registration = registration; _cacheService = registration.Workspace.Services.GetService <IProjectCacheService>(); _lazyDiagnosticAnalyzerService = new Lazy <IDiagnosticAnalyzerService?>(() => GetDiagnosticAnalyzerService(analyzerProviders)); var analyzersGetter = new AnalyzersGetter(analyzerProviders); // create analyzers lazily. var lazyActiveFileAnalyzers = new Lazy <ImmutableArray <IIncrementalAnalyzer> >(() => GetIncrementalAnalyzers(_registration, analyzersGetter, onlyHighPriorityAnalyzer: true)); var lazyAllAnalyzers = new Lazy <ImmutableArray <IIncrementalAnalyzer> >(() => GetIncrementalAnalyzers(_registration, analyzersGetter, onlyHighPriorityAnalyzer: false)); if (!initializeLazily) { // realize all analyzer right away _ = lazyActiveFileAnalyzers.Value; _ = lazyAllAnalyzers.Value; } // event and worker queues _documentTracker = _registration.Workspace.Services.GetRequiredService <IDocumentTrackingService>(); var globalNotificationService = _registration.Workspace.Services.GetRequiredService <IGlobalOperationNotificationService>(); _highPriorityProcessor = new HighPriorityProcessor(listener, this, lazyActiveFileAnalyzers, highBackOffTimeSpan, shutdownToken); _normalPriorityProcessor = new NormalPriorityProcessor(listener, this, lazyAllAnalyzers, globalNotificationService, normalBackOffTimeSpan, shutdownToken); _lowPriorityProcessor = new LowPriorityProcessor(listener, this, lazyAllAnalyzers, globalNotificationService, lowBackOffTimeSpan, shutdownToken); }