Skip to content

Commit 6d82c35

Browse files
authored
chore: Merge pull request #907 from DocSvartz/d26
Fix regression when abstract destination type have required properties
2 parents 456502f + c049cf6 commit 6d82c35

File tree

4 files changed

+71
-18
lines changed

4 files changed

+71
-18
lines changed

src/Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<PropertyGroup>
33
<!-- Properties related to build/pack -->
44
<IsPackable>false</IsPackable>
5-
<Version>10.0.7-pre02</Version>
5+
<Version>10.0.7-pre03</Version>
66
<MapsterPluginsTFMs>netstandard2.0;net10.0;net9.0;net8.0</MapsterPluginsTFMs>
77
<MapsterTFMs>netstandard2.0;net10.0;net9.0;net8.0</MapsterTFMs>
88
<MapsterEFCoreTFMs>net10.0;net9.0;net8.0</MapsterEFCoreTFMs>

src/Mapster.Tests/WhenMappingRecordRegression.cs

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -443,22 +443,7 @@ public void FixCtorParamMapping()
443443
result.Order.Payment.CVV.ShouldBe("234");
444444
resultID.UserID.ShouldBe("256");
445445
}
446-
447-
[TestMethod]
448-
public void RequiredProperty()
449-
{
450-
var source = new Person553 { FirstMidName = "John", LastName = "Dow" };
451-
var destination = new Person554 { ID = 245, FirstMidName = "Mary", LastName = "Dow" };
452-
453-
var s = source.BuildAdapter().CreateMapToTargetExpression<Person554>();
454-
455-
var result = source.Adapt(destination);
456-
457-
result.ID.ShouldBe(245);
458-
result.FirstMidName.ShouldBe(source.FirstMidName);
459-
result.LastName.ShouldBe(source.LastName);
460-
}
461-
446+
462447
/// <summary>
463448
/// https://github.com/MapsterMapper/Mapster/issues/842
464449
/// </summary>
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
using Microsoft.VisualStudio.TestTools.UnitTesting;
2+
using Shouldly;
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Text;
6+
7+
namespace Mapster.Tests
8+
{
9+
[TestClass]
10+
public class WhenMappingRequiredPropertyRegression
11+
{
12+
[TestMethod]
13+
public void RequiredProperty()
14+
{
15+
var source = new Person553 { FirstMidName = "John", LastName = "Dow" };
16+
var destination = new Person554 { ID = 245, FirstMidName = "Mary", LastName = "Dow" };
17+
18+
var s = source.BuildAdapter().CreateMapToTargetExpression<Person554>();
19+
20+
var result = source.Adapt(destination);
21+
22+
result.ID.ShouldBe(245);
23+
result.FirstMidName.ShouldBe(source.FirstMidName);
24+
result.LastName.ShouldBe(source.LastName);
25+
}
26+
27+
[TestMethod]
28+
public void PolymorphicMappingToAbstractClassCompileWithoutError()
29+
{
30+
var config = TypeAdapterConfig.GlobalSettings;
31+
32+
config.NewConfig<ConcreteSource, ConcreteDestination>();
33+
34+
config.NewConfig<AbstractSource, AbstractDestination>()
35+
.Include<ConcreteSource, ConcreteDestination>();
36+
37+
Should.NotThrow(() =>
38+
{
39+
config.Compile();
40+
});
41+
42+
}
43+
}
44+
45+
#region TestClasses
46+
47+
public abstract class AbstractSource
48+
{
49+
public abstract string Name { get; }
50+
}
51+
52+
public class ConcreteSource : AbstractSource
53+
{
54+
public override string Name => "Test";
55+
}
56+
57+
public abstract class AbstractDestination
58+
{
59+
public required string Name { get; set; }
60+
}
61+
62+
public class ConcreteDestination : AbstractDestination
63+
{
64+
65+
}
66+
67+
#endregion TestClasses
68+
}

src/Mapster/Adapters/BaseAdapter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ protected Expression CreateBlockExpressionBody(Expression source, Expression? de
219219
.Where(x => x.GetCustomAttributes()
220220
.Any(y => y.GetType().FullName == "System.Runtime.CompilerServices.RequiredMemberAttribute"));
221221

222-
if (requiremembers.Count() != 0)
222+
if (requiremembers.Count() != 0 && !arg.DestinationType.IsAbstract)
223223
set = CreateInlineExpression(source, arg.CloneWith(MapType.ApplyNullPropagation), true);
224224
else
225225
set = CreateInstantiationExpression(transformedSource, destination, arg);

0 commit comments

Comments
 (0)