コード例 #1
0
        public void Initialize(IncrementalGeneratorInitializationContext context)
        {
            IncrementalValuesProvider <TypeDeclarationSyntax> providerTypes = context.SyntaxProvider.CreateSyntaxProvider(
                (node, _) => SyntaxCollector.IsCandidateType(node),
                (syntaxContext, _) => (TypeDeclarationSyntax)syntaxContext.Node);

            IncrementalValuesProvider <InvocationExpressionSyntax> getServiceCalls = context.SyntaxProvider.CreateSyntaxProvider(
                (node, _) => SyntaxCollector.IsGetServiceExpression(node),
                (syntaxContext, _) => (InvocationExpressionSyntax)syntaxContext.Node);

            var collectedServiceCalls = getServiceCalls.Collect();

            var providers = providerTypes.Combine(collectedServiceCalls).Combine(context.CompilationProvider);

            context.RegisterSourceOutput(providers, (productionContext, inputs) =>
                                         Execute(new GeneratorContext(
                                                     productionContext,
                                                     ImmutableArray.Create(inputs.Item1.Item1),
                                                     inputs.Item1.Item2,
                                                     inputs.Item2)));

            context.RegisterPostInitializationOutput(c =>
            {
                c.AddSource("Attributes.cs", ReadAttributesFile());
            });
        }
コード例 #2
0
    public GeneratorContext(CompilationAnalysisContext compilationAnalysisContext, SyntaxCollector syntaxCollector)
    {
        _compilationAnalysisContext = compilationAnalysisContext;

        CandidateGetServiceCalls = syntaxCollector.InvocationExpressions;
        CandidateTypes           = syntaxCollector.CandidateTypes;
        Compilation = compilationAnalysisContext.Compilation;
        _sourceProductionContext = null;
    }
コード例 #3
0
    public override void Initialize(AnalysisContext context)
    {
        context.EnableConcurrentExecution();
        context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.Analyze | GeneratedCodeAnalysisFlags.ReportDiagnostics);
        context.RegisterCompilationStartAction(compilationStartAnalysisContext =>
        {
            var syntaxCollector = new SyntaxCollector();
            compilationStartAnalysisContext.RegisterSyntaxNodeAction(analysisContext =>
            {
                syntaxCollector.OnVisitSyntaxNode(analysisContext.Node);
            }, SyntaxKind.ClassDeclaration, SyntaxKind.InterfaceDeclaration, SyntaxKind.InvocationExpression);

            compilationStartAnalysisContext.RegisterCompilationEndAction(compilationContext =>
            {
                Execute(new GeneratorContext(compilationContext, syntaxCollector));
            });
        });
    }
コード例 #4
0
 public void Setup()
 {
     _collector = new SyntaxCollector();
 }
コード例 #5
0
 public TemplateLexer(SyntaxCollector collector)
 {
     this.collector = collector;
 }
コード例 #6
0
 public GivenASyntaxCollector()
 {
     _collector = new SyntaxCollector();
 }