提交 f2ab5ef1 编写于 作者: K Kevin Halverson

Only create one instance of each incremental analyzer...

The previous code was pulling on the Select IEnumerable twice, causing
CreateIncrementalAnalyzer to be called twice.
上级 6853f8c4
......@@ -75,10 +75,9 @@ private IDiagnosticAnalyzerService GetDiagnosticAnalyzerService(IEnumerable<Lazy
private static ImmutableArray<IIncrementalAnalyzer> GetActiveFileIncrementalAnalyzers(
Registration registration, IEnumerable<Lazy<IIncrementalAnalyzerProvider, IncrementalAnalyzerProviderMetadata>> providers)
{
var analyzers = providers.Where(p => p.Metadata.HighPriorityForActiveFile && p.Metadata.WorkspaceKinds.Contains(registration.Workspace.Kind))
.Select(p => p.Value.CreateIncrementalAnalyzer(registration.Workspace));
var matchingProviders = providers.Where(p => p.Metadata.HighPriorityForActiveFile && p.Metadata.WorkspaceKinds.Contains(registration.Workspace.Kind));
var orderedAnalyzers = OrderAnalyzers(analyzers);
var orderedAnalyzers = GetOrderedAnalyzers(registration, matchingProviders);
SolutionCrawlerLogger.LogActiveFileAnalyzers(registration.CorrelationId, registration.Workspace, orderedAnalyzers);
return orderedAnalyzers;
......@@ -87,20 +86,21 @@ private IDiagnosticAnalyzerService GetDiagnosticAnalyzerService(IEnumerable<Lazy
private static ImmutableArray<IIncrementalAnalyzer> GetIncrementalAnalyzers(
Registration registration, IEnumerable<Lazy<IIncrementalAnalyzerProvider, IncrementalAnalyzerProviderMetadata>> providers)
{
var analyzers = providers.Where(p => p.Metadata.WorkspaceKinds.Contains(registration.Workspace.Kind))
.Select(p => p.Value.CreateIncrementalAnalyzer(registration.Workspace));
var matchingProviders = providers.Where(p => p.Metadata.WorkspaceKinds.Contains(registration.Workspace.Kind));
var orderedAnalyzers = OrderAnalyzers(analyzers);
var orderedAnalyzers = GetOrderedAnalyzers(registration, matchingProviders);
SolutionCrawlerLogger.LogAnalyzers(registration.CorrelationId, registration.Workspace, orderedAnalyzers);
return orderedAnalyzers;
}
private static ImmutableArray<IIncrementalAnalyzer> OrderAnalyzers(IEnumerable<IIncrementalAnalyzer> analyzers)
private static ImmutableArray<IIncrementalAnalyzer> GetOrderedAnalyzers(
Registration registration, IEnumerable<Lazy<IIncrementalAnalyzerProvider, IncrementalAnalyzerProviderMetadata>> providers)
{
return SpecializedCollections.SingletonEnumerable(analyzers.FirstOrDefault(a => a is BaseDiagnosticIncrementalAnalyzer))
.Concat(analyzers.Where(a => !(a is BaseDiagnosticIncrementalAnalyzer)))
.WhereNotNull().ToImmutableArray();
// Sort list so BaseDiagnosticIncrementalAnalyzers (if any) come first. OrderBy orders 'false' keys before 'true'.
return providers.Select(p => p.Value.CreateIncrementalAnalyzer(registration.Workspace))
.OrderBy(a => !(a is BaseDiagnosticIncrementalAnalyzer))
.ToImmutableArray();
}
public void Enqueue(WorkItem item)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册