Skip to content

Commit c38a4a2

Browse files
committed
Disable generation of header files if no targets are present
1 parent eff7168 commit c38a4a2

File tree

3 files changed

+26
-2
lines changed

3 files changed

+26
-2
lines changed

CommunityToolkit.Mvvm.SourceGenerators/ComponentModel/ObservableValidatorValidateAllPropertiesGenerator.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
using System.Linq;
66
using System.Text;
7+
using CommunityToolkit.Mvvm.SourceGenerators.Extensions;
78
using CommunityToolkit.Mvvm.SourceGenerators.Input.Models;
89
using Microsoft.CodeAnalysis;
910
using Microsoft.CodeAnalysis.CSharp;
@@ -42,7 +43,7 @@ public void Initialize(IncrementalGeneratorInitializationContext context)
4243
.Select(static (item, _) => item.Length > 0);
4344

4445
// Generate the header file with the attributes
45-
context.RegisterImplementationSourceOutput(isHeaderFileNeeded, static (context, item) =>
46+
context.RegisterConditionalImplementationSourceOutput(isHeaderFileNeeded, static context =>
4647
{
4748
CompilationUnitSyntax compilationUnit = Execute.GetSyntax();
4849

CommunityToolkit.Mvvm.SourceGenerators/Extensions/IncrementalGeneratorInitializationContextExtensions.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// The .NET Foundation licenses this file to you under the MIT license.
33
// See the LICENSE file in the project root for more information.
44

5+
using System;
56
using Microsoft.CodeAnalysis;
67
using Microsoft.CodeAnalysis.CSharp;
78

@@ -62,4 +63,25 @@ public static void FilterWithLanguageVersion<T>(
6263
.Where(static item => item.IsGeneratorSupported)
6364
.Select(static (item, _) => item.Data);
6465
}
66+
67+
/// <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"/>.
70+
/// </summary>
71+
/// <param name="context">The input <see cref="IncrementalGeneratorInitializationContext"/> value being used.</param>
72+
/// <param name="source">The source <see cref="IncrementalValueProvider{TValues}"/> instance.</param>
73+
/// <param name="action">The conditional <see cref="Action{T}"/> to invoke.</param>
74+
public static void RegisterConditionalImplementationSourceOutput(
75+
this IncrementalGeneratorInitializationContext context,
76+
IncrementalValueProvider<bool> source,
77+
Action<SourceProductionContext> action)
78+
{
79+
context.RegisterImplementationSourceOutput(source, (context, flag) =>
80+
{
81+
if (flag)
82+
{
83+
action(context);
84+
}
85+
});
86+
}
6587
}

CommunityToolkit.Mvvm.SourceGenerators/Messaging/IMessengerRegisterAllGenerator.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using System.Collections.Immutable;
66
using System.Linq;
77
using System.Text;
8+
using CommunityToolkit.Mvvm.SourceGenerators.Extensions;
89
using CommunityToolkit.Mvvm.SourceGenerators.Input.Models;
910
using Microsoft.CodeAnalysis;
1011
using Microsoft.CodeAnalysis.CSharp;
@@ -48,7 +49,7 @@ public void Initialize(IncrementalGeneratorInitializationContext context)
4849
.Select(static (item, _) => item.Length > 0);
4950

5051
// Generate the header file with the attributes
51-
context.RegisterImplementationSourceOutput(isHeaderFileNeeded, static (context, item) =>
52+
context.RegisterConditionalImplementationSourceOutput(isHeaderFileNeeded, static context =>
5253
{
5354
CompilationUnitSyntax compilationUnit = Execute.GetSyntax();
5455

0 commit comments

Comments
 (0)