Extract RouteFilter generation

This commit is contained in:
2024-09-25 20:04:11 +02:00
parent c737174d5a
commit 6688bfc673
3 changed files with 43 additions and 28 deletions
@@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework> <TargetFramework>netstandard2.0</TargetFramework>
<Version>0.8.10</Version> <Version>0.8.11</Version>
<LangVersion>latest</LangVersion> <LangVersion>latest</LangVersion>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild> <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Authors>Alexandru Macocian</Authors> <Authors>Alexandru Macocian</Authors>
@@ -0,0 +1,42 @@
using Microsoft.CodeAnalysis;
using Sybil;
using System;
namespace Net.Sdk.Web.Extensions.SourceGenerators;
[Generator(LanguageNames.CSharp)]
#nullable enable
public class RouteFilterAttributeGenerator : IIncrementalGenerator
{
public void Initialize(IncrementalGeneratorInitializationContext context)
{
context.RegisterPostInitializationOutput(GenerateRouteFilterAttribute);
}
private static void GenerateRouteFilterAttribute(IncrementalGeneratorPostInitializationContext context)
{
var builder = SyntaxBuilder.CreateCompilationUnit()
.WithNamespace(
SyntaxBuilder.CreateNamespace(Constants.Namespace)
.WithClass(SyntaxBuilder.CreateClass(Constants.RouteFilterAttributeName)
.WithModifier(Constants.Public)
.WithConstructor(SyntaxBuilder.CreateConstructor(Constants.RouteFilterAttributeName)
.WithModifier(Constants.Public))
.WithAttribute(SyntaxBuilder.CreateAttribute("AttributeUsage")
.WithArgument(AttributeTargets.Class | AttributeTargets.Method)
.WithArgument("Inherited", false)
.WithArgument("AllowMultiple", true))
.WithBaseClass(nameof(Attribute))
.WithProperty(SyntaxBuilder.CreateProperty($"{Constants.TypeType}?", Constants.RouteFilterTypePropertyName)
.WithModifier(Constants.Public)
.WithAccessor(SyntaxBuilder.CreateGetter())
.WithAccessor(SyntaxBuilder.CreateSetter()))));
var syntax = builder.Build();
var source = syntax.ToFullString();
context.AddSource($"{Constants.RouteFilterAttributeName}.g", $"#nullable enable\n{source}\n#nullable disable\n");
}
}
#nullable disable
@@ -16,8 +16,6 @@ public class UseRoutesGenerator : IIncrementalGenerator
{ {
public void Initialize(IncrementalGeneratorInitializationContext context) public void Initialize(IncrementalGeneratorInitializationContext context)
{ {
context.RegisterPostInitializationOutput(GenerateRouteFilterAttribute);
var classDeclarations = context.SyntaxProvider.CreateSyntaxProvider( var classDeclarations = context.SyntaxProvider.CreateSyntaxProvider(
predicate: static (s, _) => s is ClassDeclarationSyntax, predicate: static (s, _) => s is ClassDeclarationSyntax,
transform: static (ctx, _) => GetFilteredClassDeclarationSyntax(ctx)).Where(static c => c is not null); transform: static (ctx, _) => GetFilteredClassDeclarationSyntax(ctx)).Where(static c => c is not null);
@@ -293,31 +291,6 @@ public class UseRoutesGenerator : IIncrementalGenerator
return GetParentOfType<T>(syntaxNode.Parent); return GetParentOfType<T>(syntaxNode.Parent);
} }
private static void GenerateRouteFilterAttribute(IncrementalGeneratorPostInitializationContext context)
{
var builder = SyntaxBuilder.CreateCompilationUnit()
.WithNamespace(
SyntaxBuilder.CreateNamespace(Constants.Namespace)
.WithClass(SyntaxBuilder.CreateClass(Constants.RouteFilterAttributeName)
.WithModifier(Constants.Public)
.WithConstructor(SyntaxBuilder.CreateConstructor(Constants.RouteFilterAttributeName)
.WithModifier(Constants.Public))
.WithAttribute(SyntaxBuilder.CreateAttribute("AttributeUsage")
.WithArgument(AttributeTargets.Class | AttributeTargets.Method)
.WithArgument("Inherited", false)
.WithArgument("AllowMultiple", true))
.WithBaseClass(nameof(Attribute))
.WithProperty(SyntaxBuilder.CreateProperty($"{Constants.TypeType}?", Constants.RouteFilterTypePropertyName)
.WithModifier(Constants.Public)
.WithAccessor(SyntaxBuilder.CreateGetter())
.WithAccessor(SyntaxBuilder.CreateSetter()))));
var syntax = builder.Build();
var source = syntax.ToFullString();
context.AddSource($"{Constants.RouteFilterAttributeName}.g", $"#nullable enable\n{source}\n#nullable disable\n");
}
} }
#nullable disable #nullable disable