diff --git a/src/Riok.Mapperly/Helpers/SymbolExtensions.cs b/src/Riok.Mapperly/Helpers/SymbolExtensions.cs index f4dca49cea..f1d7efabb0 100644 --- a/src/Riok.Mapperly/Helpers/SymbolExtensions.cs +++ b/src/Riok.Mapperly/Helpers/SymbolExtensions.cs @@ -60,12 +60,17 @@ internal static IEnumerable GetAllMembers(this ITypeSymbol symbol) IEqualityComparer comparer ) { - return symbol.GetAllMembers().Where(x => comparer.Equals(name, x.Name) && !x.IsStatic).Select(MappableMember.Create).WhereNotNull(); + return symbol.GetAllMembers().Where(x => !x.IsStatic && comparer.Equals(name, x.Name)).Select(MappableMember.Create).WhereNotNull(); } internal static IEnumerable GetAccessibleMappableMembers(this ITypeSymbol symbol) { - return symbol.GetAllMembers().Where(x => x.IsAccessible()).DistinctBy(x => x.Name).Select(MappableMember.Create).WhereNotNull(); + return symbol + .GetAllMembers() + .Where(x => !x.IsStatic && x.IsAccessible()) + .DistinctBy(x => x.Name) + .Select(MappableMember.Create) + .WhereNotNull(); } internal static IMethodSymbol? GetStaticGenericMethod(this INamedTypeSymbol namedType, string methodName) diff --git a/test/Riok.Mapperly.Tests/Mapping/ObjectFieldTest.cs b/test/Riok.Mapperly.Tests/Mapping/ObjectFieldTest.cs index 9683398154..4d5e6b2031 100644 --- a/test/Riok.Mapperly.Tests/Mapping/ObjectFieldTest.cs +++ b/test/Riok.Mapperly.Tests/Mapping/ObjectFieldTest.cs @@ -45,4 +45,26 @@ public void StringToIntField() """ ); } + + [Fact] + public void ShouldIgnoreStaticField() + { + var source = TestSourceBuilder.Mapping( + "A", + "B", + "class A { public string Name; public static string Value; }", + "class B { public string Name; public static string Value; }" + ); + + TestHelper + .GenerateMapper(source) + .Should() + .HaveSingleMethodBody( + """ + var target = new global::B(); + target.Name = source.Name; + return target; + """ + ); + } } diff --git a/test/Riok.Mapperly.Tests/Mapping/ObjectPropertyTest.cs b/test/Riok.Mapperly.Tests/Mapping/ObjectPropertyTest.cs index 50a1edbb8f..2e03fc0e4e 100644 --- a/test/Riok.Mapperly.Tests/Mapping/ObjectPropertyTest.cs +++ b/test/Riok.Mapperly.Tests/Mapping/ObjectPropertyTest.cs @@ -391,4 +391,26 @@ public void UnmappedReadOnlyTargetPropertyShouldNotDiagnostic() """ ); } + + [Fact] + public void ShouldIgnoreStaticProperty() + { + var source = TestSourceBuilder.Mapping( + "A", + "B", + "class A { public string Name { get; } public static string Value { get; } }", + "class B { public string Name { set; } public static string Value { set; } }" + ); + + TestHelper + .GenerateMapper(source) + .Should() + .HaveSingleMethodBody( + """ + var target = new global::B(); + target.Name = source.Name; + return target; + """ + ); + } }