Skip to content

Commit edb717f

Browse files
authored
Simpler to just visit the parameter. (#154)
1 parent 2e3c1f3 commit edb717f

File tree

4 files changed

+6
-118
lines changed

4 files changed

+6
-118
lines changed
Lines changed: 1 addition & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
using AutoMapper.Extensions.ExpressionMapping.Extensions;
2-
using System.Linq;
3-
using System.Linq.Expressions;
4-
using System.Runtime.CompilerServices;
1+
using System.Linq.Expressions;
52

63
namespace AutoMapper.Extensions.ExpressionMapping
74
{
@@ -29,112 +26,5 @@ protected override Expression VisitParameter(ParameterExpression node)
2926

3027
return base.VisitParameter(node);
3128
}
32-
33-
protected override Expression VisitTypeBinary(TypeBinaryExpression node)
34-
{
35-
if (!(node.Expression is ParameterExpression))
36-
return base.VisitTypeBinary(node);
37-
38-
if (!object.ReferenceEquals(CurrentParameter, node.GetParameterExpression()))
39-
return base.VisitTypeBinary(node);
40-
41-
return Expression.TypeIs
42-
(
43-
string.IsNullOrEmpty(ParentFullName)
44-
? NewParameter
45-
: ExpressionHelpers.MemberAccesses(ParentFullName, NewParameter),
46-
node.TypeOperand
47-
);
48-
}
49-
50-
protected override Expression VisitMember(MemberExpression node)
51-
{
52-
if (node.NodeType == ExpressionType.Constant)
53-
return base.VisitMember(node);
54-
55-
if (!object.ReferenceEquals(CurrentParameter, node.GetParameterExpression()) || !node.IsMemberExpression())
56-
return base.VisitMember(node);
57-
58-
return ExpressionHelpers.MemberAccesses
59-
(
60-
string.IsNullOrEmpty(ParentFullName)
61-
? node.GetPropertyFullName()
62-
: $"{ParentFullName}.{node.GetPropertyFullName()}",
63-
NewParameter
64-
);
65-
}
66-
67-
protected override Expression VisitMethodCall(MethodCallExpression node)
68-
{
69-
if (!IsParentParameterExpression())
70-
return base.VisitMethodCall(node);
71-
72-
if (!object.ReferenceEquals(CurrentParameter, node.GetParameterExpression()))
73-
return base.VisitMethodCall(node);
74-
75-
if (node.Method.IsStatic)
76-
{
77-
if (!IsExtentionMethod())
78-
return base.VisitMethodCall(node);
79-
80-
if (node.Method.IsGenericMethod)
81-
return Expression.Call
82-
(
83-
node.Method.DeclaringType,
84-
node.Method.Name,
85-
node.Method.GetGenericArguments(),
86-
GetNewArgumentsForExtensionMethod()
87-
);
88-
else
89-
return Expression.Call(node.Method, GetNewArgumentsForExtensionMethod());
90-
}
91-
92-
//instance method
93-
if (node.Method.IsGenericMethod)
94-
{
95-
return Expression.Call
96-
(
97-
GetNewParent(),
98-
node.Method.Name,
99-
node.Method.GetGenericArguments(),
100-
node.Arguments.ToArray()
101-
);
102-
}
103-
else
104-
{
105-
return Expression.Call
106-
(
107-
GetNewParent(),
108-
node.Method,
109-
node.Arguments
110-
);
111-
}
112-
113-
Expression[] GetNewArgumentsForExtensionMethod()
114-
{
115-
Expression[] arguments = node.Arguments.ToArray();
116-
arguments[0] = GetNewParent();
117-
return arguments.ToArray();
118-
}
119-
120-
Expression GetNewParent()
121-
=> string.IsNullOrEmpty(ParentFullName)
122-
? NewParameter
123-
: ExpressionHelpers.MemberAccesses(ParentFullName, NewParameter);
124-
125-
bool IsParentParameterExpression()
126-
{
127-
if (node.Method.IsStatic)
128-
return node.Arguments[0] is ParameterExpression;
129-
130-
if (!node.Method.IsStatic)
131-
return node.Object is ParameterExpression;
132-
133-
return false;
134-
}
135-
136-
bool IsExtentionMethod()
137-
=> node.Method.IsDefined(typeof(ExtensionAttribute), true);
138-
}
13929
}
14030
}

tests/AutoMapper.Extensions.ExpressionMapping.UnitTests/CanMapParameterBodyFromChildReferenceWithoutMemberExpression.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public void Can_map_parameter_body_from_child_reference_without_member_expressio
3333
var mappedExpression = mapper.MapExpression<Expression<Func<TestProduct, bool>>>(expr);
3434

3535
//Assert
36-
Assert.Equal("x => (Convert(Property(x.Category, \"BrandId\"), Int32) == 2)", mappedExpression.ToString());
36+
Assert.Equal("x => (Property(x.Category, \"BrandId\") == 2)", mappedExpression.ToString());
3737
}
3838

3939
public class TestCategory

tests/AutoMapper.Extensions.ExpressionMapping.UnitTests/CanMapParameterBodyWithoutMemberExpression.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public void Can_map_parameter_body_without_member_expression()
3030
var mappedExpression = mapper.MapExpression<Expression<Func<TestProduct, bool>>>(expr);
3131

3232
//Assert
33-
Assert.Equal("x => (Convert(Property(x, \"BrandId\"), Int32) == 2)", mappedExpression.ToString());
33+
Assert.Equal("x => (Property(x, \"BrandId\") == 2)", mappedExpression.ToString());
3434
}
3535

3636
public class TestProduct
Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
1-
using System;
2-
3-
namespace AutoMapper.Extensions.ExpressionMapping.UnitTests
1+
namespace AutoMapper.Extensions.ExpressionMapping.UnitTests
42
{
53
internal class EF
64
{
7-
internal static object Property<T>(object p, string v)
5+
internal static T Property<T>(object p, string v)
86
{
9-
throw new NotImplementedException();
7+
return default;
108
}
119
}
1210
}

0 commit comments

Comments
 (0)