diff --git a/inject-generator/pom.xml b/inject-generator/pom.xml index 3d39323a7..2fbace87a 100644 --- a/inject-generator/pom.xml +++ b/inject-generator/pom.xml @@ -26,7 +26,7 @@ io.avaje avaje-spi-service - 1.9 + 1.10 diff --git a/inject-generator/src/main/java/io/avaje/inject/generator/ProcessingContext.java b/inject-generator/src/main/java/io/avaje/inject/generator/ProcessingContext.java index 32d63e708..741547cc7 100644 --- a/inject-generator/src/main/java/io/avaje/inject/generator/ProcessingContext.java +++ b/inject-generator/src/main/java/io/avaje/inject/generator/ProcessingContext.java @@ -29,10 +29,9 @@ static final class Ctx { private final List modules = new ArrayList<>(); private final List delayQueue = new ArrayList<>(); private final List spiServices = new ArrayList<>(); + private final boolean spiPresent = APContext.typeElement("io.avaje.spi.internal.ServiceProcessor") != null; private boolean strictWiring; - Ctx() {} - void registerProvidedTypes(Set moduleFileProvided) { ExternalProvider.registerModuleProvidedTypes(providedTypes); providedTypes.addAll(moduleFileProvided); @@ -44,10 +43,6 @@ static void init(Set moduleFileProvided, boolean performModuleValidation CTX.get().registerProvidedTypes(moduleFileProvided); } - static void testInit() { - CTX.set(new Ctx()); - } - static String loadMetaInfServices() { return loadMetaInf(Constants.META_INF_SPI).stream() .filter(ProcessingContext::isInjectModule) @@ -96,7 +91,12 @@ static void addInjectSPI(String type) { } static FileObject createMetaInfWriterFor(String interfaceType) throws IOException { - return filer().createResource(StandardLocation.CLASS_OUTPUT, "", interfaceType); + var serviceFile = + CTX.get().spiPresent + ? interfaceType.replace("META-INF/services/", "META-INF/generated-services/") + : interfaceType; + + return filer().createResource(StandardLocation.CLASS_OUTPUT, "", serviceFile); } static TypeElement elementMaybe(String rawType) { @@ -198,7 +198,6 @@ static void writeSPIServicesFile() { writer.close(); } } catch (IOException e) { - e.printStackTrace(); logError("Failed to write services file " + e.getMessage()); } } diff --git a/inject-generator/src/test/java/io/avaje/inject/generator/InjectProcessorTest.java b/inject-generator/src/test/java/io/avaje/inject/generator/InjectProcessorTest.java index 4cb4db46c..0670758c1 100644 --- a/inject-generator/src/test/java/io/avaje/inject/generator/InjectProcessorTest.java +++ b/inject-generator/src/test/java/io/avaje/inject/generator/InjectProcessorTest.java @@ -8,7 +8,6 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; @@ -26,6 +25,8 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; +import io.avaje.spi.internal.ServiceProcessor; + class InjectProcessorTest { @AfterEach @@ -52,7 +53,7 @@ void testGeneration() throws Exception { final JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); final StandardJavaFileManager manager = compiler.getStandardFileManager(null, null, null); - manager.setLocation(StandardLocation.SOURCE_PATH, Arrays.asList(new File(source))); + manager.setLocation(StandardLocation.SOURCE_PATH, List.of(new File(source))); final Set fileKinds = Collections.singleton(Kind.SOURCE); @@ -67,7 +68,7 @@ void testGeneration() throws Exception { List.of("--release=" + Integer.getInteger("java.specification.version")), null, files); - task.setProcessors(Arrays.asList(new InjectProcessor())); + task.setProcessors(List.of(new InjectProcessor(), new ServiceProcessor())); assertThat(task.call()).isTrue(); } diff --git a/inject-generator/src/test/java/io/avaje/inject/generator/UtilTest.java b/inject-generator/src/test/java/io/avaje/inject/generator/UtilTest.java index e9173d0ab..edeb06e12 100644 --- a/inject-generator/src/test/java/io/avaje/inject/generator/UtilTest.java +++ b/inject-generator/src/test/java/io/avaje/inject/generator/UtilTest.java @@ -27,7 +27,6 @@ void nestedShortName() { @Test void nestedPackageOf() { - ProcessingContext.testInit(); assertEquals(Util.nestedPackageOf("com.example.Foo.Bar"), "com.example"); assertEquals(Util.nestedPackageOf("com.example.other.foo.Bar"), "com.example.other"); }