Skip to content

Commit 970e164

Browse files
Use Embedded API for generator marker attribute (#51)
* Initial plan * Use AddEmbeddedAttributeDefinition() API instead of Conditional attribute - Update Microsoft.CodeAnalysis.CSharp from 4.8.0 to 4.14.0 - Call AddEmbeddedAttributeDefinition() in RegisterPostInitializationOutput - Replace [Conditional("CODE_ANALYSIS")] with [Embedded] on the generated attribute - Update tests to account for the additional EmbeddedAttribute generated tree Co-authored-by: Dreamescaper <17177729+Dreamescaper@users.noreply.github.com> * Add polyfill extension for AddEmbeddedAttributeDefinition and revert Roslyn version to 4.8.0 Co-authored-by: Dreamescaper <17177729+Dreamescaper@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Dreamescaper <17177729+Dreamescaper@users.noreply.github.com>
1 parent 8189791 commit 970e164

7 files changed

Lines changed: 89 additions & 66 deletions

File tree

ServiceScan.SourceGenerator.Tests/AddServicesTests.cs

Lines changed: 36 additions & 36 deletions
Large diffs are not rendered by default.

ServiceScan.SourceGenerator.Tests/CustomHandlerTests.cs

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public static partial void ProcessServices()
5454
}
5555
}
5656
""";
57-
Assert.Equal(expected, results.GeneratedTrees[1].ToString());
57+
Assert.Equal(expected, results.GeneratedTrees[2].ToString());
5858
}
5959

6060
[Fact]
@@ -102,7 +102,7 @@ public static partial void ProcessServices( string value, decimal number)
102102
}
103103
}
104104
""";
105-
Assert.Equal(expected, results.GeneratedTrees[1].ToString());
105+
Assert.Equal(expected, results.GeneratedTrees[2].ToString());
106106
}
107107

108108
[Fact]
@@ -147,7 +147,7 @@ public static partial void ProcessServices()
147147
}
148148
}
149149
""";
150-
Assert.Equal(expected, results.GeneratedTrees[1].ToString());
150+
Assert.Equal(expected, results.GeneratedTrees[2].ToString());
151151
}
152152

153153
[Fact]
@@ -201,7 +201,7 @@ public static partial class ServicesExtensions
201201
}
202202
}
203203
""";
204-
Assert.Equal(expected, results.GeneratedTrees[1].ToString());
204+
Assert.Equal(expected, results.GeneratedTrees[2].ToString());
205205
}
206206

207207
[Fact]
@@ -259,7 +259,7 @@ public static partial IServiceCollection ProcessServices(this IServiceCollection
259259
}
260260
}
261261
""";
262-
Assert.Equal(expected, results.GeneratedTrees[1].ToString());
262+
Assert.Equal(expected, results.GeneratedTrees[2].ToString());
263263
}
264264

265265
[Fact]
@@ -310,7 +310,7 @@ public static partial void ProcessServices()
310310
}
311311
}
312312
""";
313-
Assert.Equal(expected, results.GeneratedTrees[1].ToString());
313+
Assert.Equal(expected, results.GeneratedTrees[2].ToString());
314314
}
315315

316316
[Fact]
@@ -360,7 +360,7 @@ public static partial void ProcessServices()
360360
}
361361
}
362362
""";
363-
Assert.Equal(expected, results.GeneratedTrees[1].ToString());
363+
Assert.Equal(expected, results.GeneratedTrees[2].ToString());
364364
}
365365

366366
[Fact]
@@ -439,7 +439,7 @@ public static partial class ModelBuilderExtensions
439439
}
440440
}
441441
""";
442-
Assert.Equal(expected, results.GeneratedTrees[1].ToString());
442+
Assert.Equal(expected, results.GeneratedTrees[2].ToString());
443443
}
444444

445445
[Fact]
@@ -487,7 +487,7 @@ public partial void ProcessServices()
487487
}
488488
}
489489
""";
490-
Assert.Equal(expected, results.GeneratedTrees[1].ToString());
490+
Assert.Equal(expected, results.GeneratedTrees[2].ToString());
491491
}
492492

493493
[Fact]
@@ -538,7 +538,7 @@ public partial void ProcessServices()
538538
}
539539
}
540540
""";
541-
Assert.Equal(expected, results.GeneratedTrees[1].ToString());
541+
Assert.Equal(expected, results.GeneratedTrees[2].ToString());
542542
}
543543

