Exemple #1
0
 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);
                    }
                }
            }));
        }
Exemple #3
0
 internal void OnMiddlewareAnalysisCompleted(MiddlewareAnalysis analysis)
 {
     MiddlewareAnalysisCompleted?.Invoke(this, analysis);
 }