Skip to content

Commit b6bb993

Browse files
SentryManrbygrave
andauthored
Generate Component Before the Last Round (#345)
* Generate Component Before the Last Round * Update ValidationProcessor.java * Add some comments for generateComponent --------- Co-authored-by: Rob Bygrave <robin.bygrave@gmail.com>
1 parent 1911d0f commit b6bb993

File tree

1 file changed

+14
-3
lines changed

1 file changed

+14
-3
lines changed

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

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ public final class ValidationProcessor extends AbstractProcessor {
7070
private final SimpleComponentWriter componentWriter = new SimpleComponentWriter(metaData);
7171
private boolean readModuleInfo;
7272
private boolean processedAnything;
73+
private boolean generateComponent;
74+
private int rounds;
7375

7476
@Override
7577
public SourceVersion getSupportedSourceVersion() {
@@ -112,9 +114,10 @@ private void readModule() {
112114

113115
@Override
114116
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment round) {
115-
if (round.errorRaised()) {
117+
if (generateComponent || round.errorRaised()) {
116118
return false;
117119
}
120+
generateComponent = rounds++ > 0;
118121
APContext.setProjectModuleElement(annotations, round);
119122
readModule();
120123
getElements(round, AvajeConstraintPrism.PRISM_TYPE).ifPresent(this::writeConstraintAdapters);
@@ -139,13 +142,19 @@ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment
139142

140143
metaData.fullName(false);
141144
cascadeTypes();
142-
writeComponent(round.processingOver());
145+
writeComponent(generateComponent);
143146
return false;
144147
}
145148

146149
// Optional because these annotations are not guaranteed to exist
147150
private Optional<? extends Set<? extends Element>> getElements(RoundEnvironment round, String name) {
148-
return Optional.ofNullable(typeElement(name)).map(round::getElementsAnnotatedWith);
151+
var op =
152+
Optional.ofNullable(typeElement(name))
153+
.map(round::getElementsAnnotatedWith)
154+
.filter(n -> !n.isEmpty());
155+
// skip generateComponent if anything needs processing in this round
156+
generateComponent = generateComponent && op.isEmpty();
157+
return op;
149158
}
150159

151160
private void registerCustomAdapters(Set<? extends Element> elements) {
@@ -203,6 +212,8 @@ private void cascadeTypesInner() {
203212
}
204213
for (final String type : extraTypes) {
205214
if (!ignoreType(type)) {
215+
// skip generateComponent for this round due to cascade
216+
generateComponent = false;
206217
final TypeElement element = typeElement(type);
207218
if (cascadeElement(element)) {
208219
writeAdapterForType(element);

0 commit comments

Comments
 (0)