Skip to content

Commit 2fda257

Browse files
committed
working
1 parent 0152375 commit 2fda257

File tree

7 files changed

+39
-13
lines changed

7 files changed

+39
-13
lines changed

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
import javax.lang.model.element.Element;
1010
import javax.lang.model.element.ExecutableElement;
11-
import javax.lang.model.element.TypeElement;
1211
import javax.lang.model.element.VariableElement;
1312

1413
// TODO: better name???
@@ -20,7 +19,7 @@ public record ElementAnnotationContainer(
2019
Map<GenericType, String> typeUse2) {
2120

2221
static ElementAnnotationContainer create(Element element) {
23-
final var hasValid = !(element instanceof TypeElement) && ValidPrism.isPresent(element);
22+
final var hasValid = ValidPrism.isPresent(element);
2423
String rawType;
2524
Map<GenericType, String> typeUse1;
2625
Map<GenericType, String> typeUse2;
@@ -50,7 +49,7 @@ static ElementAnnotationContainer create(Element element) {
5049

5150
final var annotations =
5251
element.getAnnotationMirrors().stream()
53-
.filter(m -> !hasValid && !ValidPrism.isInstance(m))
52+
.filter(m -> !ValidPrism.isInstance(m))
5453
.collect(
5554
toMap(
5655
a -> GenericType.parse(a.getAnnotationType().toString()),

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

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ final class FieldReader {
2626
private final boolean classLevel;
2727

2828
FieldReader(Element element, List<String> genericTypeParams) {
29+
this(element, genericTypeParams, false);
30+
}
31+
32+
FieldReader(Element element, List<String> genericTypeParams, boolean classLevel) {
2933
this.genericTypeParams = genericTypeParams;
3034
this.fieldName = element.getSimpleName().toString();
3135
this.publicField = element.getModifiers().contains(Modifier.PUBLIC);
@@ -36,7 +40,7 @@ final class FieldReader {
3640
adapterShortType = initAdapterShortType(shortType);
3741
adapterFieldName = initShortName();
3842
this.optionalValidation = Util.isNullable(element);
39-
this.classLevel = element instanceof TypeElement;
43+
this.classLevel = classLevel;
4044
}
4145

4246
private String initAdapterShortType(String shortType) {
@@ -137,7 +141,13 @@ private void writeGetValue(Append writer, String suffix) {
137141

138142
void writeValidate(Append writer) {
139143
if (classLevel) {
140-
writer.append(" %s.validate(value, request, field);", adapterFieldName);
144+
writer.append(
145+
"""
146+
if (!request.hasViolations()) {
147+
%s.validate(value, request, field);
148+
}
149+
""",
150+
adapterFieldName);
141151
writer.eol().eol();
142152
return;
143153
}
@@ -168,8 +178,12 @@ public void writeConstructor(Append writer) {
168178
writer.append(" this.%s = ", adapterFieldName).eol();
169179

170180
new AdapterHelper(
171-
writer, elementAnnotations, " ", PrimitiveUtil.wrap(genericType.shortType()), genericType)
172-
.write();
181+
writer,
182+
elementAnnotations,
183+
" ",
184+
PrimitiveUtil.wrap(genericType.shortType()),
185+
genericType)
186+
.write();
173187
writer.append(";").eol().eol();
174188
}
175189

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ void read(TypeElement type) {
5858
}
5959
}
6060

61-
final var classAdapter = new FieldReader(type, genericTypeParams);
61+
final var classAdapter = new FieldReader(type, genericTypeParams, true);
6262
if (classAdapter.hasAnnotations()) {
6363
localFields.add(classAdapter);
6464
}

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,9 @@ static String initLower(String name) {
260260
/** Return the base type given the ValidationAdapter type. */
261261
static String baseTypeOfAdapter(String adapterFullName) {
262262
final var element = element(adapterFullName);
263-
263+
if (element == null) {
264+
throw new NullPointerException("Element not found for [" + adapterFullName + "]");
265+
}
264266
return Optional.of(element.getSuperclass())
265267
.filter(t -> t.toString().contains("io.avaje.validation.adapter.AbstractConstraintAdapter"))
266268
.or(validationAdapter(element))

validator/src/main/java/io/avaje/validation/adapter/AbstractContainerAdapter.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,7 @@
66
*/
77
public abstract class AbstractContainerAdapter<T> implements ValidationAdapter<T> {
88

9-
/**
10-
* Adapter placed on the container type
11-
*/
9+
/** Adapter placed on the container type */
1210
protected final ValidationAdapter<T> initalAdapter;
1311

1412
protected ValidationAdapter<Object> multiAdapter;

validator/src/main/java/io/avaje/validation/adapter/ValidationRequest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,7 @@ public interface ValidationRequest {
2626

2727
/** Throw ConstraintViolationException if there are violations in this request. */
2828
void throwWithViolations() throws ConstraintViolationException;
29+
30+
/** return true if there are violations in this request. */
31+
boolean hasViolations();
2932
}

validator/src/main/java/io/avaje/validation/core/DRequest.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ private String currentPath() {
3636
final StringBuilder sb = new StringBuilder(70);
3737
final var descendingIterator = pathStack.descendingIterator();
3838
while (descendingIterator.hasNext()) {
39-
String next = descendingIterator.next();
39+
final String next = descendingIterator.next();
4040
if (next.charAt(0) == '[') {
4141
sb.append(next).append(']');
4242
} else {
@@ -79,4 +79,14 @@ public void throwWithViolations() {
7979
public List<Class<?>> groups() {
8080
return groups;
8181
}
82+
83+
@Override
84+
public String toString() {
85+
return violations.toString();
86+
}
87+
88+
@Override
89+
public boolean hasViolations() {
90+
return !violations.isEmpty();
91+
}
8292
}

0 commit comments

Comments
 (0)