544544
[Fact]
@@ -592,7 +592,7 @@ public partial void ProcessServices()
592592
}
593593
}
594594
""";
595-
Assert.Equal(expected, results.GeneratedTrees[1].ToString());
595+
Assert.Equal(expected, results.GeneratedTrees[2].ToString());
596596
}
597597

598598
[Fact]
@@ -645,7 +645,7 @@ public partial void ProcessServices( global::Microsoft.Extensions.DependencyInje
645645
}
646646
}
647647
""";
648-
Assert.Equal(expected, results.GeneratedTrees[1].ToString());
648+
Assert.Equal(expected, results.GeneratedTrees[2].ToString());
649649
}
650650

651651
[Fact]
@@ -705,7 +705,7 @@ public static partial class ServiceCollectionExtensions
705705
}
706706
}
707707
""";
708-
Assert.Equal(expected, results.GeneratedTrees[1].ToString());
708+
Assert.Equal(expected, results.GeneratedTrees[2].ToString());
709709
}
710710

711711
[Fact]
@@ -758,7 +758,7 @@ public static partial void ProcessServices()
758758
}
759759
}
760760
""";
761-
Assert.Equal(expected, results.GeneratedTrees[1].ToString());
761+
Assert.Equal(expected, results.GeneratedTrees[2].ToString());
762762
}
763763

764764
[Fact]
@@ -803,7 +803,7 @@ public static partial void ProcessServices()
803803
}
804804
}
805805
""";
806-
Assert.Equal(expected, results.GeneratedTrees[1].ToString());
806+
Assert.Equal(expected, results.GeneratedTrees[2].ToString());
807807
}
808808

809809
[Fact]
@@ -858,7 +858,7 @@ public static partial void AddHandlers()
858858
}
859859
}
860860
""";
861-
Assert.Equal(expected, results.GeneratedTrees[1].ToString());
861+
Assert.Equal(expected, results.GeneratedTrees[2].ToString());
862862
}
863863

864864
[Fact]
@@ -914,7 +914,7 @@ public static partial void AddHandlers()
914914
}
915915
}
916916
""";
917-
Assert.Equal(expected, results.GeneratedTrees[1].ToString());
917+
Assert.Equal(expected, results.GeneratedTrees[2].ToString());
918918
}
919919

920920
[Fact]
@@ -967,7 +967,7 @@ public static partial void AddProcessors()
967967
}
968968
}
969969
""";
970-
Assert.Equal(expected, results.GeneratedTrees[1].ToString());
970+
Assert.Equal(expected, results.GeneratedTrees[2].ToString());
971971
}
972972

973973
[Fact]
@@ -1028,7 +1028,7 @@ public static partial void AddHandlers()
10281028
}
10291029
}
10301030
""";
1031-
Assert.Equal(expected, results.GeneratedTrees[1].ToString());
1031+
Assert.Equal(expected, results.GeneratedTrees[2].ToString());
10321032
}
10331033

10341034
[Fact]
@@ -1079,7 +1079,7 @@ public static partial void ProcessServices()
10791079
}
10801080
}
10811081
""";
1082-
Assert.Equal(expected, results.GeneratedTrees[1].ToString());
1082+
Assert.Equal(expected, results.GeneratedTrees[2].ToString());
10831083
}
10841084

10851085
private static Compilation CreateCompilation(params string[] source)

ServiceScan.SourceGenerator.Tests/DiagnosticTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ public static partial class ServicesExtensions
171171
}
172172
}
173173
""";
174-
Assert.Equal(expectedFile, results.GeneratedTrees[1].ToString());
174+
Assert.Equal(expectedFile, results.GeneratedTrees[2].ToString());
175175
}
176176

177177
[Fact]
@@ -211,7 +211,7 @@ public static partial void AddServices(this global::Microsoft.Extensions.Depende
211211
}
212212
}
213213
""";
214-
Assert.Equal(expectedFile, results.GeneratedTrees[1].ToString());
214+
Assert.Equal(expectedFile, results.GeneratedTrees[2].ToString());
215215
}
216216

