private static bool TryFindParentContextSourceMemberMatch(SourceMemberMatchContext context) { if (!context.SearchParentContexts) { return(false); } var mappingData = context.MemberMappingData.Parent; while (mappingData.Parent != null) { if (mappingData.MapperData.IsEntryPoint || mappingData.MapperData.TargetMemberIsEnumerableElement()) { break; } mappingData = mappingData.Parent; var childMapperData = new ChildMemberMapperData(context.TargetMember, mappingData.MapperData); var contextMappingData = mappingData.GetChildMappingData(childMapperData); if (TryFindSourceMemberMatch(context.With(contextMappingData))) { return(true); } } return(false); }
private static IQualifiedMember GetParentContextMatchOrNull( IChildMemberMappingData targetData, out IChildMemberMappingData contextMappingData) { var mappingData = targetData.Parent; while (mappingData.Parent != null) { if (mappingData.MapperData.IsEntryPoint || mappingData.MapperData.TargetMemberIsEnumerableElement()) { break; } mappingData = mappingData.Parent; var childMapperData = new ChildMemberMapperData(targetData.MapperData.TargetMember, mappingData.MapperData); contextMappingData = mappingData.GetChildMappingData(childMapperData); var matchingMember = EnumerateSourceMembers(mappingData.MapperData.SourceMember, contextMappingData) .FirstOrDefault(sm => IsMatchingMember(sm, targetData.MapperData)); if (matchingMember != null) { return(GetFinalSourceMember(matchingMember, targetData)); } } contextMappingData = null; return(null); }