public SourceObjectDictionaryAdapter(
     DictionarySourceMember sourceMember,
     EnumerablePopulationBuilder builder)
     : base(builder)
 {
     _instanceDictionaryAdapter = new SourceInstanceDictionaryAdapter(sourceMember, builder);
     _emptyTarget = TargetTypeHelper.GetEmptyInstanceCreation(TargetTypeHelper.EnumerableInterfaceType);
 }
        public Expression GetMappingShortCircuitOrNull()
        {
            if (Builder.ElementTypesAreSimple)
            {
                return(null);
            }

            var sourceEnumerableFoundTest = SourceObjectDictionaryPopulationLoopData
                                            .GetSourceEnumerableFoundTest(_emptyTarget, Builder);

            var projectionAsTargetType    = Expression.TypeAs(Builder.SourceValue, Builder.MapperData.TargetType);
            var allowEnumerableAssignment = Builder.MapperData.RuleSet.Settings.AllowEnumerableAssignment;
            var convertedProjection       = TargetTypeHelper.GetEnumerableConversion(Builder.SourceValue, allowEnumerableAssignment);
            var projectionResult          = Expression.Coalesce(projectionAsTargetType, convertedProjection);
            var returnConvertedProjection = Expression.Return(Builder.MapperData.ReturnLabelTarget, projectionResult);
            var ifProjectedReturn         = Expression.IfThen(sourceEnumerableFoundTest, returnConvertedProjection);

            return(ifProjectedReturn);
        }