66import java .util .List ;
77import java .util .Objects ;
88import java .util .Optional ;
9+ import java .util .Set ;
910import java .util .stream .Collectors ;
1011import java .util .stream .Stream ;
1112
2627import javax .tools .JavaFileObject ;
2728import javax .tools .StandardLocation ;
2829
29- import io .avaje .http .generator .core .ModuleInfoReader .Provides ;
3030import io .avaje .http .generator .core .openapi .DocContext ;
3131
3232public final class ProcessingContext {
@@ -49,8 +49,6 @@ private static final class Ctx {
4949 private final boolean instrumentAllMethods ;
5050 private final boolean disableDirectWrites ;
5151 private final boolean javalin6 ;
52- private final boolean spiPresent = APContext .typeElement ("io.avaje.spi.internal.ServiceProcessor" ) != null ;
53- private boolean validated ;
5452 private String clientFQN ;
5553
5654 Ctx (ProcessingEnvironment env , PlatformAdapter adapter , boolean generateOpenAPI ) {
@@ -143,12 +141,8 @@ public static JavaFileObject createWriter(String cls, Element origin) throws IOE
143141
144142 /** Create a file writer for the META-INF services file. */
145143 public static FileObject createMetaInfWriter (String target ) throws IOException {
146- var serviceFile =
147- CTX .get ().spiPresent
148- ? target .replace ("META-INF/services/" , "META-INF/generated-services/" )
149- : target ;
150144
151- return filer ().createResource (StandardLocation .CLASS_OUTPUT , "" , serviceFile );
145+ return filer ().createResource (StandardLocation .CLASS_OUTPUT , "" , target );
152146 }
153147
154148 public static JavaFileObject createWriter (String cls ) throws IOException {
@@ -241,8 +235,7 @@ static Stream<String> superTypes(Element element) {
241235
242236 public static void validateModule () {
243237 var module = APContext .getProjectModuleElement ();
244- if (module != null && !CTX .get ().validated && !module .isUnnamed ()) {
245- CTX .get ().validated = true ;
238+ if (module != null && !module .isUnnamed ()) {
246239 try (var bufferedReader = APContext .getModuleInfoReader ()) {
247240 var reader = new ModuleInfoReader (module , bufferedReader );
248241 reader .requires ().forEach (r -> {
@@ -251,18 +244,9 @@ public static void validateModule() {
251244 }
252245 });
253246 var fqn = CTX .get ().clientFQN ;
254- if (CTX .get ().spiPresent || fqn == null ) {
255- return ;
256- }
257- var noProvides = reader .provides ().stream ()
258- .filter (p -> "io.avaje.http.client.HttpClient.GeneratedComponent" .equals (p .service ()))
259- .map (Provides ::implementations )
260- .flatMap (List ::stream )
261- .noneMatch (s -> s .contains (fqn ));
262-
263- if (noProvides && !buildPluginAvailable ()) {
264- logError (module , "Missing `provides io.avaje.http.client.HttpClient.GeneratedComponent with %s;`" , fqn );
265- }
247+
248+ reader .validateServices ("io.avaje.http.client.HttpClient.GeneratedComponent" , Set .of (fqn ));
249+
266250 } catch (Exception e ) {
267251 // can't read module
268252 }
0 commit comments