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
        /// <inheritdoc />
        public void Initialize(IncrementalGeneratorInitializationContext context)
        {
            // Register the attribute source
            context.RegisterPostInitializationOutput(ctx => ctx.AddSource("TagAttribute.g.cs", Sources.Attributes));

            IncrementalValuesProvider <ClassDeclarationSyntax> classDeclarations =
                context.SyntaxProvider.CreateSyntaxProvider(IsAttributedProperty, GetPotentialClassesForGeneration)
                .Where(static m => m is not null) !;
예제 #3
0
        // Example input:
        //
        //    [EventSource(Guid = "49592C0F-5A05-516D-AA4B-A64E02026C89", Name = "System.Runtime")]
        //    [EventSourceAutoGenerate]
        //    internal sealed partial class RuntimeEventSource : EventSource
        //
        // Example generated output:
        //
        //     using System;
        //
        //     namespace System.Diagnostics.Tracing
        //     {
        //         partial class RuntimeEventSource
        //         {
        //             private RuntimeEventSource() : base(new Guid(0x49592c0f,0x5a05,0x516d,0xaa,0x4b,0xa6,0x4e,0x02,0x02,0x6c,0x89), "System.Runtime") { }
        //
        //             private protected override ReadOnlySpan<byte> ProviderMetadata => new byte[] { 0x11, 0x0, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x0, };
        //         }
        //     }

        public void Initialize(IncrementalGeneratorInitializationContext context)
        {
            IncrementalValuesProvider <EventSourceClass> eventSourceClasses =
                context.SyntaxProvider
                .CreateSyntaxProvider(IsSyntaxTargetForGeneration, GetSemanticTargetForGeneration)
                .Where(x => x is not null);

            context.RegisterSourceOutput(eventSourceClasses, EmitSourceFile);
        }
 public void Initialize(IncrementalGeneratorInitializationContext context)
 {
     IncrementalValuesProvider <ClassDeclarationSyntax> classDeclarations = context.SyntaxProvider
                                                                            .ForAttributeWithMetadataName(
         context,
         Parser.LoggerMessageAttribute,
         (node, _) => node is MethodDeclarationSyntax,
         (context, _) => context.TargetNode.Parent as ClassDeclarationSyntax)
                                                                            .Where(static m => m is not null);
예제 #5
0
        // Example input:
        //
        //    [EventSource(Guid = "49592C0F-5A05-516D-AA4B-A64E02026C89", Name = "System.Runtime")]
        //    [EventSourceAutoGenerate]
        //    internal sealed partial class RuntimeEventSource : EventSource
        //
        // Example generated output:
        //
        //     using System;
        //
        //     namespace System.Diagnostics.Tracing
        //     {
        //         partial class RuntimeEventSource
        //         {
        //             private RuntimeEventSource() : base(new Guid(0x49592c0f,0x5a05,0x516d,0xaa,0x4b,0xa6,0x4e,0x02,0x02,0x6c,0x89), "System.Runtime") { }
        //
        //             private protected override ReadOnlySpan<byte> ProviderMetadata => new byte[] { 0x11, 0x0, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x0, };
        //         }
        //     }

        public void Initialize(IncrementalGeneratorInitializationContext context)
        {
            const string EventSourceAutoGenerateAttribute = "System.Diagnostics.Tracing.EventSourceAutoGenerateAttribute";

            IncrementalValuesProvider <EventSourceClass> eventSourceClasses =
                context.SyntaxProvider.ForAttributeWithMetadataName(
                    context,
                    EventSourceAutoGenerateAttribute,
                    (node, _) => node is ClassDeclarationSyntax,
                    GetSemanticTargetForGeneration)
                .Where(x => x is not null);

            context.RegisterSourceOutput(eventSourceClasses, EmitSourceFile);
        }
        public void Initialize(IncrementalGeneratorInitializationContext context)
        {
            IncrementalValuesProvider <ClassDeclarationSyntax> classDeclarations = context.SyntaxProvider
                                                                                   .ForAttributeWithMetadataName(
                context,
                Parser.JsonSerializableAttributeFullName,
                (node, _) => node is ClassDeclarationSyntax,
                (context, _) => (ClassDeclarationSyntax)context.TargetNode);

            IncrementalValueProvider <(Compilation, ImmutableArray <ClassDeclarationSyntax>)> compilationAndClasses =
                context.CompilationProvider.Combine(classDeclarations.Collect());

            context.RegisterSourceOutput(compilationAndClasses, (spc, source) => Execute(source.Item1, source.Item2, spc));
        }
예제 #7
0
        internal static IncrementalValuesProvider <T> WithLambdaComparer <T>(this IncrementalValuesProvider <T> source, Func <T, T, bool> equal, Func <T, int> getHashCode)
        {
            var comparer = new LambdaComparer <T>(equal, getHashCode);

            return(source.WithComparer(comparer));
        }
예제 #8
0
 /// <inheritdoc/>
 public void Initialize(IncrementalGeneratorInitializationContext context)
 {
     // Get all declared struct symbols with the [AutoConstructor] attribute
     IncrementalValuesProvider <INamedTypeSymbol> structDeclarations =
         context.SyntaxProvider
         .CreateSyntaxProvider(
예제 #9
0
 public void Initialize(IncrementalGeneratorInitializationContext context)
 {
     IncrementalValuesProvider <ClassDeclarationSyntax> classDeclarations = context.SyntaxProvider
                                                                            .CreateSyntaxProvider(static (s, _) => Parser.IsSyntaxTargetForGeneration(s), static (ctx, _) => Parser.GetSemanticTargetForGeneration(ctx))
 /// <summary>
 /// Adds a comparer that will force the provider to be considered as cached if the razor options call for suppression
 /// </summary>
 internal static IncrementalValuesProvider <T> AsCachedIfSuppressed <T>(this IncrementalValuesProvider <T> provider, IncrementalValueProvider <bool> isSuppressedProvider)
     where T : notnull
 {
     return(provider.Combine(isSuppressedProvider).WithComparer(new RazorSourceGeneratorComparer <T>()).Select((pair, _) => pair.Left));
 }
예제 #11
0
 /// <summary>
 /// Registers an output node into an <see cref="IncrementalGeneratorInitializationContext"/> to output diagnostics.
 /// </summary>
 /// <param name="context">The input <see cref="IncrementalGeneratorInitializationContext"/> instance.</param>
 /// <param name="diagnostics">The input <see cref="IncrementalValuesProvider{TValues}"/> sequence of diagnostics.</param>
 public static void ReportDiagnostics(this IncrementalGeneratorInitializationContext context, IncrementalValuesProvider <Diagnostic> diagnostics)
 {
     context.RegisterSourceOutput(diagnostics, static (context, diagnostic) =>
    /// <inheritdoc />
    public void Initialize(IncrementalGeneratorInitializationContext context)
    {
        // Register the attribute source

        IncrementalValuesProvider <ClassDeclarationSyntax> classDeclarations =
            context.SyntaxProvider.CreateSyntaxProvider(