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> pipeline =
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 context.RegisterSourceOutput(pipeline,
38 static (context, model) =>
39 {
40 bool isError = false;
41
42 if (model.Diagnostics.Length != 0)
43 {
44 foreach (Diagnostic diagnostic in model.Diagnostics)
45 {
46 context.ReportDiagnostic(diagnostic);
47 isError |= diagnostic.Severity == DiagnosticSeverity.Error;
48 }
49 }
50
51 BadInteropApiSourceGenerator gen = new BadInteropApiSourceGenerator(context);
52
53 SourceText sourceText =
54 SourceText.From(gen.GenerateModelSource(context, model, isError),
55 Encoding.UTF8
56 );
57
58 context.AddSource($"{model.ClassName}.g.cs", sourceText);
59 }
60 );
61 }
62
63#endregion
64}
void Initialize(IncrementalGeneratorInitializationContext context)
static void RegisterAttributeSource(IncrementalGeneratorPostInitializationContext context)