Skip to content

Commit baada1a

Browse files
committed
Update RegisterConditionalImplementationSourceOutput extension
1 parent 40b492d commit baada1a

File tree

3 files changed

+26
-24
lines changed

3 files changed

+26
-24
lines changed

CommunityToolkit.Mvvm.SourceGenerators/ComponentModel/ObservableValidatorValidateAllPropertiesGenerator.cs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,17 +47,18 @@ public void Initialize(IncrementalGeneratorInitializationContext context)
4747
context.CompilationProvider
4848
.Select(static (item, _) => item.GetTypeByMetadataName("System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute") is { DeclaredAccessibility: Accessibility.Public });
4949

50+
// Gather the conditional flag and attribute availability
51+
IncrementalValueProvider<(bool IsHeaderFileNeeded, bool IsDynamicallyAccessedMembersAttributeAvailable)> headerFileInfo =
52+
isHeaderFileNeeded.Combine(isDynamicallyAccessedMembersAttributeAvailable);
53+
5054
// Generate the header file with the attributes
51-
context.RegisterImplementationSourceOutput(isHeaderFileNeeded.Combine(isDynamicallyAccessedMembersAttributeAvailable), static (context, item) =>
55+
context.RegisterConditionalImplementationSourceOutput(headerFileInfo, static (context, item) =>
5256
{
53-
if (item.Left)
54-
{
55-
CompilationUnitSyntax compilationUnit = Execute.GetSyntax(item.Right);
57+
CompilationUnitSyntax compilationUnit = Execute.GetSyntax(item);
5658

57-
context.AddSource(
58-
hintName: "__ObservableValidatorExtensions.cs",
59-
sourceText: SourceText.From(compilationUnit.ToFullString(), Encoding.UTF8));
60-
}
59+
context.AddSource(
60+
hintName: "__ObservableValidatorExtensions.cs",
61+
sourceText: SourceText.From(compilationUnit.ToFullString(), Encoding.UTF8));
6162
});
6263

6364
// Generate the class with all validation methods

CommunityToolkit.Mvvm.SourceGenerators/Extensions/IncrementalGeneratorInitializationContextExtensions.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -65,22 +65,22 @@ public static void FilterWithLanguageVersion<T>(
6565
}
6666

6767
/// <summary>
68-
/// Conditionally invokes <see cref="IncrementalGeneratorInitializationContext.RegisterImplementationSourceOutput{TSource}(IncrementalValueProvider{TSource}, System.Action{SourceProductionContext, TSource})"/>
69-
/// if the value produced by the input <see cref="IncrementalValueProvider{TValue}"/> is <see langword="true"/>.
68+
/// Conditionally invokes <see cref="IncrementalGeneratorInitializationContext.RegisterImplementationSourceOutput{TSource}(IncrementalValueProvider{TSource}, Action{SourceProductionContext, TSource})"/>
69+
/// if the value produced by the input <see cref="IncrementalValueProvider{TValue}"/> is <see langword="true"/>, and also supplying a given input state.
7070
/// </summary>
7171
/// <param name="context">The input <see cref="IncrementalGeneratorInitializationContext"/> value being used.</param>
7272
/// <param name="source">The source <see cref="IncrementalValueProvider{TValues}"/> instance.</param>
7373
/// <param name="action">The conditional <see cref="Action{T}"/> to invoke.</param>
74-
public static void RegisterConditionalImplementationSourceOutput(
74+
public static void RegisterConditionalImplementationSourceOutput<T>(
7575
this IncrementalGeneratorInitializationContext context,
76-
IncrementalValueProvider<bool> source,
77-
Action<SourceProductionContext> action)
76+
IncrementalValueProvider<(bool Condition, T State)> source,
77+
Action<SourceProductionContext, T> action)
7878
{
79-
context.RegisterImplementationSourceOutput(source, (context, flag) =>
79+
context.RegisterImplementationSourceOutput(source, (context, item) =>
8080
{
81-
if (flag)
81+
if (item.Condition)
8282
{
83-
action(context);
83+
action(context, item.State);
8484
}
8585
});
8686
}

CommunityToolkit.Mvvm.SourceGenerators/Messaging/IMessengerRegisterAllGenerator.cs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -62,17 +62,18 @@ item.Symbol.DeclaringSyntaxReferences[0] is SyntaxReference syntaxReference &&
6262
context.CompilationProvider
6363
.Select(static (item, _) => item.GetTypeByMetadataName("System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembersAttribute") is { DeclaredAccessibility: Accessibility.Public });
6464

65+
// Gather the conditional flag and attribute availability
66+
IncrementalValueProvider<(bool IsHeaderFileNeeded, bool IsDynamicallyAccessedMembersAttributeAvailable)> headerFileInfo =
67+
isHeaderFileNeeded.Combine(isDynamicallyAccessedMembersAttributeAvailable);
68+
6569
// Generate the header file with the attributes
66-
context.RegisterImplementationSourceOutput(isHeaderFileNeeded.Combine(isDynamicallyAccessedMembersAttributeAvailable), static (context, item) =>
70+
context.RegisterConditionalImplementationSourceOutput(headerFileInfo, static (context, item) =>
6771
{
68-
if (item.Left)
69-
{
70-
CompilationUnitSyntax compilationUnit = Execute.GetSyntax(item.Right);
72+
CompilationUnitSyntax compilationUnit = Execute.GetSyntax(item);
7173

72-
context.AddSource(
73-
hintName: "__IMessengerExtensions.cs",
74-
sourceText: SourceText.From(compilationUnit.ToFullString(), Encoding.UTF8));
75-
}
74+
context.AddSource(
75+
hintName: "__IMessengerExtensions.cs",
76+
sourceText: SourceText.From(compilationUnit.ToFullString(), Encoding.UTF8));
7677
});
7778

7879
// Generate the class with all registration methods

0 commit comments

Comments
 (0)