public static ServicesAnalysis CreateAndInitialize(StartupAnalysisContext context) { if (context == null) { throw new ArgumentNullException(nameof(context)); } var symbols = context.StartupSymbols; var analysis = new ServicesAnalysis((IMethodSymbol)context.OperationBlockStartAnalysisContext.OwningSymbol); var services = ImmutableArray.CreateBuilder <ServicesItem>(); context.OperationBlockStartAnalysisContext.RegisterOperationAction(context => { // We're looking for usage of extension methods, so we need to look at the 'this' parameter // rather than invocation.Instance. if (context.Operation is IInvocationOperation invocation && invocation.Instance == null && invocation.Arguments.Length >= 1 && invocation.Arguments[0].Parameter?.Type == symbols.IServiceCollection) { services.Add(new ServicesItem(invocation)); } }, OperationKind.Invocation); context.OperationBlockStartAnalysisContext.RegisterOperationBlockEndAction(context => { analysis.Services = services.ToImmutable(); }); return(analysis); }
internal static void OnServicesAnalysisCompleted(ServicesAnalysis analysis) { ServicesAnalysisCompleted?.Invoke(null, analysis); }
internal void OnServicesAnalysisCompleted(ServicesAnalysis analysis) { ServicesAnalysisCompleted?.Invoke(this, analysis); StartupAnalyzerEventSink.OnServicesAnalysisCompleted(analysis); }
public void ReportAnalysis(ServicesAnalysis analysis) { ReportAnalysisCore(analysis.StartupType, analysis); _analyzer.OnServicesAnalysisCompleted(analysis); }
internal void OnServicesAnalysisCompleted(ServicesAnalysis analysis) { ServicesAnalysisCompleted?.Invoke(this, analysis); }