Skip to content

Commit 0fe7e35

Browse files
authored
Merge pull request #125 from AutoMapper/v4.1.2_Cumulative
Issues 116, 118 and SourceLink
2 parents 72f5ebb + a717f96 commit 0fe7e35

File tree

6 files changed

+392
-26
lines changed

6 files changed

+392
-26
lines changed

.github/workflows/ci.yml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,13 @@ name: CI
22

33
on:
44
push:
5-
branches: [ master ]
5+
branches:
6+
- master
7+
- v4.1.2
68
pull_request:
7-
branches: [ master ]
9+
branches:
10+
- master
11+
- v4.1.2
812

913
jobs:
1014
build:

src/AutoMapper.Extensions.ExpressionMapping/AutoMapper.Extensions.ExpressionMapping.csproj

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,12 @@
1515
<RepositoryType>git</RepositoryType>
1616
<RepositoryUrl>https://github.com/AutoMapper/AutoMapper.Extensions.ExpressionMapping</RepositoryUrl>
1717
<MinVerTagPrefix>v</MinVerTagPrefix>
18+
<PublishRepositoryUrl>true</PublishRepositoryUrl>
19+
<IncludeSymbols>true</IncludeSymbols>
20+
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
21+
<EmbedUntrackedSources>true</EmbedUntrackedSources>
22+
<Deterministic>true</Deterministic>
23+
<ContinuousIntegrationBuild Condition="'$(GITHUB_ACTIONS)' == 'true'">true</ContinuousIntegrationBuild>
1824
</PropertyGroup>
1925

2026
<ItemGroup>
@@ -23,6 +29,7 @@
2329
<PrivateAssets>all</PrivateAssets>
2430
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
2531
</PackageReference>
32+
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="All" />
2633
</ItemGroup>
2734

2835
</Project>

src/AutoMapper.Extensions.ExpressionMapping/PrependParentNameVisitor.cs

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,40 +7,32 @@ namespace AutoMapper.Extensions.ExpressionMapping
77
{
88
internal class PrependParentNameVisitor : ExpressionVisitor
99
{
10-
public PrependParentNameVisitor(Type currentParameterType, string parentFullName, Expression newParameter)
10+
public PrependParentNameVisitor(ParameterExpression currentParameter, string parentFullName, Expression newParameter)
1111
{
12-
CurrentParameterType = currentParameterType;
12+
CurrentParameter = currentParameter;
1313
ParentFullName = parentFullName;
1414
NewParameter = newParameter;
1515
}
1616

17-
public Type CurrentParameterType { get; }
17+
public ParameterExpression CurrentParameter { get; }
1818
public string ParentFullName { get; }
19-
public Expression NewParameter { get; }
19+
public Expression NewParameter { get; }
2020

2121
protected override Expression VisitMember(MemberExpression node)
2222
{
2323
if (node.NodeType == ExpressionType.Constant)
2424
return base.VisitMember(node);
2525

26-
string sourcePath;
27-
28-
var parameterExpression = node.GetParameterExpression();
29-
var sType = parameterExpression?.Type;
30-
if (sType != null && sType == CurrentParameterType && node.IsMemberExpression())
31-
{
32-
sourcePath = node.GetPropertyFullName();
33-
}
34-
else
35-
{
26+
if (!object.ReferenceEquals(CurrentParameter, node.GetParameterExpression()) || !node.IsMemberExpression())
3627
return base.VisitMember(node);
37-
}
38-
39-
var fullName = string.IsNullOrEmpty(ParentFullName)
40-
? sourcePath
41-
: string.Concat(ParentFullName, ".", sourcePath);
4228

43-
return ExpressionHelpers.MemberAccesses(fullName, NewParameter);
29+
return ExpressionHelpers.MemberAccesses
30+
(
31+
string.IsNullOrEmpty(ParentFullName)
32+
? node.GetPropertyFullName()
33+
: $"{ParentFullName}.{node.GetPropertyFullName()}",
34+
NewParameter
35+
);
4436
}
4537
}
4638
}

src/AutoMapper.Extensions.ExpressionMapping/XpressionMapperVisitor.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ private Expression GetMemberExpressionFromCustomExpression(PropertyMapInfo lastW
119119
(
120120
new PrependParentNameVisitor
121121
(
122-
lastWithCustExpression.CustomExpression.Parameters[0].Type/*Parent type of current property*/,
122+
lastWithCustExpression.CustomExpression.Parameters[0]/*Parent parameter of current property*/,
123123
BuildFullName(beforeCustExpression),
124124
visitedParentExpr
125125
)
@@ -341,7 +341,7 @@ private MemberInitExpression GetMemberInit(MemberBindingGroup memberBindingGroup
341341
return list;
342342

343343
bool ShouldBindPropertyMap(MemberAssignmentInfo memberAssignmentInfo)
344-
=> (memberBindingGroup.IsRootMemberAssignment && sourceMember.ReflectedType == memberBindingGroup.NewType)
344+
=> (memberBindingGroup.IsRootMemberAssignment && sourceMember.ReflectedType.IsAssignableFrom(memberBindingGroup.NewType))
345345
|| (!memberBindingGroup.IsRootMemberAssignment && declaringMemberKey.Equals(memberBindingGroup.DeclaringMemberKey));
346346
});
347347

@@ -364,9 +364,9 @@ bool ShouldBindPropertyMap(MemberAssignmentInfo memberAssignmentInfo)
364364

365365
bool ShouldBindChildReference(MemberBindingGroup group)
366366
=> (memberBindingGroup.IsRootMemberAssignment
367-
&& group.DeclaringMemberKey.DeclaringMemberInfo.ReflectedType == memberBindingGroup.NewType)
367+
&& group.DeclaringMemberKey.DeclaringMemberInfo.ReflectedType.IsAssignableFrom(memberBindingGroup.NewType))
368368
|| (!memberBindingGroup.IsRootMemberAssignment
369-
&& group.DeclaringMemberKey.DeclaringMemberInfo.ReflectedType == memberBindingGroup.NewType
369+
&& group.DeclaringMemberKey.DeclaringMemberInfo.ReflectedType.IsAssignableFrom(memberBindingGroup.NewType)
370370
&& group.DeclaringMemberKey.DeclaringMemberFullName.StartsWith(memberBindingGroup.DeclaringMemberKey.DeclaringMemberFullName));
371371

372372
return Expression.MemberInit(Expression.New(memberBindingGroup.NewType), bindings);

0 commit comments

Comments
 (0)