mirror of
https://github.com/AlexMacocian/Net.Sdk.Web.Extensions.git
synced 2026-07-15 13:39:29 +00:00
Extract RouteFilter generation
This commit is contained in:
+1
-1
@@ -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
|
||||||
Reference in New Issue
Block a user