From d5eea93d47e7cc026936834efedbc5d871b82363 Mon Sep 17 00:00:00 2001 From: faddiv Date: Thu, 1 Jan 2026 17:32:51 +0100 Subject: [PATCH 1/2] Add name to use static mapper generator step --- src/Riok.Mapperly/MapperGenerator.cs | 5 +- src/Riok.Mapperly/MapperGeneratorStepNames.cs | 1 + .../IncrementalGeneratorRunReasons.cs | 3 ++ .../Generator/IncrementalGeneratorTest.cs | 50 +++++++++++++++++++ .../IncrementalGeneratorTestHelper.cs | 6 +++ 5 files changed, 64 insertions(+), 1 deletion(-) diff --git a/src/Riok.Mapperly/MapperGenerator.cs b/src/Riok.Mapperly/MapperGenerator.cs index e505649c51..1b64b107ab 100644 --- a/src/Riok.Mapperly/MapperGenerator.cs +++ b/src/Riok.Mapperly/MapperGenerator.cs @@ -59,7 +59,10 @@ public void Initialize(IncrementalGeneratorInitializationContext context) .Select(static (x, _) => BuildDefaults(x.Left, x.Right)) .WithTrackingName(MapperGeneratorStepNames.BuildMapperDefaults); - var useStaticMappers = SyntaxProvider.GetUseStaticMapperDeclarations(context).Select(BuildStaticMappers); + var useStaticMappers = SyntaxProvider + .GetUseStaticMapperDeclarations(context) + .Select(BuildStaticMappers) + .WithTrackingName(MapperGeneratorStepNames.BuildUseStaticMappers); // extract the mapper declarations and build the descriptors var mappersAndDiagnostics = SyntaxProvider diff --git a/src/Riok.Mapperly/MapperGeneratorStepNames.cs b/src/Riok.Mapperly/MapperGeneratorStepNames.cs index ee46bc13bf..9dc4ed4276 100644 --- a/src/Riok.Mapperly/MapperGeneratorStepNames.cs +++ b/src/Riok.Mapperly/MapperGeneratorStepNames.cs @@ -4,6 +4,7 @@ public static class MapperGeneratorStepNames { public const string BuildCompilationContext = nameof(BuildCompilationContext); public const string BuildMapperDefaults = nameof(BuildMapperDefaults); + public const string BuildUseStaticMappers = nameof(BuildUseStaticMappers); public const string ReportDiagnostics = nameof(ReportDiagnostics); public const string BuildMappers = nameof(BuildMappers); } diff --git a/test/Riok.Mapperly.Tests/Generator/IncrementalGeneratorRunReasons.cs b/test/Riok.Mapperly.Tests/Generator/IncrementalGeneratorRunReasons.cs index 90b8aae048..e29476d99e 100644 --- a/test/Riok.Mapperly.Tests/Generator/IncrementalGeneratorRunReasons.cs +++ b/test/Riok.Mapperly.Tests/Generator/IncrementalGeneratorRunReasons.cs @@ -5,6 +5,7 @@ namespace Riok.Mapperly.Tests.Generator; internal record IncrementalGeneratorRunReasons( IncrementalStepRunReason CompilationStep, IncrementalStepRunReason BuildMapperDefaultsStep, + IncrementalStepRunReason BuildUseStaticMapperDefaultsStep, IncrementalStepRunReason BuildMappersStep, IncrementalStepRunReason ReportDiagnosticsStep ) @@ -13,6 +14,7 @@ IncrementalStepRunReason ReportDiagnosticsStep IncrementalStepRunReason.New, IncrementalStepRunReason.New, IncrementalStepRunReason.New, + IncrementalStepRunReason.New, IncrementalStepRunReason.New ); @@ -21,6 +23,7 @@ IncrementalStepRunReason ReportDiagnosticsStep IncrementalStepRunReason.Modified, IncrementalStepRunReason.Unchanged, IncrementalStepRunReason.Cached, + IncrementalStepRunReason.Cached, IncrementalStepRunReason.Cached ); diff --git a/test/Riok.Mapperly.Tests/Generator/IncrementalGeneratorTest.cs b/test/Riok.Mapperly.Tests/Generator/IncrementalGeneratorTest.cs index 05deec064c..1b290b4533 100644 --- a/test/Riok.Mapperly.Tests/Generator/IncrementalGeneratorTest.cs +++ b/test/Riok.Mapperly.Tests/Generator/IncrementalGeneratorTest.cs @@ -197,4 +197,54 @@ enum E2 { Value } AssertRunReasons(driver2, IncrementalGeneratorRunReasons.Modified, 0); AssertRunReasons(driver2, IncrementalGeneratorRunReasons.ModifiedDefaults, 1); } + + [Fact] + public void AddingNewMapperDoesntRegenerateStaticMappers() + { + var mapperSource = TestSourceBuilder.CSharp( + """ + using Riok.Mapperly.Abstractions; + + [assembly: UseStaticMapper(typeof(StaticMapper))] + + public static class StaticMapper + { + public static E2 Map(E1 source) => E2.Value; + } + + [Mapper] + public partial class Mapper + { + public partial B Map(A source); + } + + record A(E1 Value); + record B(E2 Value); + enum E1 { value1, value2 } + enum E2 { Value1, Value2 } + """ + ); + + var syntaxTree = CSharpSyntaxTree.ParseText(mapperSource, CSharpParseOptions.Default); + var compilation1 = TestHelper.BuildCompilation(syntaxTree); + + var driver1 = TestHelper.GenerateTracked(compilation1); + AssertRunReasons(driver1, IncrementalGeneratorRunReasons.New); + + var compilation2 = compilation1.AddSyntaxTrees( + TestSourceBuilder.SyntaxTree( + """ + using Riok.Mapperly.Abstractions; + + [Mapper] + public partial class MyOtherMapper + { + public partial B Map(A source); + } + """ + ) + ); + var driver2 = driver1.RunGenerators(compilation2); + AssertRunReasons(driver2, IncrementalGeneratorRunReasons.Cached); + } } diff --git a/test/Riok.Mapperly.Tests/Generator/IncrementalGeneratorTestHelper.cs b/test/Riok.Mapperly.Tests/Generator/IncrementalGeneratorTestHelper.cs index 19fdcb2742..1c12f732d5 100644 --- a/test/Riok.Mapperly.Tests/Generator/IncrementalGeneratorTestHelper.cs +++ b/test/Riok.Mapperly.Tests/Generator/IncrementalGeneratorTestHelper.cs @@ -35,6 +35,12 @@ public static void AssertRunReasons(GeneratorDriver driver, IncrementalGenerator // only assert for the first mapper AssertRunReason(runResult, MapperGeneratorStepNames.BuildCompilationContext, reasons.CompilationStep, mapperIndex); AssertRunReason(runResult, MapperGeneratorStepNames.BuildMapperDefaults, reasons.BuildMapperDefaultsStep, mapperIndex); + AssertRunReason( + runResult, + MapperGeneratorStepNames.BuildUseStaticMappers, + reasons.BuildUseStaticMapperDefaultsStep, + mapperIndex + ); } AssertRunReason(runResult, MapperGeneratorStepNames.ReportDiagnostics, reasons.ReportDiagnosticsStep, mapperIndex); From 0f57899961bf1df234f9cce03f16d1a576e081b8 Mon Sep 17 00:00:00 2001 From: faddiv Date: Mon, 5 Jan 2026 15:56:21 +0100 Subject: [PATCH 2/2] Remove experimental test --- .../Generator/IncrementalGeneratorTest.cs | 50 ------------------- 1 file changed, 50 deletions(-) diff --git a/test/Riok.Mapperly.Tests/Generator/IncrementalGeneratorTest.cs b/test/Riok.Mapperly.Tests/Generator/IncrementalGeneratorTest.cs index 1b290b4533..05deec064c 100644 --- a/test/Riok.Mapperly.Tests/Generator/IncrementalGeneratorTest.cs +++ b/test/Riok.Mapperly.Tests/Generator/IncrementalGeneratorTest.cs @@ -197,54 +197,4 @@ enum E2 { Value } AssertRunReasons(driver2, IncrementalGeneratorRunReasons.Modified, 0); AssertRunReasons(driver2, IncrementalGeneratorRunReasons.ModifiedDefaults, 1); } - - [Fact] - public void AddingNewMapperDoesntRegenerateStaticMappers() - { - var mapperSource = TestSourceBuilder.CSharp( - """ - using Riok.Mapperly.Abstractions; - - [assembly: UseStaticMapper(typeof(StaticMapper))] - - public static class StaticMapper - { - public static E2 Map(E1 source) => E2.Value; - } - - [Mapper] - public partial class Mapper - { - public partial B Map(A source); - } - - record A(E1 Value); - record B(E2 Value); - enum E1 { value1, value2 } - enum E2 { Value1, Value2 } - """ - ); - - var syntaxTree = CSharpSyntaxTree.ParseText(mapperSource, CSharpParseOptions.Default); - var compilation1 = TestHelper.BuildCompilation(syntaxTree); - - var driver1 = TestHelper.GenerateTracked(compilation1); - AssertRunReasons(driver1, IncrementalGeneratorRunReasons.New); - - var compilation2 = compilation1.AddSyntaxTrees( - TestSourceBuilder.SyntaxTree( - """ - using Riok.Mapperly.Abstractions; - - [Mapper] - public partial class MyOtherMapper - { - public partial B Map(A source); - } - """ - ) - ); - var driver2 = driver1.RunGenerators(compilation2); - AssertRunReasons(driver2, IncrementalGeneratorRunReasons.Cached); - } }