Skip to content

Commit a5f3789

Browse files
committed
Allow for now _type in number sign and comparator
1 parent fc8d885 commit a5f3789

File tree

4 files changed

+55
-61
lines changed

4 files changed

+55
-61
lines changed

validator-generator/src/main/java/io/avaje/validation/generator/AnnotationUtil.java

Lines changed: 14 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,15 @@ interface Handler {
4646
handlers.put("jakarta.validation.constraints.DecimalMax", decimalHandler);
4747
handlers.put("jakarta.validation.constraints.DecimalMin", decimalHandler);
4848

49-
final String[] withTypeKeys = {
49+
final var commonHandler = new CommonHandler();
50+
final String[] keys = {
51+
"AssertFalse",
52+
"AssertTrue",
53+
"Null",
54+
"NotNull",
55+
"NotBlank",
56+
"NotEmpty",
57+
"Email",
5058
"Length",
5159
"Range",
5260
"Max",
@@ -62,21 +70,6 @@ interface Handler {
6270
"Negative",
6371
"NegativeOrZero",
6472
};
65-
var c = new CommonWithTypeHandler();
66-
for (final String key : withTypeKeys) {
67-
handlers.put("io.avaje.validation.constraints." + key, c);
68-
handlers.put("jakarta.validation.constraints." + key, c);
69-
}
70-
final var commonHandler = new CommonHandler();
71-
final String[] keys = {
72-
"AssertFalse",
73-
"AssertTrue",
74-
"Null",
75-
"NotNull",
76-
"NotBlank",
77-
"NotEmpty",
78-
"Email",
79-
};
8073
for (final String key : keys) {
8174
handlers.put("io.avaje.validation.constraints." + key, commonHandler);
8275
handlers.put("jakarta.validation.constraints." + key, commonHandler);
@@ -377,7 +370,11 @@ String writeAttributes() {
377370
}
378371

379372
protected void writeTypeAttribute(TypeMirror typeMirror) {
380-
// do nothing by default
373+
String _type = lookupType(typeMirror);
374+
if (_type != null) {
375+
writeAttributeKey("_type");
376+
sb.append('"').append(_type).append('"');
377+
}
381378
}
382379

383380
void writeAttribute(Name simpleName, AnnotationValue value, AnnotationValue defaultValue) {
@@ -425,30 +422,6 @@ public String attributes(Map<String, Object> attributeMap) {
425422
}
426423
}
427424

428-
static class CommonWithTypeHandler extends CommonHandler {
429-
430-
CommonWithTypeHandler(AnnotationMirror annotationMirror, Element element, Element target) {
431-
super(annotationMirror, element, target);
432-
}
433-
434-
CommonWithTypeHandler() {
435-
}
436-
437-
@Override
438-
public String attributes(AnnotationMirror annotationMirror, Element element, Element target) {
439-
return new CommonWithTypeHandler(annotationMirror, element, target).writeAttributes();
440-
}
441-
442-
@Override
443-
protected void writeTypeAttribute(TypeMirror typeMirror) {
444-
String _type = lookupType(typeMirror);
445-
if (_type != null) {
446-
writeAttributeKey("_type");
447-
sb.append('"').append(_type).append('"');
448-
}
449-
}
450-
}
451-
452425
static class CommonHandler extends StandardHandler {
453426

454427
/** Prototype factory only */

validator/src/main/java/io/avaje/validation/core/adapters/NumberComparatorHelper.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ final class NumberComparatorHelper {
99
private NumberComparatorHelper() {}
1010

1111
static int compareDecimal(String targetType, Number number, BigDecimal value, OptionalInt treatNanAs) {
12+
if (targetType == null) {
13+
return compare(number.doubleValue(), value, treatNanAs);
14+
}
1215
return switch (targetType) {
1316
case "Double" -> compare((Double) number, value, treatNanAs);
1417
case "Float" -> compare((Float) number, value, treatNanAs);

validator/src/main/java/io/avaje/validation/core/adapters/NumberSignHelper.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ static BigDecimal toBigDecimal(Object value) {
2222
}
2323

2424
static int signum(String targetType, Object value, OptionalInt treatNanAs) {
25+
if (targetType == null) {
26+
return Double.compare(((Number) value).doubleValue(), DOUBLE_ZERO);
27+
}
2528
return switch (targetType) {
2629
case "String", "CharSequence" -> toBigDecimal(value).signum();
2730
case "BigDecimal" -> ((BigDecimal) value).signum();

validator/src/test/java/io/avaje/validation/core/adapters/NegativeTest.java

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,24 @@ class NegativeTest extends BasicTest {
1818
@interface NegativeOrZero {}
1919

2020
ValidationAdapter<Object> negativeAdapter =
21-
ctx.adapter(Negative.class, Map.of("message", "elim-"));
21+
ctx.adapter(Negative.class, Map.of("message", "elim-", "_type", "Number"));
2222
ValidationAdapter<Object> negativeOrZeroAdapter =
23-
ctx.adapter(NegativeOrZero.class, Map.of("message", "-anate the negative"));
23+
ctx.adapter(NegativeOrZero.class, Map.of("message", "-anate the negative", "_type", "Number"));
24+
25+
ValidationAdapter<Object> negativeString =
26+
ctx.adapter(Negative.class, Map.of("message", "elim-", "_type", "String"));
27+
ValidationAdapter<Object> negativeOrZeroString =
28+
ctx.adapter(NegativeOrZero.class, Map.of("message", "-anate the negative", "_type", "String"));
29+
30+
ValidationAdapter<Object> negativeBD =
31+
ctx.adapter(Negative.class, Map.of("message", "elim-", "_type", "BigDecimal"));
32+
ValidationAdapter<Object> negativeOrZeroBD =
33+
ctx.adapter(NegativeOrZero.class, Map.of("message", "-anate the negative", "_type", "BigDecimal"));
34+
ValidationAdapter<Object> negativeBI =
35+
ctx.adapter(Negative.class, Map.of("message", "elim-", "_type", "BigInteger"));
36+
ValidationAdapter<Object> negativeOrZeroBI =
37+
ctx.adapter(NegativeOrZero.class, Map.of("message", "-anate the negative", "_type", "BigInteger"));
38+
2439

2540
@Test
2641
void testNull() {
@@ -43,70 +58,70 @@ void testInfinity() {
4358

4459
@Test
4560
void testPositive() {
46-
assertThat(negativeAdapter.validate("1", request)).isFalse();
61+
assertThat(negativeString.validate("1", request)).isFalse();
4762
assertThat(negativeAdapter.validate(1, request)).isFalse();
4863
assertThat(negativeAdapter.validate(1f, request)).isFalse();
4964
assertThat(negativeAdapter.validate(1D, request)).isFalse();
5065
assertThat(negativeAdapter.validate(1L, request)).isFalse();
5166
assertThat(negativeAdapter.validate((short) 1, request)).isFalse();
5267
assertThat(negativeAdapter.validate((byte) 1, request)).isFalse();
53-
assertThat(negativeAdapter.validate(BigInteger.ONE, request)).isFalse();
54-
assertThat(negativeAdapter.validate(BigDecimal.ONE, request)).isFalse();
68+
assertThat(negativeBI.validate(BigInteger.ONE, request)).isFalse();
69+
assertThat(negativeBD.validate(BigDecimal.ONE, request)).isFalse();
5570

56-
assertThat(negativeOrZeroAdapter.validate("1", request)).isFalse();
71+
assertThat(negativeOrZeroString.validate("1", request)).isFalse();
5772
assertThat(negativeOrZeroAdapter.validate(1, request)).isFalse();
5873
assertThat(negativeOrZeroAdapter.validate(1f, request)).isFalse();
5974
assertThat(negativeOrZeroAdapter.validate(1D, request)).isFalse();
6075
assertThat(negativeOrZeroAdapter.validate(1L, request)).isFalse();
6176
assertThat(negativeOrZeroAdapter.validate((short) 1, request)).isFalse();
6277
assertThat(negativeOrZeroAdapter.validate((byte) 1, request)).isFalse();
63-
assertThat(negativeOrZeroAdapter.validate(BigInteger.ONE, request)).isFalse();
64-
assertThat(negativeOrZeroAdapter.validate(BigDecimal.ONE, request)).isFalse();
78+
assertThat(negativeOrZeroBI.validate(BigInteger.ONE, request)).isFalse();
79+
assertThat(negativeOrZeroBD.validate(BigDecimal.ONE, request)).isFalse();
6580
}
6681

6782
@Test
6883
void testNegative() {
69-
assertThat(negativeAdapter.validate("-1", request)).isTrue();
84+
assertThat(negativeString.validate("-1", request)).isTrue();
7085
assertThat(negativeAdapter.validate(-1, request)).isTrue();
7186
assertThat(negativeAdapter.validate(-1f, request)).isTrue();
7287
assertThat(negativeAdapter.validate(-1D, request)).isTrue();
7388
assertThat(negativeAdapter.validate(-1L, request)).isTrue();
7489
assertThat(negativeAdapter.validate((short) -1, request)).isTrue();
7590
assertThat(negativeAdapter.validate((byte) -1, request)).isTrue();
76-
assertThat(negativeAdapter.validate(BigInteger.valueOf(-1), request)).isTrue();
77-
assertThat(negativeAdapter.validate(BigDecimal.valueOf(-1), request)).isTrue();
91+
assertThat(negativeBI.validate(BigInteger.valueOf(-1), request)).isTrue();
92+
assertThat(negativeBD.validate(BigDecimal.valueOf(-1), request)).isTrue();
7893

79-
assertThat(negativeOrZeroAdapter.validate("-1", request)).isTrue();
94+
assertThat(negativeOrZeroString.validate("-1", request)).isTrue();
8095
assertThat(negativeOrZeroAdapter.validate(-1, request)).isTrue();
8196
assertThat(negativeOrZeroAdapter.validate(-1f, request)).isTrue();
8297
assertThat(negativeOrZeroAdapter.validate(-1D, request)).isTrue();
8398
assertThat(negativeOrZeroAdapter.validate(-1L, request)).isTrue();
8499
assertThat(negativeOrZeroAdapter.validate((short) -1, request)).isTrue();
85100
assertThat(negativeOrZeroAdapter.validate((byte) -1, request)).isTrue();
86-
assertThat(negativeOrZeroAdapter.validate(BigInteger.valueOf(-1), request)).isTrue();
87-
assertThat(negativeOrZeroAdapter.validate(BigDecimal.valueOf(-1), request)).isTrue();
101+
assertThat(negativeOrZeroBI.validate(BigInteger.valueOf(-1), request)).isTrue();
102+
assertThat(negativeOrZeroBD.validate(BigDecimal.valueOf(-1), request)).isTrue();
88103
}
89104

90105
@Test
91106
void testZero() {
92-
assertThat(negativeAdapter.validate("0", request)).isFalse();
107+
assertThat(negativeString.validate("0", request)).isFalse();
93108
assertThat(negativeAdapter.validate(0, request)).isFalse();
94109
assertThat(negativeAdapter.validate(0f, request)).isFalse();
95110
assertThat(negativeAdapter.validate(0D, request)).isFalse();
96111
assertThat(negativeAdapter.validate(0L, request)).isFalse();
97112
assertThat(negativeAdapter.validate((short) 0, request)).isFalse();
98113
assertThat(negativeAdapter.validate((byte) 0, request)).isFalse();
99-
assertThat(negativeAdapter.validate(BigInteger.ZERO, request)).isFalse();
100-
assertThat(negativeAdapter.validate(BigDecimal.ZERO, request)).isFalse();
114+
assertThat(negativeBI.validate(BigInteger.ZERO, request)).isFalse();
115+
assertThat(negativeBD.validate(BigDecimal.ZERO, request)).isFalse();
101116

102-
assertThat(negativeOrZeroAdapter.validate("0", request)).isTrue();
117+
assertThat(negativeOrZeroString.validate("0", request)).isTrue();
103118
assertThat(negativeOrZeroAdapter.validate(0, request)).isTrue();
104119
assertThat(negativeOrZeroAdapter.validate(0f, request)).isTrue();
105120
assertThat(negativeOrZeroAdapter.validate(0D, request)).isTrue();
106121
assertThat(negativeOrZeroAdapter.validate(0L, request)).isTrue();
107122
assertThat(negativeOrZeroAdapter.validate((short) 0, request)).isTrue();
108123
assertThat(negativeOrZeroAdapter.validate((byte) 0, request)).isTrue();
109-
assertThat(negativeOrZeroAdapter.validate(BigInteger.ZERO, request)).isTrue();
110-
assertThat(negativeOrZeroAdapter.validate(BigDecimal.ZERO, request)).isTrue();
124+
assertThat(negativeOrZeroBI.validate(BigInteger.ZERO, request)).isTrue();
125+
assertThat(negativeOrZeroBD.validate(BigDecimal.ZERO, request)).isTrue();
111126
}
112127
}

0 commit comments

Comments
 (0)