Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
cosmetic
  • Loading branch information
lbargaoanu committed Feb 26, 2020
commit 40e8fd8443d34c16c53748b4c2edb4a44e7d8f2d
18 changes: 8 additions & 10 deletions src/AutoMapper/Configuration/MemberConfigurationExpression.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ namespace AutoMapper.Configuration

public class MemberConfigurationExpression<TSource, TDestination, TMember> : IMemberConfigurationExpression<TSource, TDestination, TMember>, IPropertyMapConfiguration
{
private LambdaExpression _sourceMember;
private string _sourceMemberName;
private LambdaExpression _sourceExpression;
private MemberInfo _sourceMember;
private readonly Type _sourceType;
protected List<Action<PropertyMap>> PropertyMapActions { get; } = new List<Action<PropertyMap>>();

Expand Down Expand Up @@ -117,14 +117,13 @@ public void MapFrom<TSourceMember>(Expression<Func<TSource, TSourceMember>> mapE

internal void MapFromUntyped(LambdaExpression sourceExpression)
{
_sourceMember = sourceExpression;
_sourceExpression = sourceExpression;
PropertyMapActions.Add(pm => pm.MapFrom(sourceExpression));
}

public void MapFrom(string sourceMemberName)
{
_sourceType.GetFieldOrProperty(sourceMemberName);
_sourceMemberName = sourceMemberName;
_sourceMember = _sourceType.GetFieldOrProperty(sourceMemberName);
PropertyMapActions.Add(pm => pm.MapFrom(sourceMemberName));
}

Expand Down Expand Up @@ -339,24 +338,23 @@ private void Apply(PropertyMap propertyMap)
propertyMap.CheckMappedReadonly();
}

public LambdaExpression SourceExpression => _sourceMember;
public LambdaExpression SourceExpression => _sourceExpression;
public LambdaExpression GetDestinationExpression() => MemberAccessLambda(DestinationMember);

public IPropertyMapConfiguration Reverse()
{
var destinationType = DestinationMember.DeclaringType;
if (_sourceMemberName != null)
if (_sourceMember != null)
{
var sourceMember = _sourceType.GetFieldOrProperty(_sourceMemberName);
var reversedMemberConfiguration = new MemberConfigurationExpression<TDestination, TSource, object>(sourceMember, destinationType);
var reversedMemberConfiguration = new MemberConfigurationExpression<TDestination, TSource, object>(_sourceMember, destinationType);
reversedMemberConfiguration.MapFrom(DestinationMember.Name);
return reversedMemberConfiguration;
}
if (destinationType.IsGenericTypeDefinition) // .ForMember("InnerSource", o => o.MapFrom(s => s))
{
return null;
}
return PathConfigurationExpression<TDestination, TSource, object>.Create(_sourceMember, GetDestinationExpression());
return PathConfigurationExpression<TDestination, TSource, object>.Create(_sourceExpression, GetDestinationExpression());
}

public void DontUseDestinationValue() => SetUseDestinationValue(false);
Expand Down