private static IEnumerable <IQualifiedMember> EnumerateSourceMembers( IQualifiedMember parentMember, IChildMemberMappingData rootData) { yield return(parentMember); if (!parentMember.CouldMatch(rootData.MapperData.TargetMember)) { yield break; } var parentMemberType = rootData.Parent.GetSourceMemberRuntimeType(parentMember); if (parentMemberType != parentMember.Type) { parentMember = parentMember.WithType(parentMemberType); yield return(parentMember); if (parentMember.IsSimple) { yield break; } } var relevantSourceMembers = QuerySourceMembers( parentMember, rootData, MembersHaveCompatibleTypes); foreach (var sourceMember in relevantSourceMembers) { var childMember = parentMember.Append(sourceMember); if (sourceMember.IsSimple) { yield return(childMember); continue; } foreach (var qualifiedMember in EnumerateSourceMembers(childMember, rootData)) { yield return(qualifiedMember); } } }
private static IEnumerable <IQualifiedMember> GetAllSourceMembers( IQualifiedMember parentMember, IChildMemberMappingData rootData) { yield return(parentMember); if (!parentMember.CouldMatch(rootData.MapperData.TargetMember)) { yield break; } var parentMemberType = rootData.GetSourceMemberRuntimeType(parentMember); if (parentMemberType != parentMember.Type) { parentMember = parentMember.WithType(parentMemberType); yield return(parentMember); } var relevantMembers = GlobalContext .Instance .MemberFinder .GetSourceMembers(parentMember.Type) .Where(m => (m.IsSimple && rootData.MapperData.TargetMember.IsSimple) || !m.IsSimple); foreach (var sourceMember in relevantMembers) { var childMember = parentMember.Append(sourceMember); if (sourceMember.IsSimple) { yield return(childMember); continue; } foreach (var qualifiedMember in GetAllSourceMembers(childMember, rootData)) { yield return(qualifiedMember); } } }
public bool CouldMatch(QualifiedMember otherMember) => _wrappedSourceMember.CouldMatch(otherMember);