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()); }); }
/// <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) !;
// 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);
// 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)); }
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)); }
/// <inheritdoc/> public void Initialize(IncrementalGeneratorInitializationContext context) { // Get all declared struct symbols with the [AutoConstructor] attribute IncrementalValuesProvider <INamedTypeSymbol> structDeclarations = context.SyntaxProvider .CreateSyntaxProvider(
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)); }
/// <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(