BadScript 2
Loading...
Searching...
No Matches
BadInteropGenerator.cs
Go to the documentation of this file.
1using System.Text;
2
5
6using Microsoft.CodeAnalysis;
7using Microsoft.CodeAnalysis.CSharp.Syntax;
8using Microsoft.CodeAnalysis.Text;
9
11
12[Generator]
13public class BadInteropGenerator : IIncrementalGenerator
14{
15#region IIncrementalGenerator Members
16
17 public void Initialize(IncrementalGeneratorInitializationContext context)
18 {
19 context.RegisterPostInitializationOutput(BadInteropStaticCode.RegisterAttributeSource);
20
21 IncrementalValuesProvider<ApiModel> apiPipeline =
22 context.SyntaxProvider.ForAttributeWithMetadataName(BadInteropStaticCode.INTEROP_API_ATTRIBUTE,
23 static (syntaxNode, _) =>
24 syntaxNode is ClassDeclarationSyntax,
25 static (context, _) =>
26 {
27 INamedTypeSymbol api =
28 (INamedTypeSymbol)context.TargetSymbol;
29
32
33 return builder.GenerateModel(api);
34 }
35 );
36
37 IncrementalValuesProvider<ObjectModel> objectPipeline =
38 context.SyntaxProvider.ForAttributeWithMetadataName(BadInteropStaticCode.INTEROP_OBJECT_ATTRIBUTE,
39 static (syntaxNode, _) =>
40 syntaxNode is ClassDeclarationSyntax,
41 static (context, _) =>
42 {
43 INamedTypeSymbol api =
44 (INamedTypeSymbol)context.TargetSymbol;
45
48
49 return builder.GenerateModel(api);
50 }
51 );
52
53 context.RegisterSourceOutput(apiPipeline,
54 static (context, model) =>
55 {
56 bool isError = false;
57
58 if (model.Diagnostics.Length != 0)
59 {
60 foreach (Diagnostic diagnostic in model.Diagnostics)
61 {
62 context.ReportDiagnostic(diagnostic);
63 isError |= diagnostic.Severity == DiagnosticSeverity.Error;
64 }
65 }
66
67 BadInteropApiSourceGenerator gen = new BadInteropApiSourceGenerator(context);
68
69 SourceText sourceText =
70 SourceText.From(gen.GenerateModelSource(context, model, isError),
71 Encoding.UTF8
72 );
73
74 context.AddSource($"{model.ClassName}.Api.g.cs", sourceText);
75 }
76 );
77
78 context.RegisterSourceOutput(objectPipeline,
79 static (context, model) =>
80 {
81 bool isError = false;
82
83 if (model.Diagnostics.Length != 0)
84 {
85 foreach (Diagnostic diagnostic in model.Diagnostics)
86 {
87 context.ReportDiagnostic(diagnostic);
88 isError |= diagnostic.Severity == DiagnosticSeverity.Error;
89 }
90 }
91
92 BadInteropObjectSourceGenerator gen = new BadInteropObjectSourceGenerator(context);
93
94 SourceText sourceText =
95 SourceText.From(gen.GenerateModelSource(context, model, isError),
96 Encoding.UTF8
97 );
98
99 context.AddSource($"{model.ClassName}.Object.g.cs", sourceText);
100 }
101 );
102 }
103
104#endregion
105}
void Initialize(IncrementalGeneratorInitializationContext context)
static void RegisterAttributeSource(IncrementalGeneratorPostInitializationContext context)