Beispiel #1
0
 /// <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);
 }
Beispiel #2
0
        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);
            }
        }
Beispiel #3
0
        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);
        }