Skip to content

Commit 4f023c9

Browse files
committed
HV-1300 Avoid creating new Optionals for each comparison
Also use OptionalInt as it's exactly what it is for.
1 parent 7b82e26 commit 4f023c9

28 files changed

+93
-65
lines changed
Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,44 +4,47 @@
44
* License: Apache License, Version 2.0
55
* See the license.txt file in the root directory or <http://www.apache.org/licenses/LICENSE-2.0>.
66
*/
7-
package org.hibernate.validator.internal.constraintvalidators.bv.number.bound;
7+
package org.hibernate.validator.internal.constraintvalidators.bv.number;
88

9-
import java.util.Optional;
9+
import java.util.OptionalInt;
1010

1111
/**
1212
* @author Marko Bekhta
1313
*/
1414
public final class InfinityNumberComparatorHelper {
1515

16+
public static final OptionalInt LESS_THAN = OptionalInt.of( -1 );
17+
public static final OptionalInt FINITE_VALUE = OptionalInt.empty();
18+
public static final OptionalInt GREATER_THAN = OptionalInt.of( 1 );
19+
1620
private InfinityNumberComparatorHelper() {
1721
}
1822

19-
public static Optional<Integer> infinityCheck(Double number, int treatNanAs) {
20-
Integer result = null;
23+
public static OptionalInt infinityCheck(Double number, OptionalInt treatNanAs) {
24+
OptionalInt result = FINITE_VALUE;
2125
if ( number == Double.NEGATIVE_INFINITY ) {
22-
result = -1;
26+
result = LESS_THAN;
2327
}
2428
else if ( number.isNaN() ) {
2529
result = treatNanAs;
2630
}
2731
else if ( number == Double.POSITIVE_INFINITY ) {
28-
result = 1;
32+
result = GREATER_THAN;
2933
}
30-
return Optional.ofNullable( result );
34+
return result;
3135
}
3236

33-
public static Optional<Integer> infinityCheck(Float number, int treatNanAs) {
34-
Integer result = null;
37+
public static OptionalInt infinityCheck(Float number, OptionalInt treatNanAs) {
38+
OptionalInt result = FINITE_VALUE;
3539
if ( number == Float.NEGATIVE_INFINITY ) {
36-
result = -1;
40+
result = LESS_THAN;
3741
}
3842
else if ( number.isNaN() ) {
3943
result = treatNanAs;
4044
}
4145
else if ( number == Float.POSITIVE_INFINITY ) {
42-
result = 1;
46+
result = GREATER_THAN;
4347
}
44-
return Optional.ofNullable( result );
48+
return result;
4549
}
46-
4750
}

engine/src/main/java/org/hibernate/validator/internal/constraintvalidators/bv/number/bound/MaxValidatorForDouble.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
*/
77
package org.hibernate.validator.internal.constraintvalidators.bv.number.bound;
88

9+
import org.hibernate.validator.internal.constraintvalidators.bv.number.InfinityNumberComparatorHelper;
10+
911
/**
1012
* Check that the number being validated is less than or equal to the maximum
1113
* value specified.
@@ -16,6 +18,6 @@ public class MaxValidatorForDouble extends BaseMaxValidator<Double> {
1618

1719
@Override
1820
protected int compare(Double number) {
19-
return NumberComparatorHelper.compare( number, maxValue, 1 );
21+
return NumberComparatorHelper.compare( number, maxValue, InfinityNumberComparatorHelper.GREATER_THAN );
2022
}
2123
}

engine/src/main/java/org/hibernate/validator/internal/constraintvalidators/bv/number/bound/MaxValidatorForFloat.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
*/
77
package org.hibernate.validator.internal.constraintvalidators.bv.number.bound;
88

9+
import org.hibernate.validator.internal.constraintvalidators.bv.number.InfinityNumberComparatorHelper;
10+
911
/**
1012
* Check that the number being validated is less than or equal to the maximum
1113
* value specified.
@@ -16,6 +18,6 @@ public class MaxValidatorForFloat extends BaseMaxValidator<Float> {
1618

1719
@Override
1820
protected int compare(Float number) {
19-
return NumberComparatorHelper.compare( number, maxValue, 1 );
21+
return NumberComparatorHelper.compare( number, maxValue, InfinityNumberComparatorHelper.GREATER_THAN );
2022
}
2123
}

engine/src/main/java/org/hibernate/validator/internal/constraintvalidators/bv/number/bound/MinValidatorForDouble.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
*/
77
package org.hibernate.validator.internal.constraintvalidators.bv.number.bound;
88

9+
import org.hibernate.validator.internal.constraintvalidators.bv.number.InfinityNumberComparatorHelper;
10+
911
/**
1012
* Check that the number being validated is greater than or equal to the minimum
1113
* value specified.
@@ -16,6 +18,6 @@ public class MinValidatorForDouble extends BaseMinValidator<Double> {
1618

1719
@Override
1820
protected int compare(Double number) {
19-
return NumberComparatorHelper.compare( number, minValue, -1 );
21+
return NumberComparatorHelper.compare( number, minValue, InfinityNumberComparatorHelper.LESS_THAN );
2022
}
2123
}

engine/src/main/java/org/hibernate/validator/internal/constraintvalidators/bv/number/bound/MinValidatorForFloat.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
*/
77
package org.hibernate.validator.internal.constraintvalidators.bv.number.bound;
88

9+
import org.hibernate.validator.internal.constraintvalidators.bv.number.InfinityNumberComparatorHelper;
10+
911
/**
1012
* Check that the number being validated is greater than or equal to the minimum
1113
* value specified.
@@ -16,6 +18,6 @@ public class MinValidatorForFloat extends BaseMinValidator<Float> {
1618

1719
@Override
1820
protected int compare(Float number) {
19-
return NumberComparatorHelper.compare( number, minValue, -1 );
21+
return NumberComparatorHelper.compare( number, minValue, InfinityNumberComparatorHelper.LESS_THAN );
2022
}
2123
}

engine/src/main/java/org/hibernate/validator/internal/constraintvalidators/bv/number/bound/NumberComparatorHelper.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,14 @@
88

99
import java.math.BigDecimal;
1010
import java.math.BigInteger;
11-
import java.util.Optional;
11+
import java.util.OptionalInt;
12+
13+
import org.hibernate.validator.internal.constraintvalidators.bv.number.InfinityNumberComparatorHelper;
1214

1315
/**
1416
* @author Marko Bekhta
1517
*/
16-
public final class NumberComparatorHelper {
18+
final class NumberComparatorHelper {
1719

1820
private NumberComparatorHelper() {
1921
}
@@ -34,20 +36,19 @@ public static int compare(Number number, long value) {
3436
return Long.compare( number.longValue(), value );
3537
}
3638

37-
public static int compare(Double number, long value, int treatNanAs) {
38-
Optional<Integer> infinity = InfinityNumberComparatorHelper.infinityCheck( number, treatNanAs );
39+
public static int compare(Double number, long value, OptionalInt treatNanAs) {
40+
OptionalInt infinity = InfinityNumberComparatorHelper.infinityCheck( number, treatNanAs );
3941
if ( infinity.isPresent() ) {
40-
return infinity.get();
42+
return infinity.getAsInt();
4143
}
4244
return Long.compare( number.longValue(), value );
4345
}
4446

45-
public static int compare(Float number, long value, int treatNanAs) {
46-
Optional<Integer> infinity = InfinityNumberComparatorHelper.infinityCheck( number, treatNanAs );
47+
public static int compare(Float number, long value, OptionalInt treatNanAs) {
48+
OptionalInt infinity = InfinityNumberComparatorHelper.infinityCheck( number, treatNanAs );
4749
if ( infinity.isPresent() ) {
48-
return infinity.get();
50+
return infinity.getAsInt();
4951
}
5052
return Long.compare( number.longValue(), value );
5153
}
52-
5354
}

engine/src/main/java/org/hibernate/validator/internal/constraintvalidators/bv/number/bound/decimal/DecimalMaxValidatorForDouble.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
*/
77
package org.hibernate.validator.internal.constraintvalidators.bv.number.bound.decimal;
88

9+
import org.hibernate.validator.internal.constraintvalidators.bv.number.InfinityNumberComparatorHelper;
10+
911
/**
1012
* Check that the number being validated is less than or equal to the maximum
1113
* value specified.
@@ -15,6 +17,6 @@
1517
public class DecimalMaxValidatorForDouble extends BaseDecimalMaxValidator<Double> {
1618

1719
@Override protected int compare(Double number) {
18-
return DecimalNumberComparatorHelper.compare( number, maxValue, 1 );
20+
return DecimalNumberComparatorHelper.compare( number, maxValue, InfinityNumberComparatorHelper.GREATER_THAN );
1921
}
2022
}

engine/src/main/java/org/hibernate/validator/internal/constraintvalidators/bv/number/bound/decimal/DecimalMaxValidatorForFloat.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
*/
77
package org.hibernate.validator.internal.constraintvalidators.bv.number.bound.decimal;
88

9+
import org.hibernate.validator.internal.constraintvalidators.bv.number.InfinityNumberComparatorHelper;
10+
911
/**
1012
* Check that the number being validated is less than or equal to the maximum
1113
* value specified.
@@ -15,6 +17,6 @@
1517
public class DecimalMaxValidatorForFloat extends BaseDecimalMaxValidator<Float> {
1618

1719
@Override protected int compare(Float number) {
18-
return DecimalNumberComparatorHelper.compare( number, maxValue, 1 );
20+
return DecimalNumberComparatorHelper.compare( number, maxValue, InfinityNumberComparatorHelper.GREATER_THAN );
1921
}
2022
}

engine/src/main/java/org/hibernate/validator/internal/constraintvalidators/bv/number/bound/decimal/DecimalMinValidatorForDouble.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
*/
77
package org.hibernate.validator.internal.constraintvalidators.bv.number.bound.decimal;
88

9+
import org.hibernate.validator.internal.constraintvalidators.bv.number.InfinityNumberComparatorHelper;
10+
911
/**
1012
* Check that the number being validated is greater than or equal to the minimum
1113
* value specified.
@@ -15,6 +17,6 @@
1517
public class DecimalMinValidatorForDouble extends BaseDecimalMinValidator<Double> {
1618

1719
@Override protected int compare(Double number) {
18-
return DecimalNumberComparatorHelper.compare( number, minValue, -1 );
20+
return DecimalNumberComparatorHelper.compare( number, minValue, InfinityNumberComparatorHelper.LESS_THAN );
1921
}
2022
}

engine/src/main/java/org/hibernate/validator/internal/constraintvalidators/bv/number/bound/decimal/DecimalMinValidatorForFloat.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
*/
77
package org.hibernate.validator.internal.constraintvalidators.bv.number.bound.decimal;
88

9+
import org.hibernate.validator.internal.constraintvalidators.bv.number.InfinityNumberComparatorHelper;
10+
911
/**
1012
* Check that the number being validated is greater than or equal to the minimum
1113
* value specified.
@@ -15,6 +17,6 @@
1517
public class DecimalMinValidatorForFloat extends BaseDecimalMinValidator<Float> {
1618

1719
@Override protected int compare(Float number) {
18-
return DecimalNumberComparatorHelper.compare( number, minValue, -1 );
20+
return DecimalNumberComparatorHelper.compare( number, minValue, InfinityNumberComparatorHelper.LESS_THAN );
1921
}
2022
}

0 commit comments

Comments
 (0)