217217
[Fact]

ServiceScan.SourceGenerator.Tests/GeneratedMethodTests.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ namespace GeneratorTests;
5757
}
5858
""";
5959

60-
Assert.Equal(expected, results.GeneratedTrees[1].ToString());
60+
Assert.Equal(expected, results.GeneratedTrees[2].ToString());
6161
}
6262

6363
[Fact]
@@ -97,7 +97,7 @@ public static partial void AddServices(this IServiceCollection services)
9797
}
9898
""";
9999

100-
Assert.Equal(expected, results.GeneratedTrees[1].ToString());
100+
Assert.Equal(expected, results.GeneratedTrees[2].ToString());
101101
}
102102

103103
[Fact]
@@ -137,7 +137,7 @@ public static partial IServiceCollection AddServices( IServiceCollection service
137137
}
138138
""";
139139

140-
Assert.Equal(expected, results.GeneratedTrees[1].ToString());
140+
Assert.Equal(expected, results.GeneratedTrees[2].ToString());
141141
}
142142

143143
[Fact]
@@ -177,7 +177,7 @@ private partial void AddServices( IServiceCollection services)
177177
}
178178
""";
179179

180-
Assert.Equal(expected, results.GeneratedTrees[1].ToString());
180+
Assert.Equal(expected, results.GeneratedTrees[2].ToString());
181181
}
182182

183183
[Fact]
@@ -216,7 +216,7 @@ public static partial IServiceCollection AddServices(this IServiceCollection ser
216216
}
217217
""";
218218

219-
Assert.Equal(expected, results.GeneratedTrees[1].ToString());
219+
Assert.Equal(expected, results.GeneratedTrees[2].ToString());
220220
}
221221

222222
[Fact]
@@ -256,7 +256,7 @@ public static partial IServiceCollection AddServices(this IServiceCollection str
256256
}
257257
""";
258258

259-
Assert.Equal(expected, results.GeneratedTrees[1].ToString());
259+
Assert.Equal(expected, results.GeneratedTrees[2].ToString());
260260
}
261261

262262
private static Compilation CreateCompilation(params string[] source)

ServiceScan.SourceGenerator/DependencyInjectionGenerator.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ public void Initialize(IncrementalGeneratorInitializationContext context)
1515
{
1616
context.RegisterPostInitializationOutput(context =>
1717
{
18+
context.AddEmbeddedAttributeDefinition();
1819
context.AddSource("ServiceScanAttributes.Generated.cs", SourceText.From(GenerateAttributeInfo.Source, Encoding.UTF8));
1920
});
2021

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using System.Text;
2+
using Microsoft.CodeAnalysis;
3+
using Microsoft.CodeAnalysis.Text;
4+
5+
namespace ServiceScan.SourceGenerator.Extensions;
6+
7+
internal static class IncrementalGeneratorPostInitializationContextExtensions
8+
{
9+
private const string EmbeddedAttributeSource = """
10+
namespace Microsoft.CodeAnalysis
11+
{
12+
internal sealed partial class EmbeddedAttribute : global::System.Attribute
13+
{
14+
}
15+
}
16+
""";
17+
18+
public static void AddEmbeddedAttributeDefinition(this IncrementalGeneratorPostInitializationContext context)
19+
{
20+
context.AddSource("Microsoft.CodeAnalysis.EmbeddedAttribute", SourceText.From(EmbeddedAttributeSource, Encoding.UTF8));
21+
}
22+
}

ServiceScan.SourceGenerator/GenerateAttributeInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ internal static class GenerateAttributeInfo
88
#nullable enable
99
1010
using System;
11-
using System.Diagnostics;
11+
using Microsoft.CodeAnalysis;
1212
using Microsoft.Extensions.DependencyInjection;
1313
1414
namespace ServiceScan.SourceGenerator;
1515
16-
[Conditional("CODE_ANALYSIS")]
16+
[Embedded]
1717
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
1818
internal class GenerateServiceRegistrationsAttribute : Attribute
1919
{

0 commit comments

Comments
 (0)