Skip to content

Commit 3637de1

Browse files
authored
Merge pull request #156 from SentryMan/contraint-only
Only Recognize Constraint Annotations
2 parents aee8051 + f465556 commit 3637de1

File tree

4 files changed

+13
-18
lines changed

4 files changed

+13
-18
lines changed

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

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import static io.avaje.validation.generator.APContext.typeElement;
44
import static io.avaje.validation.generator.PrimitiveUtil.isPrimitiveValidationAnnotations;
5-
import static java.util.function.Predicate.not;
65
import static java.util.stream.Collectors.toMap;
76

87
import java.util.HashMap;
@@ -25,7 +24,7 @@ public record ElementAnnotationContainer(
2524
Map<UType, String> typeUse2,
2625
Map<UType, String> crossParam) {
2726

28-
static ElementAnnotationContainer create(Element element, boolean classLevel) {
27+
static ElementAnnotationContainer create(Element element) {
2928
final var hasValid = ValidPrism.isPresent(element);
3029

3130
Map<UType, String> typeUse1;
@@ -35,23 +34,14 @@ static ElementAnnotationContainer create(Element element, boolean classLevel) {
3534
if (element instanceof final ExecutableElement executableElement) {
3635
uType = UType.parse(executableElement.getReturnType());
3736

38-
Optional.ofNullable(uType.param0()).map(UType::annotations).stream()
39-
.flatMap(List::stream)
40-
.filter(m -> !ValidPrism.isInstance(m))
41-
.filter(m -> !classLevel || hasMetaConstraintAnnotation(m))
42-
.collect(
43-
toMap(
44-
a -> UType.parse(a.getAnnotationType()),
45-
a -> AnnotationUtil.annotationAttributeMap(a, element)));
46-
4737
} else {
4838
uType = UType.parse(element.asType());
4939
}
5040

5141
typeUse1 =
5242
Optional.ofNullable(uType.param0()).map(UType::annotations).stream()
5343
.flatMap(List::stream)
54-
.filter(m -> !classLevel || hasMetaConstraintAnnotation(m))
44+
.filter(ElementAnnotationContainer::hasMetaConstraintAnnotation)
5545
.collect(
5646
toMap(
5747
a -> UType.parse(a.getAnnotationType()),
@@ -60,7 +50,7 @@ static ElementAnnotationContainer create(Element element, boolean classLevel) {
6050
typeUse2 =
6151
Optional.ofNullable(uType.param1()).map(UType::annotations).stream()
6252
.flatMap(List::stream)
63-
.filter(m -> !classLevel || hasMetaConstraintAnnotation(m))
53+
.filter(ElementAnnotationContainer::hasMetaConstraintAnnotation)
6454
.collect(
6555
toMap(
6656
a -> UType.parse(a.getAnnotationType()),
@@ -69,7 +59,7 @@ static ElementAnnotationContainer create(Element element, boolean classLevel) {
6959
final var annotations =
7060
element.getAnnotationMirrors().stream()
7161
.filter(m -> !ValidPrism.isInstance(m))
72-
.filter(m -> !classLevel || hasMetaConstraintAnnotation(m))
62+
.filter(ElementAnnotationContainer::hasMetaConstraintAnnotation)
7363
.map(
7464
a -> {
7565
if (CrossParamConstraintPrism.isPresent(a.getAnnotationType().asElement())) {
@@ -91,7 +81,8 @@ static ElementAnnotationContainer create(Element element, boolean classLevel) {
9181
}
9282

9383
static boolean hasMetaConstraintAnnotation(AnnotationMirror m) {
94-
return hasMetaConstraintAnnotation(m.getAnnotationType().asElement());
84+
return hasMetaConstraintAnnotation(m.getAnnotationType().asElement())
85+
|| ValidPrism.isInstance(m);
9586
}
9687

9788
static boolean hasMetaConstraintAnnotation(Element element) {
@@ -106,13 +97,15 @@ static ElementAnnotationContainer create(VariableElement varElement) {
10697
final var annotations =
10798
uType.annotations().stream()
10899
.filter(m -> !ValidPrism.isInstance(m))
100+
.filter(ElementAnnotationContainer::hasMetaConstraintAnnotation)
109101
.collect(
110102
toMap(
111103
a -> UType.parse(a.getAnnotationType()),
112104
a -> AnnotationUtil.annotationAttributeMap(a, varElement)));
113105
var typeUse1 =
114106
Optional.ofNullable(uType.param0()).map(UType::annotations).stream()
115107
.flatMap(List::stream)
108+
.filter(ElementAnnotationContainer::hasMetaConstraintAnnotation)
116109
.collect(
117110
toMap(
118111
a -> UType.parse(a.getAnnotationType()),
@@ -121,6 +114,7 @@ static ElementAnnotationContainer create(VariableElement varElement) {
121114
var typeUse2 =
122115
Optional.ofNullable(uType.param1()).map(UType::annotations).stream()
123116
.flatMap(List::stream)
117+
.filter(ElementAnnotationContainer::hasMetaConstraintAnnotation)
124118
.collect(
125119
toMap(
126120
a -> UType.parse(a.getAnnotationType()),

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ final class FieldReader {
3535
this.fieldName = element.getSimpleName().toString();
3636
this.publicField = element.getModifiers().contains(Modifier.PUBLIC);
3737
this.element = element;
38-
this.elementAnnotations = ElementAnnotationContainer.create(element, classLevel);
38+
this.elementAnnotations = ElementAnnotationContainer.create(element);
3939
this.genericType = elementAnnotations.genericType();
4040
final String shortType = genericType.shortWithoutAnnotations();
4141
usePrimitiveValidation = isPrimitiveValidationType(shortType) && elementAnnotations.supportsPrimitiveValidation();

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ final class ValidMethodReader {
3434
importTypes.add("io.avaje.validation.spi.Generated");
3535
importTypes.add("java.lang.reflect.Method");
3636
paramAnnotations = params.stream().map(ElementAnnotationContainer::create).toList();
37-
returnElementAnnotation = ElementAnnotationContainer.create(element, false);
37+
returnElementAnnotation = ElementAnnotationContainer.create(element);
3838
}
3939

4040
public String shortName() {

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public final class ValidationProcessor extends AbstractProcessor {
4444
private final List<BeanReader> allReaders = new ArrayList<>();
4545
private final Set<String> sourceTypes = new HashSet<>();
4646
private final Set<String> mixInImports = new HashSet<>();
47+
private final Set<String> alreadyGenerated = new HashSet<>();
4748
private SimpleComponentWriter componentWriter;
4849
private boolean readModuleInfo;
4950
private boolean processedAnything;
@@ -249,7 +250,7 @@ private void writeConstraintAdapters(Set<? extends Element> beans) {
249250
}
250251

251252
private void writeAdapterForType(TypeElement typeElement) {
252-
if (isController(typeElement)) {
253+
if (isController(typeElement) || !alreadyGenerated.add(typeElement.getQualifiedName().toString())) {
253254
// @Valid on controller just indicating the controller request
254255
// payloads should be validated - ignore this one
255256
return;

0 commit comments

Comments
 (0)