public void ReportAnalysis(MiddlewareAnalysis analysis) { ReportAnalysisCore(analysis.StartupType, analysis); _analyzer.OnMiddlewareAnalysisCompleted(analysis); }
private void StartupAnalyzerEventSink_MiddlewareAnalysisCompleted(object sender, MiddlewareAnalysis e) { // Fire-and-forget. We need to get to the UI thread for DTE/IVsHierarchy. JoinableCollection.Add(JoinableFactory.RunAsync(async() => { await JoinableFactory.SwitchToMainThreadAsync(); var solution = _workspace.Value.CurrentSolution; var syntaxTrees = new HashSet <SyntaxTree>(); foreach (var syntax in e.ConfigureMethod.DeclaringSyntaxReferences) { syntaxTrees.Add(syntax.SyntaxTree); } var documentIds = syntaxTrees.Select(s => solution.GetDocumentId(s)); var hierarchies = documentIds.Select(d => _workspace.Value.GetHierarchy(d.ProjectId)).Where(h => h != null); foreach (var hierarchy in hierarchies) { if (hierarchy is IVsBrowseObjectContext context && context.UnconfiguredProject == ConfiguredProject.UnconfiguredProject) { var capabilities = ImmutableHashSet <string> .Empty; if (e.Middleware.Any(m => m.UseMethod.Name == "UseSignalR")) { capabilities = ImmutableHashSet.Create("_PublishSignalRService"); } await UpdateCapabilitiesAsync(capabilities, CancellationToken.None).ConfigureAwait(false); } } })); }
internal void OnMiddlewareAnalysisCompleted(MiddlewareAnalysis analysis) { MiddlewareAnalysisCompleted?.Invoke(this, analysis); }