From 35ffda047870d981eeee5ecd601772a4d3bb5a2a Mon Sep 17 00:00:00 2001 From: Josiah Noel <32279667+SentryMan@users.noreply.github.com> Date: Wed, 13 Nov 2024 20:33:13 -0500 Subject: [PATCH 1/5] write services --- .../inject/generator/ExternalProvider.java | 45 +++++++++++++------ .../inject/generator/InjectProcessor.java | 29 +++++++----- .../inject/generator/ProcessingContext.java | 17 ++++--- .../avaje/inject/mojo/AutoProvidesMojo.java | 30 ++++++++----- 4 files changed, 80 insertions(+), 41 deletions(-) diff --git a/inject-generator/src/main/java/io/avaje/inject/generator/ExternalProvider.java b/inject-generator/src/main/java/io/avaje/inject/generator/ExternalProvider.java index df8e9d27..4af17491 100644 --- a/inject-generator/src/main/java/io/avaje/inject/generator/ExternalProvider.java +++ b/inject-generator/src/main/java/io/avaje/inject/generator/ExternalProvider.java @@ -2,6 +2,7 @@ import static java.util.List.of; import static java.util.Map.entry; +import static java.util.stream.Collectors.joining; import static java.util.stream.Collectors.toList; import java.io.FileWriter; @@ -10,6 +11,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -80,7 +82,6 @@ static void registerModuleProvidedTypes(Set providedTypes) { } for (final var module : modules) { final var name = module.getClass().getTypeName(); - APContext.logNote("Detected Module: %s", name); final var provides = new TreeSet(); for (final var provide : module.provides()) { provides.add(provide.getTypeName()); @@ -119,6 +120,7 @@ static void registerPluginProvidedTypes(ScopeInfo defaultScope) { List plugins = LoadServices.loadPlugins(CLASS_LOADER); for (final var plugin : plugins) { + ProcessingContext.addExternalInjectSPI(plugin.getClass().getCanonicalName()); var name = plugin.getClass().getTypeName(); if (avajePlugins.containsKey(name)) { continue; @@ -142,6 +144,7 @@ private static boolean pluginExists(String relativeName) { } static void registerExternalMetaData(String name) { + ProcessingContext.addExternalInjectSPI(name); Optional.ofNullable(APContext.typeElement(name)) .map(TypeElement::getEnclosedElements) .map(ElementFilter::methodsIn) @@ -163,10 +166,14 @@ static void readMetaDataProvides(Collection providedTypes) { } static void scanAllInjectPlugins(ScopeInfo defaultScope) { + + Map> plugins = new HashMap<>(); final var hasPlugins = !defaultScope.pluginProvided().isEmpty(); avajePlugins.forEach((k, v) -> { if (APContext.typeElement(k) != null) { + plugins.put(k, v); APContext.logNote("Loaded Plugin: %s", k); + ProcessingContext.addExternalInjectSPI(k); v.forEach(defaultScope::pluginProvided); } }); @@ -178,42 +185,54 @@ static void scanAllInjectPlugins(ScopeInfo defaultScope) { injectExtensions() .filter(PluginProvidesPrism::isPresent) .distinct() - .forEach(pluginType -> addPluginToScope(defaultScope, pluginType)); + .forEach(pluginType -> addPluginToScope(defaultScope, pluginType, plugins)); if (defaultScope.pluginProvided().isEmpty()) { APContext.logNote("No external plugins detected"); } - writePluginProvides(defaultScope); + writePluginProvides(plugins); } - private static void writePluginProvides(ScopeInfo defaultScope) { + private static void writePluginProvides(Map> plugins) { // write detected plugins to a text file for test compilation - try (final var pluginWriter = new FileWriter(APContext.getBuildResource("avaje-plugin-provides.txt").toFile())) { - for (var providedType : defaultScope.pluginProvided()) { - pluginWriter.write(providedType); + try (final var pluginWriter = + new FileWriter(APContext.getBuildResource("avaje-plugins.csv").toFile())) { + + pluginWriter.write("External Plugin Type|Provides"); + for (final var plugin : plugins.entrySet()) { pluginWriter.write("\n"); + pluginWriter.write(plugin.getKey()); + pluginWriter.write("|"); + var provides = plugin.getValue().stream().collect(joining(",")); + pluginWriter.write(provides.isEmpty() ? " " : provides); } } catch (IOException e) { - APContext.logWarn("Failed to write avaje-plugin-provides.txt due to %s", e.getMessage()); + APContext.logWarn("Failed to write avaje-plugins.csv due to %s", e.getMessage()); } } - private static void addPluginToScope(ScopeInfo defaultScope, TypeElement pluginType) { + private static void addPluginToScope( + ScopeInfo defaultScope, TypeElement pluginType, Map> plugins) { final var name = pluginType.getQualifiedName().toString(); - if (avajePlugins.containsKey(name)) { - return; - } + + ProcessingContext.addExternalInjectSPI(name); var prism = PluginProvidesPrism.getInstanceOn(pluginType); + List provides=new ArrayList<>(); for (final var provide : prism.value()) { defaultScope.pluginProvided(provide.toString()); + provides.add(provide.toString()); } for (final var provide : prism.providesStrings()) { defaultScope.pluginProvided(provide); + provides.add(provide); } for (final var provide : prism.providesAspects()) { - defaultScope.pluginProvided(Util.wrapAspect(provide.toString())); + final var wrapAspect = Util.wrapAspect(provide.toString()); + defaultScope.pluginProvided(wrapAspect); + provides.add(wrapAspect); } APContext.logNote("Loaded Plugin: %s", name); + plugins.put(name, provides); } static void scanAllAvajeModules(Collection providedTypes) { diff --git a/inject-generator/src/main/java/io/avaje/inject/generator/InjectProcessor.java b/inject-generator/src/main/java/io/avaje/inject/generator/InjectProcessor.java index ddf27525..0d8331c9 100644 --- a/inject-generator/src/main/java/io/avaje/inject/generator/InjectProcessor.java +++ b/inject-generator/src/main/java/io/avaje/inject/generator/InjectProcessor.java @@ -29,6 +29,7 @@ @GenerateUtils @GenerateAPContext @GenerateModuleInfoReader +@SupportedOptions("mergeServices") @SupportedAnnotationTypes({ AspectImportPrism.PRISM_TYPE, AssistFactoryPrism.PRISM_TYPE, @@ -66,7 +67,7 @@ public synchronized void init(ProcessingEnvironment processingEnv) { super.init(processingEnv); APContext.init(processingEnv); loadProvidedFiles(); - ProcessingContext.init(moduleFileProvided); + ProcessingContext.registerProvidedTypes(moduleFileProvided); moduleData.forEach(ProcessingContext::addModule); this.elementUtils = processingEnv.getElementUtils(); this.allScopes = new AllScopes(); @@ -100,16 +101,22 @@ void loadProvidedFiles() { pluginFileProvided.addAll(lines("avaje-plugin-provides.txt")); lines("avaje-module-dependencies.csv").stream() - .filter(s -> s.contains("|") && !s.startsWith("External Module Type")) - .distinct() - .map(l -> l.split("\\|")) - .map(ModuleData::of) - .flatMap(Optional::stream) - .forEach(m -> { - ExternalProvider.registerExternalMetaData(m.name()); - ExternalProvider.readMetaDataProvides(moduleFileProvided); - this.moduleData.add(m); - }); + .filter(s -> s.contains("|") && !s.startsWith("External Module Type")) + .distinct() + .map(l -> l.split("\\|")) + .map(ModuleData::of) + .flatMap(Optional::stream) + .forEach( + m -> { + ExternalProvider.registerExternalMetaData(m.name()); + ExternalProvider.readMetaDataProvides(moduleFileProvided); + this.moduleData.add(m); + }); + lines("avaje-plugins.csv").stream() + .filter(s -> s.contains("|") && !s.startsWith("External Plugin Type")) + .distinct() + .map(l -> l.split("\\|")[1]) + .forEach(pluginFileProvided::add); } private List lines(String relativeName) { 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 9afd4880..eb98f9b8 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 @@ -20,7 +20,7 @@ final class ProcessingContext { private static final String EVENTS_SPI = "io.avaje.inject.events.spi.ObserverManagerPlugin"; - private static final ThreadLocal CTX = new ThreadLocal<>(); + private static final ThreadLocal CTX = ThreadLocal.withInitial(Ctx::new); private static boolean processingOver; private ProcessingContext() {} @@ -33,6 +33,8 @@ static final class Ctx { private final List delayQueue = new ArrayList<>(); private final Set spiServices = new TreeSet<>(); private boolean strictWiring; + private final boolean mergeServices = + APContext.getOption("mergeServices").map(Boolean::valueOf).orElse(true); void registerProvidedTypes(Set moduleFileProvided) { ExternalProvider.registerModuleProvidedTypes(providedTypes); @@ -40,8 +42,7 @@ void registerProvidedTypes(Set moduleFileProvided) { } } - static void init(Set moduleFileProvided) { - CTX.set(new Ctx()); + static void registerProvidedTypes(Set moduleFileProvided) { CTX.get().registerProvidedTypes(moduleFileProvided); addEventSPI(); } @@ -105,6 +106,13 @@ static void addInjectSPI(String type) { CTX.get().spiServices.add(type); } + static void addExternalInjectSPI(String type) { + + if (CTX.get().mergeServices) { + CTX.get().spiServices.add(type); + } + } + static FileObject createMetaInfWriterFor(String interfaceType) throws IOException { return filer().createResource(StandardLocation.CLASS_OUTPUT, "", interfaceType); } @@ -205,9 +213,6 @@ static void processingOver(boolean over) { } static void writeSPIServicesFile() { - Optional.ofNullable(APContext.getProjectModuleElement()) - .filter(m -> "io.avaje.inject.test".equals(m.getQualifiedName().toString())) - .ifPresent(m -> CTX.get().spiServices.remove(EVENTS_SPI)); readExistingMetaInfServices(); if (CTX.get().spiServices.isEmpty()) { diff --git a/inject-maven-plugin/src/main/java/io/avaje/inject/mojo/AutoProvidesMojo.java b/inject-maven-plugin/src/main/java/io/avaje/inject/mojo/AutoProvidesMojo.java index 2d912594..4521e9ff 100644 --- a/inject-maven-plugin/src/main/java/io/avaje/inject/mojo/AutoProvidesMojo.java +++ b/inject-maven-plugin/src/main/java/io/avaje/inject/mojo/AutoProvidesMojo.java @@ -12,11 +12,11 @@ import java.net.URLClassLoader; import java.util.ArrayList; import java.util.Arrays; -import java.util.HashSet; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.ServiceLoader; import java.util.ServiceLoader.Provider; -import java.util.Set; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.resolver.filter.ScopeArtifactFilter; @@ -53,8 +53,6 @@ public class AutoProvidesMojo extends AbstractMojo { @Parameter(defaultValue = "${project}", readonly = true, required = true) private MavenProject project; - private final List modules = new ArrayList<>(); - @Override public void execute() throws MojoExecutionException { final var listUrl = compileDependencies(); @@ -65,7 +63,7 @@ public void execute() throws MojoExecutionException { } try (var newClassLoader = createClassLoader(listUrl); - var pluginWriter = createFileWriter("avaje-plugin-provides.txt"); + var pluginWriter = createFileWriter("avaje-plugins.csv"); var moduleCSV = createFileWriter("avaje-module-dependencies.csv")) { writeProvidedPlugins(newClassLoader, pluginWriter); @@ -100,7 +98,6 @@ private FileWriter createFileWriter(String string) throws IOException { } private void writeProvidedPlugins(URLClassLoader newClassLoader, FileWriter pluginWriter) throws IOException { - final Set providedTypes = new HashSet<>(); final Log log = getLog(); @@ -112,19 +109,28 @@ private void writeProvidedPlugins(URLClassLoader newClassLoader, FileWriter plug .map(InjectPlugin.class::cast) .forEach(plugins::add); + final Map> pluginEntries = new HashMap<>(); for (final var plugin : plugins) { - log.info("Loaded Plugin: " + plugin.getClass().getTypeName()); + + final List provides = new ArrayList<>(); + final var typeName = plugin.getClass().getTypeName(); + log.info("Loaded Plugin: " + typeName); for (final var provide : plugin.provides()) { - providedTypes.add(provide.getTypeName()); + provides.add(provide.getTypeName()); } for (final var provide : plugin.providesAspects()) { - providedTypes.add(wrapAspect(provide.getCanonicalName())); + provides.add(wrapAspect(provide.getCanonicalName())); } + pluginEntries.put(typeName, provides); } - for (final var providedType : providedTypes) { - pluginWriter.write(providedType); + pluginWriter.write("External Plugin Type|Provides"); + for (final var providedType : pluginEntries.entrySet()) { pluginWriter.write("\n"); + pluginWriter.write(providedType.getKey()); + pluginWriter.write("|"); + var provides = providedType.getValue().stream().collect(joining(",")); + pluginWriter.write(provides.isEmpty() ? " " : provides); } } @@ -138,6 +144,8 @@ private void writeModuleCSV(ClassLoader newClassLoader, FileWriter moduleWriter) .filter(AvajeModule.class::isInstance) .map(AvajeModule.class::cast) .forEach(avajeModules::add); + + List modules = new ArrayList<>(); for (final var module : avajeModules) { final var name = module.getClass().getTypeName(); log.info("Detected External Module: " + name); From 28de8e93ab220814fefbf5235b070c0d34f71c4a Mon Sep 17 00:00:00 2001 From: Josiah Noel <32279667+SentryMan@users.noreply.github.com> Date: Wed, 13 Nov 2024 20:41:13 -0500 Subject: [PATCH 2/5] Update AvajeInjectPlugin.java --- .../inject/plugin/AvajeInjectPlugin.java | 33 ++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/inject-gradle-plugin/src/main/java/io/avaje/inject/plugin/AvajeInjectPlugin.java b/inject-gradle-plugin/src/main/java/io/avaje/inject/plugin/AvajeInjectPlugin.java index 9a433fda..07cfb5be 100644 --- a/inject-gradle-plugin/src/main/java/io/avaje/inject/plugin/AvajeInjectPlugin.java +++ b/inject-gradle-plugin/src/main/java/io/avaje/inject/plugin/AvajeInjectPlugin.java @@ -7,6 +7,8 @@ import io.avaje.inject.spi.InjectPlugin; import io.avaje.inject.spi.InjectExtension; import io.avaje.inject.spi.Module; +import io.avaje.inject.spi.Plugin; + import org.gradle.api.*; import java.io.File; @@ -47,7 +49,7 @@ private void writeProvides(Project project) { } try (var classLoader = classLoader(project); - var pluginWriter = createFileWriter(outputDir.getPath(), "avaje-plugin-provides.txt"); + var pluginWriter = createFileWriter(outputDir.getPath(), "avaje-plugins.csv"); var moduleCSV = createFileWriter(outputDir.getPath(), "avaje-module-dependencies.csv")) { writeProvidedPlugins(classLoader, pluginWriter); writeModuleCSV(classLoader, moduleCSV); @@ -61,29 +63,36 @@ private FileWriter createFileWriter(String dir, String file) throws IOException } private void writeProvidedPlugins(ClassLoader classLoader, FileWriter pluginWriter) throws IOException { - final Set providedTypes = new HashSet<>(); - - List allPlugins = new ArrayList<>(); - ServiceLoader.load(io.avaje.inject.spi.Plugin.class, classLoader).forEach(allPlugins::add); + final List plugins = new ArrayList<>(); + ServiceLoader.load(Plugin.class, classLoader).forEach(plugins::add); ServiceLoader.load(InjectExtension.class, classLoader).stream() .map(Provider::get) .filter(InjectPlugin.class::isInstance) .map(InjectPlugin.class::cast) - .forEach(allPlugins::add); + .forEach(plugins::add); + + final Map> pluginEntries = new HashMap<>(); + for (final var plugin : plugins) { - for (final var plugin : allPlugins) { - System.out.println("Loaded Plugin: " + plugin.getClass().getCanonicalName()); + final List provides = new ArrayList<>(); + final var typeName = plugin.getClass().getTypeName(); + System.out.println("Loaded Plugin: " + typeName); for (final var provide : plugin.provides()) { - providedTypes.add(provide.getTypeName()); + provides.add(provide.getTypeName()); } for (final var provide : plugin.providesAspects()) { - providedTypes.add(wrapAspect(provide.getCanonicalName())); + provides.add(wrapAspect(provide.getCanonicalName())); } + pluginEntries.put(typeName, provides); } - for (final var providedType : providedTypes) { - pluginWriter.write(providedType); + pluginWriter.write("External Plugin Type|Provides"); + for (final var providedType : pluginEntries.entrySet()) { pluginWriter.write("\n"); + pluginWriter.write(providedType.getKey()); + pluginWriter.write("|"); + var provides = providedType.getValue().stream().collect(joining(",")); + pluginWriter.write(provides.isEmpty() ? " " : provides); } } From 55285e939040fc125a557da7d5b4e2220c7f7ee0 Mon Sep 17 00:00:00 2001 From: Josiah Noel <32279667+SentryMan@users.noreply.github.com> Date: Wed, 13 Nov 2024 20:57:19 -0500 Subject: [PATCH 3/5] Update pom.xml --- inject-generator/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inject-generator/pom.xml b/inject-generator/pom.xml index c3d6f16f..4e247f26 100644 --- a/inject-generator/pom.xml +++ b/inject-generator/pom.xml @@ -13,7 +13,7 @@ avaje inject generator annotation processor generating source code for avaje-inject dependency injection - 1.34 + 1.35 From 5276c9f76b382b9157e5d197b508a782799f5df5 Mon Sep 17 00:00:00 2001 From: Josiah Noel <32279667+SentryMan@users.noreply.github.com> Date: Thu, 14 Nov 2024 15:00:38 -0500 Subject: [PATCH 4/5] Update DBeanScopeBuilder.java --- inject/src/main/java/io/avaje/inject/DBeanScopeBuilder.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/inject/src/main/java/io/avaje/inject/DBeanScopeBuilder.java b/inject/src/main/java/io/avaje/inject/DBeanScopeBuilder.java index 1b52c71a..6c3660ff 100644 --- a/inject/src/main/java/io/avaje/inject/DBeanScopeBuilder.java +++ b/inject/src/main/java/io/avaje/inject/DBeanScopeBuilder.java @@ -290,8 +290,7 @@ public BeanScope build() { "Could not find any AvajeModule instances to wire. Possible Causes: \n" + "1. No beans have been defined.\n" + "2. The avaje-inject-generator depedency was not available during compilation\n" - + "3. Perhaps using Gradle and a misconfigured IDE? Refer to https://avaje.io/inject#gradle" - + "4. Perhaps this is a fat jar and you have not configured your maven asembly/shade or gradle build task to merge META-INF/services"); + + "3. Perhaps using Gradle and a misconfigured IDE? Refer to https://avaje.io/inject#gradle"); } postConstructList.forEach(builder::addPostConstruct); From ab60b7eeedbc1bb87f60ca3570ba1402d612aa92 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Mon, 18 Nov 2024 08:57:06 +1300 Subject: [PATCH 5/5] Fix formatting and use String.join --- .../inject/generator/ExternalProvider.java | 14 +++------ .../inject/generator/InjectProcessor.java | 31 +++++++++---------- .../inject/generator/ProcessingContext.java | 5 +-- .../avaje/inject/mojo/AutoProvidesMojo.java | 14 +++------ 4 files changed, 23 insertions(+), 41 deletions(-) diff --git a/inject-generator/src/main/java/io/avaje/inject/generator/ExternalProvider.java b/inject-generator/src/main/java/io/avaje/inject/generator/ExternalProvider.java index f8e7f468..077851d2 100644 --- a/inject-generator/src/main/java/io/avaje/inject/generator/ExternalProvider.java +++ b/inject-generator/src/main/java/io/avaje/inject/generator/ExternalProvider.java @@ -2,7 +2,6 @@ import static java.util.List.of; import static java.util.Map.entry; -import static java.util.stream.Collectors.joining; import static java.util.stream.Collectors.toList; import java.io.FileWriter; @@ -167,7 +166,6 @@ static void readMetaDataProvides(Collection providedTypes) { } static void scanAllInjectPlugins(ScopeInfo defaultScope) { - Map> plugins = new HashMap<>(); final var hasPlugins = !defaultScope.pluginProvided().isEmpty(); avajePlugins.forEach((k, v) -> { @@ -196,15 +194,13 @@ static void scanAllInjectPlugins(ScopeInfo defaultScope) { private static void writePluginProvides(Map> plugins) { // write detected plugins to a text file for test compilation - try (final var pluginWriter = - new FileWriter(APContext.getBuildResource("avaje-plugins.csv").toFile())) { - + try (final var pluginWriter = new FileWriter(APContext.getBuildResource("avaje-plugins.csv").toFile())) { pluginWriter.write("External Plugin Type|Provides"); for (final var plugin : plugins.entrySet()) { pluginWriter.write("\n"); pluginWriter.write(plugin.getKey()); pluginWriter.write("|"); - var provides = plugin.getValue().stream().collect(joining(",")); + var provides = String.join(",", plugin.getValue()); pluginWriter.write(provides.isEmpty() ? " " : provides); } } catch (IOException e) { @@ -212,13 +208,11 @@ private static void writePluginProvides(Map> plugins) { } } - private static void addPluginToScope( - ScopeInfo defaultScope, TypeElement pluginType, Map> plugins) { + private static void addPluginToScope(ScopeInfo defaultScope, TypeElement pluginType, Map> plugins) { final var name = pluginType.getQualifiedName().toString(); - ProcessingContext.addExternalInjectSPI(name); var prism = PluginProvidesPrism.getInstanceOn(pluginType); - List provides=new ArrayList<>(); + List provides = new ArrayList<>(); for (final var provide : prism.value()) { defaultScope.pluginProvided(provide.toString()); provides.add(provide.toString()); diff --git a/inject-generator/src/main/java/io/avaje/inject/generator/InjectProcessor.java b/inject-generator/src/main/java/io/avaje/inject/generator/InjectProcessor.java index 0d8331c9..10afc6ef 100644 --- a/inject-generator/src/main/java/io/avaje/inject/generator/InjectProcessor.java +++ b/inject-generator/src/main/java/io/avaje/inject/generator/InjectProcessor.java @@ -10,7 +10,6 @@ import javax.lang.model.element.Element; import javax.lang.model.element.ElementKind; import javax.lang.model.element.ExecutableElement; -import javax.lang.model.element.Modifier; import javax.lang.model.element.TypeElement; import javax.lang.model.util.ElementFilter; import javax.lang.model.util.Elements; @@ -99,24 +98,22 @@ public synchronized void init(ProcessingEnvironment processingEnv) { */ void loadProvidedFiles() { pluginFileProvided.addAll(lines("avaje-plugin-provides.txt")); - lines("avaje-module-dependencies.csv").stream() - .filter(s -> s.contains("|") && !s.startsWith("External Module Type")) - .distinct() - .map(l -> l.split("\\|")) - .map(ModuleData::of) - .flatMap(Optional::stream) - .forEach( - m -> { - ExternalProvider.registerExternalMetaData(m.name()); - ExternalProvider.readMetaDataProvides(moduleFileProvided); - this.moduleData.add(m); - }); + .filter(s -> s.contains("|") && !s.startsWith("External Module Type")) + .distinct() + .map(l -> l.split("\\|")) + .map(ModuleData::of) + .flatMap(Optional::stream) + .forEach(m -> { + ExternalProvider.registerExternalMetaData(m.name()); + ExternalProvider.readMetaDataProvides(moduleFileProvided); + this.moduleData.add(m); + }); lines("avaje-plugins.csv").stream() - .filter(s -> s.contains("|") && !s.startsWith("External Plugin Type")) - .distinct() - .map(l -> l.split("\\|")[1]) - .forEach(pluginFileProvided::add); + .filter(s -> s.contains("|") && !s.startsWith("External Plugin Type")) + .distinct() + .map(l -> l.split("\\|")[1]) + .forEach(pluginFileProvided::add); } private List lines(String relativeName) { 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 eb98f9b8..23eb1b5b 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 @@ -33,8 +33,7 @@ static final class Ctx { private final List delayQueue = new ArrayList<>(); private final Set spiServices = new TreeSet<>(); private boolean strictWiring; - private final boolean mergeServices = - APContext.getOption("mergeServices").map(Boolean::valueOf).orElse(true); + private final boolean mergeServices = APContext.getOption("mergeServices").map(Boolean::valueOf).orElse(true); void registerProvidedTypes(Set moduleFileProvided) { ExternalProvider.registerModuleProvidedTypes(providedTypes); @@ -107,7 +106,6 @@ static void addInjectSPI(String type) { } static void addExternalInjectSPI(String type) { - if (CTX.get().mergeServices) { CTX.get().spiServices.add(type); } @@ -213,7 +211,6 @@ static void processingOver(boolean over) { } static void writeSPIServicesFile() { - readExistingMetaInfServices(); if (CTX.get().spiServices.isEmpty()) { // no services to register diff --git a/inject-maven-plugin/src/main/java/io/avaje/inject/mojo/AutoProvidesMojo.java b/inject-maven-plugin/src/main/java/io/avaje/inject/mojo/AutoProvidesMojo.java index 4521e9ff..cecc73f8 100644 --- a/inject-maven-plugin/src/main/java/io/avaje/inject/mojo/AutoProvidesMojo.java +++ b/inject-maven-plugin/src/main/java/io/avaje/inject/mojo/AutoProvidesMojo.java @@ -1,6 +1,5 @@ package io.avaje.inject.mojo; -import static java.util.stream.Collectors.joining; import static java.util.stream.Collectors.toList; import java.io.File; @@ -77,9 +76,7 @@ public void execute() throws MojoExecutionException { private List compileDependencies() throws MojoExecutionException { final List listUrl = new ArrayList<>(); project.setArtifactFilter(new ScopeArtifactFilter("compile")); - final var deps = project.getArtifacts(); - - for (final Artifact artifact : deps) { + for (final Artifact artifact : project.getArtifacts()) { try { listUrl.add(artifact.getFile().toURI().toURL()); } catch (final MalformedURLException e) { @@ -98,7 +95,6 @@ private FileWriter createFileWriter(String string) throws IOException { } private void writeProvidedPlugins(URLClassLoader newClassLoader, FileWriter pluginWriter) throws IOException { - final Log log = getLog(); final List plugins = new ArrayList<>(); @@ -111,7 +107,6 @@ private void writeProvidedPlugins(URLClassLoader newClassLoader, FileWriter plug final Map> pluginEntries = new HashMap<>(); for (final var plugin : plugins) { - final List provides = new ArrayList<>(); final var typeName = plugin.getClass().getTypeName(); log.info("Loaded Plugin: " + typeName); @@ -129,13 +124,12 @@ private void writeProvidedPlugins(URLClassLoader newClassLoader, FileWriter plug pluginWriter.write("\n"); pluginWriter.write(providedType.getKey()); pluginWriter.write("|"); - var provides = providedType.getValue().stream().collect(joining(",")); + var provides = String.join(",", providedType.getValue()); pluginWriter.write(provides.isEmpty() ? " " : provides); } } private void writeModuleCSV(ClassLoader newClassLoader, FileWriter moduleWriter) throws IOException { - final Log log = getLog(); final List avajeModules = new ArrayList<>(); ServiceLoader.load(Module.class, newClassLoader).forEach(avajeModules::add); @@ -183,10 +177,10 @@ private void writeModuleCSV(ClassLoader newClassLoader, FileWriter moduleWriter) moduleWriter.write("\n"); moduleWriter.write(avajeModule.name()); moduleWriter.write("|"); - var provides = avajeModule.provides().stream().collect(joining(",")); + var provides = String.join(",", avajeModule.provides()); moduleWriter.write(provides.isEmpty() ? " " : provides); moduleWriter.write("|"); - var requires = avajeModule.requires().stream().collect(joining(",")); + var requires = String.join(",", avajeModule.requires()); moduleWriter.write(requires.isEmpty() ? " " : requires); } }