@@ -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