Skip to content

Commit d26caad

Browse files
authored
Generate component before the last round (#463)
1 parent 1a591bb commit d26caad

File tree

1 file changed

+14
-3
lines changed

1 file changed

+14
-3
lines changed

jsonb-generator/src/main/java/io/avaje/jsonb/generator/JsonbProcessor.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ public final class JsonbProcessor extends AbstractProcessor {
7070

7171
private SimpleComponentWriter componentWriter;
7272
private boolean readModuleInfo;
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, ValuePrism.PRISM_TYPE).ifPresent(this::writeValueAdapters);
@@ -127,13 +130,19 @@ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment
127130

128131
metaData.fullName(false);
129132
cascadeTypes();
130-
writeComponent(round.processingOver());
133+
writeComponent(generateComponent);
131134
return false;
132135
}
133136

134137
// Optional because annotations are not guaranteed to exist
135138
private Optional<? extends Set<? extends Element>> getElements(RoundEnvironment round, String name) {
136-
return Optional.ofNullable(typeElement(name)).map(round::getElementsAnnotatedWith);
139+
var op =
140+
Optional.ofNullable(typeElement(name))
141+
.map(round::getElementsAnnotatedWith)
142+
.filter(n -> !n.isEmpty());
143+
// skip generateComponent if anything needs processing in this round
144+
generateComponent = generateComponent && op.isEmpty();
145+
return op;
137146
}
138147

139148
private void registerCustomAdapters(Set<? extends Element> elements) {
@@ -245,6 +254,8 @@ private void cascadeTypesInner() {
245254
}
246255
for (final String type : extraTypes) {
247256
if (!ignoreType(type)) {
257+
// skip generateComponent for this round due to cascade
258+
generateComponent = false;
248259
final TypeElement element = typeElement(type);
249260
if (element != null
250261
&& element.getKind() != ElementKind.ENUM

0 commit comments

Comments
 (0)