|
1 | 1 | package io.avaje.validation.generator;
|
2 | 2 |
|
| 3 | +import static io.avaje.validation.generator.ProcessingContext.isAssignable2Interface; |
3 | 4 | import static io.avaje.validation.generator.Util.trimAnnotations;
|
4 | 5 | import static java.util.function.Predicate.not;
|
5 | 6 | import static java.util.stream.Collectors.joining;
|
@@ -82,6 +83,41 @@ interface Handler {
|
82 | 83 | }
|
83 | 84 | }
|
84 | 85 |
|
| 86 | + static Map<String,String> KNOWN_TYPES = new HashMap<>(); |
| 87 | + static { |
| 88 | + KNOWN_TYPES.put("byte", "Byte"); |
| 89 | + KNOWN_TYPES.put("java.lang.Byte", "Byte"); |
| 90 | + KNOWN_TYPES.put("short", "Short"); |
| 91 | + KNOWN_TYPES.put("java.lang.Short", "Short"); |
| 92 | + KNOWN_TYPES.put("int", "Integer"); |
| 93 | + KNOWN_TYPES.put("java.lang.Integer", "Integer"); |
| 94 | + KNOWN_TYPES.put("long", "Long"); |
| 95 | + KNOWN_TYPES.put("java.lang.Long", "Long"); |
| 96 | + KNOWN_TYPES.put("float", "Float"); |
| 97 | + KNOWN_TYPES.put("java.lang.Float", "Float"); |
| 98 | + KNOWN_TYPES.put("double", "Double"); |
| 99 | + KNOWN_TYPES.put("java.lang.Double", "Double"); |
| 100 | + KNOWN_TYPES.put("java.math.BigDecimal", "BigDecimal"); |
| 101 | + KNOWN_TYPES.put("java.math.BigInteger", "BigInteger"); |
| 102 | + KNOWN_TYPES.put("java.lang.String", "String"); |
| 103 | + //TODO; Consider java.time types |
| 104 | + } |
| 105 | + |
| 106 | + static String lookupType(TypeMirror typeMirror) { |
| 107 | + String rawType = trimAnnotations(typeMirror.toString()); |
| 108 | + final String val = KNOWN_TYPES.get(rawType); |
| 109 | + if (val != null) { |
| 110 | + return val; |
| 111 | + } |
| 112 | + if (isAssignable2Interface(rawType, "java.lang.Number")) { |
| 113 | + return "Number"; |
| 114 | + } |
| 115 | + if (isAssignable2Interface(rawType, "java.lang.CharSequence")) { |
| 116 | + return "CharSequence"; |
| 117 | + } |
| 118 | + return null; |
| 119 | + } |
| 120 | + |
85 | 121 | private AnnotationUtil() {}
|
86 | 122 |
|
87 | 123 | static String annotationAttributeMap(AnnotationMirror annotationMirror, Element target) {
|
@@ -111,7 +147,6 @@ static String annotationAttributeMap(String annotationStr) {
|
111 | 147 | convertTypeUse(element, attributeMap);
|
112 | 148 |
|
113 | 149 | final Handler handler = handlers.get(result);
|
114 |
| - |
115 | 150 | return Objects.requireNonNullElse(handler, defaultHandler).attributes(attributeMap);
|
116 | 151 | }
|
117 | 152 |
|
@@ -400,8 +435,11 @@ public String attributes(AnnotationMirror annotationMirror, Element element, Ele
|
400 | 435 |
|
401 | 436 | @Override
|
402 | 437 | protected void writeTypeAttribute(TypeMirror typeMirror) {
|
403 |
| - writeAttributeKey("_type"); |
404 |
| - sb.append(trimAnnotations(typeMirror.toString()) + ".class"); |
| 438 | + String _type = lookupType(typeMirror); |
| 439 | + if (_type != null) { |
| 440 | + writeAttributeKey("_type"); |
| 441 | + sb.append('"').append(_type).append('"'); |
| 442 | + } |
405 | 443 | }
|
406 | 444 | }
|
407 | 445 |
|
|
0 commit comments