@@ -320,25 +320,9 @@ private Expression CreateNewDestinationExpression(ConstructorMap constructorMap)
320320 return Block ( variables , body ) ;
321321 }
322322
323- private Expression ResolveSource ( ConstructorParameterMap ctorParamMap )
324- {
325- if ( ctorParamMap . CustomMapExpression != null )
326- return ctorParamMap . CustomMapExpression . ConvertReplaceParameters ( Source )
327- . NullCheck ( ctorParamMap . DestinationType ) ;
328- if ( ctorParamMap . CustomMapFunction != null )
329- return ctorParamMap . CustomMapFunction . ConvertReplaceParameters ( Source , Context ) ;
330- if ( ctorParamMap . SourceMemberName != null )
331- {
332- return MemberAccesses ( ctorParamMap . SourceMemberName , Source ) ;
333- }
334- if ( ctorParamMap . HasDefaultValue )
335- return Constant ( ctorParamMap . Parameter . GetDefaultValue ( ) ) ;
336- return Chain ( ctorParamMap . SourceMembers , ctorParamMap . DestinationType ) ;
337- }
338-
339323 private Expression CreateConstructorParameterExpression ( ConstructorParameterMap ctorParamMap )
340324 {
341- var resolvedExpression = ResolveSource ( ctorParamMap ) ;
325+ var resolvedExpression = BuildValueResolverFunc ( ctorParamMap , _destination , ctorParamMap . DefaultValue ( ) ) ;
342326 var resolvedValue = Variable ( resolvedExpression . Type , "resolvedValue" ) ;
343327 var tryMap = Block ( new [ ] { resolvedValue } ,
344328 Assign ( resolvedValue , resolvedExpression ) ,
@@ -469,7 +453,7 @@ private Expression CreatePropertyMapFunc(IMemberMap memberMap, Expression destin
469453 return Block ( new [ ] { resolvedValue , propertyValue } . Distinct ( ) , mapperExpr ) ;
470454 }
471455
472- private Expression BuildValueResolverFunc ( IMemberMap memberMap , Expression destValueExpr )
456+ private Expression BuildValueResolverFunc ( IMemberMap memberMap , Expression destValueExpr , Expression defaultValue = null )
473457 {
474458 Expression valueResolverFunc ;
475459 var destinationPropertyType = memberMap . DestinationType ;
@@ -517,7 +501,7 @@ private Expression BuildValueResolverFunc(IMemberMap memberMap, Expression destV
517501 }
518502 else
519503 {
520- valueResolverFunc = Throw ( Constant ( new Exception ( "I done blowed up" ) ) ) ;
504+ valueResolverFunc = defaultValue ?? Throw ( Constant ( new Exception ( "I done blowed up" ) ) ) ;
521505 }
522506
523507 if ( memberMap . NullSubstitute != null )
0 commit comments