aboutsummaryrefslogtreecommitdiffstats
path: root/code/source-generator/EndpointFinder.cs
diff options
context:
space:
mode:
Diffstat (limited to 'code/source-generator/EndpointFinder.cs')
-rw-r--r--code/source-generator/EndpointFinder.cs17
1 files changed, 17 insertions, 0 deletions
diff --git a/code/source-generator/EndpointFinder.cs b/code/source-generator/EndpointFinder.cs
new file mode 100644
index 0000000..b30451e
--- /dev/null
+++ b/code/source-generator/EndpointFinder.cs
@@ -0,0 +1,17 @@
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.CSharp.Syntax;
+
+namespace I2R.Endpoints.Generator;
+
+public class EndpointFinder : ISyntaxReceiver
+{
+ public HashSet<ClassDeclarationSyntax> Endpoints { get; } = new();
+
+ public void OnVisitSyntaxNode(SyntaxNode syntaxNode) {
+ if (syntaxNode is not ClassDeclarationSyntax endpoint) return;
+ if ((endpoint.BaseList?.Types.Any(c => EndpointGenerator.IsSyncEndpoint(c.ToString())) ?? false)
+ || (endpoint.BaseList?.Types.Any(c => EndpointGenerator.IsAyncEndpoint(c.ToString())) ?? false)) {
+ Endpoints.Add(endpoint);
+ }
+ }
+}