Skip to content

Commit 2888a9a

Browse files
committed
Skipping range checks on nullable to non-nullable, same numeric type mappings
1 parent cc874b5 commit 2888a9a

File tree

3 files changed

+19
-7
lines changed

3 files changed

+19
-7
lines changed

AgileMapper.UnitTests/WhenViewingMappingPlans.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,14 @@ public void ShouldNotDuplicateChildMappingPlans()
249249
numberOfObjectToProductPlans.ShouldBe(1);
250250
}
251251

252+
[Fact]
253+
public void ShouldNotRangeCheckNullableToNonNullableValues()
254+
{
255+
var plan = Mapper.GetPlanFor<PublicField<int?>>().ToANew<PublicField<int>>();
256+
257+
plan.ShouldNotContain("int.MinValue");
258+
}
259+
252260
[Fact]
253261
public void ShouldShowEnumMismatches()
254262
{

AgileMapper/TypeConversion/NumericValueIsInRangeComparison.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,19 @@ internal static class NumericValueIsInRangeComparison
88
{
99
public static Expression For(Expression sourceValue, Type nonNullableTargetType)
1010
{
11-
Expression maxValueComparisonLeftSide, maxValueComparisonRightSide;
1211
GetMaximumValueComparisonOperands(
1312
sourceValue,
1413
sourceValue.Type,
1514
nonNullableTargetType,
16-
out maxValueComparisonLeftSide,
17-
out maxValueComparisonRightSide);
15+
out Expression maxValueComparisonLeftSide,
16+
out Expression maxValueComparisonRightSide);
1817

19-
Expression minValueComparisonLeftSide, minValueComparisonRightSide;
2018
GetMinimumValueComparisonOperands(
2119
sourceValue,
2220
sourceValue.Type,
2321
nonNullableTargetType,
24-
out minValueComparisonLeftSide,
25-
out minValueComparisonRightSide);
22+
out Expression minValueComparisonLeftSide,
23+
out Expression minValueComparisonRightSide);
2624

2725
var sourceValueIsLessThanOrEqualToMaxValue =
2826
Expression.LessThanOrEqual(maxValueComparisonLeftSide, maxValueComparisonRightSide);

AgileMapper/TypeConversion/ToNumericConverterBase.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,14 @@ private static bool IsNonNumericType(Type type)
6161

6262
private static Expression GetCheckedNumericConversion(Expression sourceValue, Type targetType)
6363
{
64-
var numericValueIsValid = GetNumericValueValidityCheck(sourceValue, targetType);
6564
var castSourceValue = sourceValue.GetConversionTo(targetType);
65+
66+
if (sourceValue.Type.GetNonNullableType() == targetType.GetNonNullableType())
67+
{
68+
return castSourceValue;
69+
}
70+
71+
var numericValueIsValid = GetNumericValueValidityCheck(sourceValue, targetType);
6672
var defaultTargetType = targetType.ToDefaultExpression();
6773
var inRangeValueOrDefault = Expression.Condition(numericValueIsValid, castSourceValue, defaultTargetType);
6874

0 commit comments

Comments
 (0)