public static ICollection <EnumMappingMismatchSet> FindMismatches(ObjectMapperData mapperData)
        {
            var targetMemberDatas = GetAllTargetMemberDatas(mapperData);

            if (targetMemberDatas.None())
            {
                return(Enumerable <EnumMappingMismatchSet> .EmptyArray);
            }

            var mismatchSets = targetMemberDatas
                               .Project(d => EnumMappingMismatchSet.For(d.TargetMember, d.DataSources, mapperData))
                               .Filter(m => m.Any)
                               .ToArray();

            return(mismatchSets);
        }
        protected override Expression VisitBinary(BinaryExpression binary)
        {
            if ((binary.NodeType == ExpressionType.Assign) &&
                IsEnum(binary.Left.Type) &&
                TryGetMatch(binary.Left, out var targetMemberData))
            {
                var mismatchWarnings = EnumMappingMismatchSet.For(
                    targetMemberData.TargetMember,
                    targetMemberData.DataSources,
                    _mapperData);

                if (mismatchWarnings.Any)
                {
                    if (!_assignmentsByMismatchSet.TryGetValue(mismatchWarnings, out var assignments))
                    {
                        _assignmentsByMismatchSet.Add(mismatchWarnings, (assignments = new List <Expression>()));
                    }

                    assignments.Add(binary);
                }
            }

            return(base.VisitBinary(binary));
        }