diff --git a/inject-generator/src/main/java/io/avaje/inject/generator/MetaDataOrdering.java b/inject-generator/src/main/java/io/avaje/inject/generator/MetaDataOrdering.java index d58fec9d..4c6ee478 100644 --- a/inject-generator/src/main/java/io/avaje/inject/generator/MetaDataOrdering.java +++ b/inject-generator/src/main/java/io/avaje/inject/generator/MetaDataOrdering.java @@ -25,7 +25,6 @@ final class MetaDataOrdering { private final List circularDependencies = new ArrayList<>(); private final Set missingDependencyTypes = new LinkedHashSet<>(); private final Set autoRequires = new TreeSet<>(); - private final Set autoRequiresAspects = new TreeSet<>(); MetaDataOrdering(Collection values, ScopeInfo scopeInfo) { this.scopeInfo = scopeInfo; @@ -224,11 +223,7 @@ private boolean dependencySatisfied(Dependency dependency, boolean includeExtern private boolean isExternal(String dependencyName, boolean includeExternal, MetaData queuedMeta) { if (includeExternal && externallyProvided(dependencyName)) { - if (Util.isAspectProvider(dependencyName)) { - autoRequiresAspects.add(Util.extractAspectType(dependencyName)); - } else { - autoRequires.add(dependencyName); - } + autoRequires.add(dependencyName); queuedMeta.markWithExternalDependency(dependencyName); return true; } @@ -239,10 +234,6 @@ Set autoRequires() { return autoRequires; } - Set autoRequiresAspects() { - return autoRequiresAspects; - } - List ordered() { return orderedList; } diff --git a/inject-generator/src/main/java/io/avaje/inject/generator/ScopeInfo.java b/inject-generator/src/main/java/io/avaje/inject/generator/ScopeInfo.java index 9596791d..2ee91d5d 100644 --- a/inject-generator/src/main/java/io/avaje/inject/generator/ScopeInfo.java +++ b/inject-generator/src/main/java/io/avaje/inject/generator/ScopeInfo.java @@ -427,7 +427,7 @@ private void attributeClasses(boolean leadingComma, Append writer, String prefix writer.append("}"); } - void buildProvides(Append writer) { + void buildProvides(Append writer, Set provides, Set requires) { if (!provides.isEmpty()) { buildProvidesMethod(writer, "provides", provides); } @@ -460,34 +460,6 @@ private void buildProvidesMethod(Append writer, String fieldName, Set ty writer.append(" }").eol().eol(); } - void buildAutoProvides(Append writer, Set autoProvides) { - autoProvides.removeAll(provides); - if (!autoProvides.isEmpty()) { - buildProvidesMethod(writer, "autoProvides", autoProvides); - } - } - - void buildAutoProvidesAspects(Append writer, Set autoProvidesAspects) { - autoProvidesAspects.removeAll(provides); - if (!autoProvidesAspects.isEmpty()) { - buildProvidesMethod(writer, "autoProvidesAspects", autoProvidesAspects); - } - } - - void buildAutoRequires(Append writer, Set autoRequires) { - autoRequires.removeAll(requires); - if (!autoRequires.isEmpty()) { - buildProvidesMethod(writer, "autoRequires", autoRequires); - } - } - - void buildAutoRequiresAspects(Append writer, Set autoRequires) { - autoRequires.removeAll(requires); - if (!autoRequires.isEmpty()) { - buildProvidesMethod(writer, "autoRequiresAspects", autoRequires); - } - } - void readModuleMetaData(TypeElement moduleType) { final InjectModulePrism module = InjectModulePrism.getInstanceOn(moduleType); final String name = module == null ? null : module.name(); diff --git a/inject-generator/src/main/java/io/avaje/inject/generator/SimpleModuleWriter.java b/inject-generator/src/main/java/io/avaje/inject/generator/SimpleModuleWriter.java index 2fe9f5b7..568d341a 100644 --- a/inject-generator/src/main/java/io/avaje/inject/generator/SimpleModuleWriter.java +++ b/inject-generator/src/main/java/io/avaje/inject/generator/SimpleModuleWriter.java @@ -1,13 +1,23 @@ package io.avaje.inject.generator; -import static io.avaje.inject.generator.APContext.*; -import static io.avaje.inject.generator.ProcessingContext.*; +import static io.avaje.inject.generator.APContext.logError; +import static io.avaje.inject.generator.APContext.typeElement; +import static io.avaje.inject.generator.ProcessingContext.allScopes; +import static io.avaje.inject.generator.ProcessingContext.createMetaInfWriterFor; import static java.util.stream.Collectors.toList; import static java.util.stream.Collectors.toSet; import java.io.IOException; import java.io.Writer; -import java.util.*; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.TreeSet; import java.util.function.Predicate; import java.util.stream.Stream; @@ -86,9 +96,9 @@ void write() throws IOException { } else { writeRequiredModules(); } + writeBuildMethod(); writeProvides(); writeClassesMethod(); - writeBuildMethod(); writeBuildMethods(); writeEndClass(); writer.close(); @@ -178,45 +188,28 @@ private void writeServicesFile(ScopeInfo.Type scopeType) { } private void writeProvides() { - final Set autoProvidesAspects = new TreeSet<>(); - final Set autoProvides = new TreeSet<>(); + final Set scopeProvides = new TreeSet<>(scopeInfo.provides()); if (scopeType == ScopeInfo.Type.CUSTOM) { - autoProvides.add(scopeInfo.scopeAnnotationFQN()); - autoProvides.add(shortName); + scopeProvides.add(scopeInfo.scopeAnnotationFQN()); + scopeProvides.add(shortName); } - for (MetaData metaData : ordering.ordered()) { final String aspect = metaData.providesAspect(); if (aspect != null && !aspect.isEmpty()) { - autoProvidesAspects.add(aspect); + scopeProvides.add(Util.wrapAspect(aspect)); } final var forExternal = metaData.autoProvides(); if (forExternal != null && !forExternal.isEmpty()) { - autoProvides.addAll(forExternal); + scopeProvides.addAll(forExternal); } } - if (!autoProvides.isEmpty()) { - scopeInfo.buildAutoProvides(writer, autoProvides); - } - if (!autoProvidesAspects.isEmpty()) { - scopeInfo.buildAutoProvidesAspects(writer, autoProvidesAspects); - } - Set autoRequires = ordering.autoRequires(); - if (!autoRequires.isEmpty()) { - scopeInfo.buildAutoRequires(writer, autoRequires); - } - Set autoRequiresAspects = ordering.autoRequiresAspects(); - if (!autoRequiresAspects.isEmpty()) { - scopeInfo.buildAutoRequiresAspects(writer, autoRequiresAspects); - } + Set scopeRequires = new TreeSet<>(scopeInfo.requires()); + scopeRequires.addAll(ordering.autoRequires()); + scopeInfo.buildProvides(writer, scopeProvides, scopeRequires); - var requires = new ArrayList<>(scopeInfo.requires()); - var provides = new ArrayList<>(scopeInfo.provides()); - requires.addAll(autoRequires); - autoRequiresAspects.stream().map(Util::wrapAspect).forEach(requires::add); - provides.addAll(autoProvides); - autoProvidesAspects.stream().map(Util::wrapAspect).forEach(provides::add); + var requires = new ArrayList<>(scopeRequires); + var provides = new ArrayList<>(scopeProvides); ProcessingContext.addModule(new ModuleData(fullName, provides, requires)); } @@ -310,7 +303,6 @@ private void writeStartClass() { if (scopeInfo.addModuleConstructor()) { writeConstructor(); } - scopeInfo.buildProvides(writer); } private void writeWithBeans() { diff --git a/inject/src/main/java/io/avaje/inject/spi/AvajeModule.java b/inject/src/main/java/io/avaje/inject/spi/AvajeModule.java index 1cfb33e7..f4ed3083 100644 --- a/inject/src/main/java/io/avaje/inject/spi/AvajeModule.java +++ b/inject/src/main/java/io/avaje/inject/spi/AvajeModule.java @@ -39,6 +39,7 @@ default Type[] requiresPackages() { *

This is a convenience when using multiple modules that is otherwise controlled manually by * explicitly using {@link AvajeModule#provides()}. */ + @Deprecated(forRemoval = true) default Type[] autoProvides() { return EMPTY_CLASSES; } @@ -49,6 +50,7 @@ default Type[] autoProvides() { *

This is a convenience when using multiple modules that we otherwise manually specify via * {@link AvajeModule#provides()}. */ + @Deprecated(forRemoval = true) default Class[] autoProvidesAspects() { return EMPTY_CLASSES; } @@ -60,6 +62,7 @@ default Class[] autoProvidesAspects() { *

This is a convenience when using multiple modules that is otherwise controlled manually by * explicitly using {@link AvajeModule#requires()} or {@link AvajeModule#requiresPackages()}. */ + @Deprecated(forRemoval = true) default Type[] autoRequires() { return EMPTY_CLASSES; } @@ -68,6 +71,7 @@ default Type[] autoRequires() { * These are the aspects that this module requires whose implementations are provided by other * external modules (that are in the classpath at compile time). */ + @Deprecated(forRemoval = true) default Class[] autoRequiresAspects() { return EMPTY_CLASSES; }