Skip to content

Commit 69fea44

Browse files
committed
Tidying
1 parent f4b3181 commit 69fea44

8 files changed

+28
-18
lines changed

AgileMapper/Members/ConfiguredSourceMember.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,11 @@ private ConfiguredSourceMember(
5656
_matchedTargetMemberJoinedNames = matchedTargetMemberJoinedNames;
5757
_mapperContext = mapperContext;
5858
_childMembers = childMembers ?? new[] { Member.RootSource(name, type) };
59-
_childMemberCache = mapperContext.Cache.CreateNew<Member, ConfiguredSourceMember>();
59+
60+
if (!isSimple)
61+
{
62+
_childMemberCache = mapperContext.Cache.CreateNew<Member, ConfiguredSourceMember>();
63+
}
6064
}
6165

6266
public Type Type { get; }

AgileMapper/Members/MemberMapperDataExtensions.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,10 @@ public static Expression GetTargetMemberAccess(this IMemberMapperData mapperData
111111
return mapperData.TargetMember.GetAccess(subjectMapperData.TargetInstance, mapperData);
112112
}
113113

114+
[DebuggerStepThrough]
115+
public static Expression GetTargetMemberDefault(this IBasicMapperData mapperData)
116+
=> mapperData.TargetMember.Type.ToDefaultExpression();
117+
114118
public static ExpressionInfoFinder.ExpressionInfo GetExpressionInfoFor(
115119
this IMemberMapperData mapperData,
116120
Expression value,

AgileMapper/Members/QualifiedMember.cs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ namespace AgileObjects.AgileMapper.Members
1313

1414
internal class QualifiedMember : IQualifiedMember
1515
{
16-
public static readonly QualifiedMember All = new QualifiedMember(Enumerable<Member>.EmptyArray, null, null);
17-
public static readonly QualifiedMember None = new QualifiedMember(Enumerable<Member>.EmptyArray, null, null);
16+
public static readonly QualifiedMember All = new QualifiedMember(default(Member), null);
17+
public static readonly QualifiedMember None = new QualifiedMember(default(Member), null);
1818

1919
private readonly MapperContext _mapperContext;
2020
private readonly Func<string> _pathFactory;
@@ -36,13 +36,8 @@ protected QualifiedMember(Member[] memberChain, QualifiedMember adaptedMember)
3636
}
3737

3838
private QualifiedMember(Member[] memberChain, ICollection<string> joinedNames, MapperContext mapperContext)
39-
: this(memberChain.LastOrDefault(), mapperContext)
39+
: this(memberChain.Last(), mapperContext)
4040
{
41-
if (LeafMember == null)
42-
{
43-
return;
44-
}
45-
4641
MemberChain = memberChain;
4742
JoinedNames = joinedNames;
4843
_pathFactory = () => MemberChain.GetFullName();

AgileMapper/ObjectPopulation/ComplexTypes/ComplexTypeConstructionFactory.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public Expression GetNewObjectCreation(IObjectMappingData mappingData)
3131
key,
3232
out var newingConstructorRequired);
3333

34-
if (newingConstructorRequired)
34+
if (newingConstructorRequired && !key.MappingData.MapperData.TargetType.IsAbstract())
3535
{
3636
AddNewingConstruction(constructions, key);
3737
}

AgileMapper/ObjectPopulation/ComplexTypes/ComplexTypeMappingExpressionFactory.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,12 @@ protected override bool TargetCannotBeMapped(IObjectMappingData mappingData, out
4848

4949
var targetType = mappingData.MapperData.TargetType;
5050

51+
if (targetType.IsAbstract() && mappingData.MapperData.GetDerivedTargetTypes().Any())
52+
{
53+
nullMappingBlock = null;
54+
return false;
55+
}
56+
5157
nullMappingBlock = Expression.Block(
5258
ReadableExpression.Comment("Cannot construct an instance of " + targetType.GetFriendlyName()),
5359
targetType.ToDefaultExpression());

AgileMapper/ObjectPopulation/ComplexTypes/TargetObjectResolutionFactory.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,16 @@ public static Expression GetObjectResolution(
4242
{
4343
mapperData.TargetMember.IsReadOnly = true;
4444

45-
// Use the existing target object if the mapper can't create an instance:
46-
return mapperData.TargetObject;
45+
// Use the existing target object if it might have a value and
46+
// the mapper can't create an instance:
47+
return mapperData.TargetCouldBePopulated()
48+
? mapperData.TargetObject
49+
: mapperData.GetTargetMemberDefault();
4750
}
4851

4952
if (UseNullFallbackValue(mapperData, objectValue, memberPopulations))
5053
{
51-
objectValue = mapperData.TargetMember.Type.ToDefaultExpression();
54+
objectValue = mapperData.GetTargetMemberDefault();
5255
mapperData.Context.UsesMappingDataObjectAsParameter = false;
5356
}
5457
else

AgileMapper/ObjectPopulation/DefaultValueDataSourceFactory.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
namespace AgileObjects.AgileMapper.ObjectPopulation
22
{
33
using DataSources;
4-
using Extensions.Internal;
54
using Members;
65

76
internal class DefaultValueDataSourceFactory : IDataSourceFactory
@@ -14,7 +13,7 @@ public IDataSource Create(IMemberMapperData mapperData)
1413
private class DefaultValueDataSource : DataSourceBase
1514
{
1615
public DefaultValueDataSource(IMemberMapperData mapperData)
17-
: base(mapperData.SourceMember, mapperData.TargetMember.Type.ToDefaultExpression())
16+
: base(mapperData.SourceMember, mapperData.GetTargetMemberDefault())
1817
{
1918
}
2019
}

AgileMapper/ObjectPopulation/ExistingOrDefaultValueDataSourceFactory.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ namespace AgileObjects.AgileMapper.ObjectPopulation
22
{
33
using System.Linq.Expressions;
44
using DataSources;
5-
using Extensions.Internal;
65
using Members;
76
using Members.Dictionaries;
87

@@ -25,7 +24,7 @@ private static Expression GetValue(IMemberMapperData mapperData)
2524
if (mapperData.TargetMember.IsEnumerable)
2625
{
2726
return FallbackToNull(mapperData)
28-
? mapperData.TargetMember.Type.ToDefaultExpression()
27+
? mapperData.GetTargetMemberDefault()
2928
: mapperData.GetFallbackCollectionValue();
3029
}
3130

@@ -34,7 +33,7 @@ private static Expression GetValue(IMemberMapperData mapperData)
3433
return mapperData.GetTargetMemberAccess();
3534
}
3635

37-
return mapperData.TargetMember.Type.ToDefaultExpression();
36+
return mapperData.GetTargetMemberDefault();
3837
}
3938

4039
private static bool FallbackToNull(IBasicMapperData mapperData)

0 commit comments

Comments
 (0)