Skip to content

Commit 46565fa

Browse files
committed
Removing local variable use where possible
1 parent 5cfa129 commit 46565fa

File tree

3 files changed

+58
-22
lines changed

3 files changed

+58
-22
lines changed

AgileMapper/Extensions/EnumerableExtensions.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,18 @@
33
using System;
44
using System.Collections.Generic;
55
using System.Linq;
6+
using System.Linq.Expressions;
67

78
internal static class EnumerableExtensions
89
{
10+
public static void AddUnlessNullOrEmpty(this ICollection<Expression> items, Expression item)
11+
{
12+
if ((item != null) && (item != Constants.EmptyExpression))
13+
{
14+
items.Add(item);
15+
}
16+
}
17+
918
public static bool Any<T>(this ICollection<T> items) => items.Count > 0;
1019

1120
public static bool None<T>(this ICollection<T> items) => items.Count == 0;

AgileMapper/ObjectPopulation/ComplexTypeMappingExpressionFactory.cs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -74,13 +74,13 @@ protected override Expression GetTypeTests(IObjectMappingData mappingData)
7474
protected override IEnumerable<Expression> GetObjectPopulation(IObjectMappingData mappingData)
7575
{
7676
var mapperData = mappingData.MapperData;
77-
var preCreationCallback = GetCreationCallbackOrEmpty(CallbackPosition.Before, mapperData);
78-
var postCreationCallback = GetCreationCallbackOrEmpty(CallbackPosition.After, mapperData);
77+
var preCreationCallback = GetCreationCallbackOrNull(CallbackPosition.Before, mapperData);
78+
var postCreationCallback = GetCreationCallbackOrNull(CallbackPosition.After, mapperData);
7979
var populationsAndCallbacks = GetPopulationsAndCallbacks(mappingData).ToArray();
8080

8181
yield return preCreationCallback;
8282

83-
var instanceVariableValue = GetObjectResolution(mappingData, postCreationCallback != Constants.EmptyExpression);
83+
var instanceVariableValue = GetObjectResolution(mappingData, postCreationCallback != null);
8484
var instanceVariableAssignment = Expression.Assign(mapperData.InstanceVariable, instanceVariableValue);
8585
yield return instanceVariableAssignment;
8686

@@ -98,8 +98,8 @@ protected override IEnumerable<Expression> GetObjectPopulation(IObjectMappingDat
9898
}
9999
}
100100

101-
private static Expression GetCreationCallbackOrEmpty(CallbackPosition callbackPosition, IMemberMapperData mapperData)
102-
=> GetCallbackOrEmpty(c => c.GetCreationCallbackOrNull(callbackPosition, mapperData), mapperData);
101+
private static Expression GetCreationCallbackOrNull(CallbackPosition callbackPosition, IMemberMapperData mapperData)
102+
=> mapperData.MapperContext.UserConfigurations.GetCreationCallbackOrNull(callbackPosition, mapperData);
103103

104104
private Expression GetObjectResolution(IObjectMappingData mappingData, bool postCreationCallbackExists)
105105
{
@@ -202,9 +202,7 @@ private static Expression GetPopulationCallbackOrEmpty(
202202
IMemberPopulation memberPopulation,
203203
IObjectMappingData mappingData)
204204
{
205-
return GetCallbackOrEmpty(
206-
c => c.GetCallbackOrNull(position, memberPopulation.MapperData, mappingData.MapperData),
207-
mappingData.MapperData);
205+
return GetMappingCallbackOrNull(position, memberPopulation.MapperData, mappingData.MapperData);
208206
}
209207

210208
private static void CreateSourceMemberTypeTesterIfRequired(

AgileMapper/ObjectPopulation/MappingExpressionFactoryBase.cs

Lines changed: 43 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@ namespace AgileObjects.AgileMapper.ObjectPopulation
22
{
33
using System;
44
using System.Collections.Generic;
5+
using System.Linq;
56
using System.Linq.Expressions;
7+
using Extensions;
68
#if NET_STANDARD
79
using System.Reflection;
810
#endif
9-
using Configuration;
1011
using Members;
1112
using NetStandardPolyfills;
1213
using ReadableExpressions;
@@ -32,13 +33,12 @@ public Expression Create(IObjectMappingData mappingData)
3233
var basicMapperData = mapperData.WithNoTargetMember();
3334

3435
mappingExpressions.AddRange(GetShortCircuitReturns(returnNull, mapperData));
35-
mappingExpressions.Add(GetTypeTests(mappingData));
36-
mappingExpressions.Add(GetMappingCallback(CallbackPosition.Before, basicMapperData, mapperData));
37-
mappingExpressions.AddRange(GetObjectPopulation(mappingData));
38-
mappingExpressions.Add(GetMappingCallback(CallbackPosition.After, basicMapperData, mapperData));
39-
mappingExpressions.Add(Expression.Label(mapperData.ReturnLabelTarget, GetReturnValue(mapperData)));
36+
mappingExpressions.AddUnlessNullOrEmpty(GetTypeTests(mappingData));
37+
mappingExpressions.AddUnlessNullOrEmpty(GetMappingCallbackOrNull(CallbackPosition.Before, basicMapperData, mapperData));
38+
mappingExpressions.AddRange(GetObjectPopulation(mappingData).WhereNotNull());
39+
mappingExpressions.AddUnlessNullOrEmpty(GetMappingCallbackOrNull(CallbackPosition.After, basicMapperData, mapperData));
4040

41-
var mappingBlock = Expression.Block(new[] { mapperData.InstanceVariable }, mappingExpressions);
41+
var mappingBlock = GetMappingBlock(mappingExpressions.WhereNotNull().ToList(), mapperData);
4242
var mappingBlockWithTryCatch = WrapInTryCatch(mappingBlock, mapperData);
4343

4444
return mappingBlockWithTryCatch;
@@ -56,21 +56,50 @@ protected abstract IEnumerable<Expression> GetShortCircuitReturns(
5656

5757
protected abstract Expression GetTypeTests(IObjectMappingData mappingData);
5858

59-
private static Expression GetMappingCallback(
59+
protected static Expression GetMappingCallbackOrNull(
6060
CallbackPosition callbackPosition,
6161
IBasicMapperData basicData,
6262
IMemberMapperData mapperData)
6363
{
64-
return GetCallbackOrEmpty(c => c.GetCallbackOrNull(callbackPosition, basicData, mapperData), mapperData);
64+
return mapperData.MapperContext.UserConfigurations.GetCallbackOrNull(callbackPosition, basicData, mapperData);
6565
}
6666

67-
protected static Expression GetCallbackOrEmpty(
68-
Func<UserConfigurationSet, Expression> callbackFactory,
69-
IMemberMapperData mapperData)
70-
=> callbackFactory.Invoke(mapperData.MapperContext.UserConfigurations) ?? Constants.EmptyExpression;
71-
7267
protected abstract IEnumerable<Expression> GetObjectPopulation(IObjectMappingData mappingData);
7368

69+
private Expression GetMappingBlock(IList<Expression> mappingExpressions, ObjectMapperData mapperData)
70+
{
71+
if (mappingExpressions[0].NodeType != ExpressionType.Block)
72+
{
73+
var objectAssignment = mappingExpressions.First(exp => exp.NodeType == ExpressionType.Assign);
74+
75+
if (mappingExpressions.Last() == objectAssignment)
76+
{
77+
var assignment = (BinaryExpression)objectAssignment;
78+
var assignedValue = assignment.Right;
79+
80+
if (assignedValue.NodeType == ExpressionType.Invoke)
81+
{
82+
assignedValue = assignedValue.Replace(mapperData.InstanceVariable, mapperData.TargetObject);
83+
}
84+
85+
if (mappingExpressions.Count == 1)
86+
{
87+
return Expression.Block(assignedValue);
88+
}
89+
90+
mappingExpressions[mappingExpressions.Count - 1] = assignedValue;
91+
92+
return Expression.Block(mappingExpressions);
93+
}
94+
}
95+
96+
mappingExpressions.Add(Expression.Label(mapperData.ReturnLabelTarget, GetReturnValue(mapperData)));
97+
98+
var mappingBlock = Expression.Block(new[] { mapperData.InstanceVariable }, mappingExpressions);
99+
100+
return mappingBlock;
101+
}
102+
74103
protected abstract Expression GetReturnValue(ObjectMapperData mapperData);
75104

76105
private static Expression WrapInTryCatch(Expression mappingBlock, IMemberMapperData mapperData)

0 commit comments

Comments
 (0)