mirror of
https://github.com/chylex/.NET-Community-Toolkit.git
synced 2025-04-10 11:15:45 +02:00
Restore C# version check in ICommandGenerator
This commit is contained in:
parent
b354891cc2
commit
4667ba2ecd
CommunityToolkit.Mvvm.SourceGenerators
@ -95,4 +95,24 @@ public static void ReportDiagnostics(this IncrementalGeneratorInitializationCont
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/// <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="isSupported">An <see cref="IncrementalValueProvider{TValue}"/> instance indicating support for a feature.</param>
|
||||
/// <param name="diagnostic">The <see cref="Diagnostic"/> to emit if <paramref name="isSupported"/> fails.</param>
|
||||
public static void ReportDiagnosticsIsNotSupported(
|
||||
this IncrementalGeneratorInitializationContext context,
|
||||
IncrementalValueProvider<bool> isSupported,
|
||||
Diagnostic diagnostic)
|
||||
{
|
||||
context.RegisterSourceOutput(isSupported, (context, isSupported) =>
|
||||
{
|
||||
if (!isSupported)
|
||||
{
|
||||
context.ReportDiagnostic(diagnostic);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -29,12 +29,23 @@ public sealed partial class ICommandGenerator : IIncrementalGenerator
|
||||
/// <inheritdoc/>
|
||||
public void Initialize(IncrementalGeneratorInitializationContext context)
|
||||
{
|
||||
// Validate the language version
|
||||
IncrementalValueProvider<bool> isGeneratorSupported =
|
||||
context.ParseOptionsProvider
|
||||
.Select(static (item, _) => item is CSharpParseOptions { LanguageVersion: >= LanguageVersion.CSharp9 });
|
||||
|
||||
// Emit the diagnostic, if needed
|
||||
context.ReportDiagnosticsIsNotSupported(isGeneratorSupported, Diagnostic.Create(UnsupportedCSharpLanguageVersionError, null));
|
||||
|
||||
// Get all method declarations with at least one attribute
|
||||
IncrementalValuesProvider<IMethodSymbol> methodSymbols =
|
||||
context.SyntaxProvider
|
||||
.CreateSyntaxProvider(
|
||||
static (node, _) => node is MethodDeclarationSyntax { Parent: ClassDeclarationSyntax, AttributeLists.Count: > 0 },
|
||||
static (context, _) => (IMethodSymbol)context.SemanticModel.GetDeclaredSymbol(context.Node)!);
|
||||
static (context, _) => (IMethodSymbol)context.SemanticModel.GetDeclaredSymbol(context.Node)!)
|
||||
.Combine(isGeneratorSupported)
|
||||
.Where(static item => item.Right)
|
||||
.Select(static (item, _) => item.Left);
|
||||
|
||||
// Filter the methods using [ICommand]
|
||||
IncrementalValuesProvider<(IMethodSymbol Symbol, AttributeData Attribute)> methodSymbolsWithAttributeData =
|
||||
|
Loading…
Reference in New Issue
Block a user