/// <summary> /// Add a new provider. /// </summary> /// <param name="provider">Provider to add</param> /// <exception cref="System.ArgumentNullException">provider</exception> public void Add(IContextCollectionProvider provider) { if (provider == null) { throw new ArgumentNullException("provider"); } _providers.Add(provider); }
private IEnumerable <IEnumerable <Diagnostic> > RunSymbolAnalyzerGroup(IServiceProvider serviceProvider, SyntaxNode syntaxNode, IContextCollectionProvider externalContextProvider) { foreach (var(symbolAction, requestKinds) in SymbolActionGroups) { var semanticModel = GetSemanticModel(syntaxNode); var symbol = semanticModel.GetDeclaredSymbol(syntaxNode, _generatorContext.CancellationToken) ?? semanticModel.GetSymbolInfo(syntaxNode, _generatorContext.CancellationToken).Symbol; if (symbol is null) { continue; } if (!requestKinds.Contains(symbol.Kind)) { continue; } yield return(symbolAction.InvokeScope(serviceProvider, symbol, _generatorContext.Compilation, GetNextContext, externalContextProvider, _generatorContext.CancellationToken)); SymbolAnalysisContextSource GetNextContext(ISymbol symbol, bool isEntryPoint) => new SymbolAnalysisContextSource(symbol, _generatorContext.Compilation, _generatorContext.AdditionalFiles, _generatorContext.AnalyzerConfigOptions, _generatorContext.CancellationToken); } }
private IEnumerable <IEnumerable <Diagnostic> > RunSyntaxAnalyzerGroup(IServiceProvider serviceProvider, SyntaxNode syntaxNode, IContextCollectionProvider externalContextProvider) { return(SyntaxActionGroups.Where(x => x.SelectedEnumKinds.Contains(syntaxNode.Kind())) .Select(x => x.Group.InvokeScope(serviceProvider, syntaxNode, _generatorContext.Compilation, GetNextContext, externalContextProvider, _generatorContext.CancellationToken))); SyntaxNodeAnalysisContextSource GetNextContext(SyntaxNode nextSyntax, bool isEntryPoint) => new SyntaxNodeAnalysisContextSource(nextSyntax, GetSemanticModel(nextSyntax), _generatorContext.Compilation, _generatorContext.AdditionalFiles, _generatorContext.AnalyzerConfigOptions, _generatorContext.CancellationToken); }