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