Skip to content

Commit f6dd986

Browse files
committed
merge requires/provides
there is no reason to split into three separate methods
1 parent e6db3e0 commit f6dd986

File tree

7 files changed

+42
-141
lines changed

7 files changed

+42
-141
lines changed

inject-generator/src/main/java/io/avaje/inject/generator/ExternalProvider.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -85,19 +85,18 @@ static void registerModuleProvidedTypes(Set<String> providedTypes) {
8585
final var name = module.getClass().getTypeName();
8686
final var provides = new TreeSet<String>();
8787
Collections.addAll(provides, module.providesBeans());
88-
Collections.addAll(provides, module.autoProvidesBeans());
89-
for (final var provide : module.autoProvidesAspectBeans()) {
90-
final var aspectType = Util.wrapAspect(provide);
88+
for (final var provide : module.autoProvidesAspects()) {
89+
final var aspectType = Util.wrapAspect(provide.getTypeName());
9190
provides.add(aspectType);
9291
}
9392
registerExternalMetaData(name);
9493
readMetaDataProvides(provides);
9594
providedTypes.addAll(provides);
9695
final List<String> requires = new ArrayList<>();
9796
Collections.addAll(requires, module.requiresBeans());
98-
Collections.addAll(requires, module.autoRequiresBeans());
9997
Collections.addAll(requires, module.requiresPackagesFromType());
100-
Arrays.stream(module.autoRequiresAspectBeans())
98+
Arrays.stream(module.autoRequiresAspects())
99+
.map(Class::getTypeName)
101100
.map(Util::wrapAspect)
102101
.forEach(requires::add);
103102

inject-generator/src/main/java/io/avaje/inject/generator/MetaDataOrdering.java

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ final class MetaDataOrdering {
2525
private final List<DependencyLink> circularDependencies = new ArrayList<>();
2626
private final Set<String> missingDependencyTypes = new LinkedHashSet<>();
2727
private final Set<String> autoRequires = new TreeSet<>();
28-
private final Set<String> autoRequiresAspects = new TreeSet<>();
2928

3029
MetaDataOrdering(Collection<MetaData> values, ScopeInfo scopeInfo) {
3130
this.scopeInfo = scopeInfo;
@@ -224,11 +223,7 @@ private boolean dependencySatisfied(Dependency dependency, boolean includeExtern
224223

225224
private boolean isExternal(String dependencyName, boolean includeExternal, MetaData queuedMeta) {
226225
if (includeExternal && externallyProvided(dependencyName)) {
227-
if (Util.isAspectProvider(dependencyName)) {
228-
autoRequiresAspects.add(Util.extractAspectType(dependencyName));
229-
} else {
230-
autoRequires.add(dependencyName);
231-
}
226+
autoRequires.add(dependencyName);
232227
queuedMeta.markWithExternalDependency(dependencyName);
233228
return true;
234229
}
@@ -239,10 +234,6 @@ Set<String> autoRequires() {
239234
return autoRequires;
240235
}
241236

242-
Set<String> autoRequiresAspects() {
243-
return autoRequiresAspects;
244-
}
245-
246237
List<MetaData> ordered() {
247238
return orderedList;
248239
}

inject-generator/src/main/java/io/avaje/inject/generator/ScopeInfo.java

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -475,7 +475,7 @@ private void attributeClasses(boolean leadingComma, Append writer, String prefix
475475
writer.append("}");
476476
}
477477

478-
void buildProvides(Append writer) {
478+
void buildProvides(Append writer, Set<String> provides, Set<String> requires) {
479479
if (!provides.isEmpty()) {
480480
buildProvidesMethod(writer, "providesBeans", provides);
481481
}
@@ -502,34 +502,6 @@ private void buildProvidesMethod(Append writer, String fieldName, Set<String> ty
502502
writer.append(" }").eol().eol();
503503
}
504504

505-
void buildAutoProvides(Append writer, Set<String> autoProvides) {
506-
autoProvides.removeAll(provides);
507-
if (!autoProvides.isEmpty()) {
508-
buildProvidesMethod(writer, "autoProvidesBeans", autoProvides);
509-
}
510-
}
511-
512-
void buildAutoProvidesAspects(Append writer, Set<String> autoProvidesAspects) {
513-
autoProvidesAspects.removeAll(provides);
514-
if (!autoProvidesAspects.isEmpty()) {
515-
buildProvidesMethod(writer, "autoProvidesAspectBeans", autoProvidesAspects);
516-
}
517-
}
518-
519-
void buildAutoRequires(Append writer, Set<String> autoRequires) {
520-
autoRequires.removeAll(requires);
521-
if (!autoRequires.isEmpty()) {
522-
buildProvidesMethod(writer, "autoRequiresBeans", autoRequires);
523-
}
524-
}
525-
526-
void buildAutoRequiresAspects(Append writer, Set<String> autoRequires) {
527-
autoRequires.removeAll(requires);
528-
if (!autoRequires.isEmpty()) {
529-
buildProvidesMethod(writer, "autoRequiresAspectBeans", autoRequires);
530-
}
531-
}
532-
533505
void readModuleMetaData(TypeElement moduleType) {
534506
final InjectModulePrism module = InjectModulePrism.getInstanceOn(moduleType);
535507
final String name = module == null ? null : module.name();

inject-generator/src/main/java/io/avaje/inject/generator/SimpleModuleWriter.java

Lines changed: 11 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -96,9 +96,9 @@ void write() throws IOException {
9696
} else {
9797
writeRequiredModules();
9898
}
99+
writeBuildMethod();
99100
writeProvides();
100101
writeClassesMethod();
101-
writeBuildMethod();
102102
writeBuildMethods();
103103
writeEndClass();
104104
writer.close();
@@ -188,45 +188,28 @@ private void writeServicesFile(ScopeInfo.Type scopeType) {
188188
}
189189

190190
private void writeProvides() {
191-
final Set<String> autoProvidesAspects = new TreeSet<>();
192-
final Set<String> autoProvides = new TreeSet<>();
191+
final Set<String> scopeProvides = new TreeSet<>(scopeInfo.provides());
193192

194193
if (scopeType == ScopeInfo.Type.CUSTOM) {
195-
autoProvides.add(scopeInfo.scopeAnnotationFQN());
196-
autoProvides.add(shortName);
194+
scopeProvides.add(scopeInfo.scopeAnnotationFQN());
195+
scopeProvides.add(shortName);
197196
}
198-
199197
for (MetaData metaData : ordering.ordered()) {
200198
final String aspect = metaData.providesAspect();
201199
if (aspect != null && !aspect.isEmpty()) {
202-
autoProvidesAspects.add(aspect);
200+
scopeProvides.add(Util.wrapAspect(aspect));
203201
}
204202
final var forExternal = metaData.autoProvides();
205203
if (forExternal != null && !forExternal.isEmpty()) {
206-
autoProvides.addAll(forExternal);
204+
scopeProvides.addAll(forExternal);
207205
}
208206
}
209-
if (!autoProvides.isEmpty()) {
210-
scopeInfo.buildAutoProvides(writer, autoProvides);
211-
}
212-
if (!autoProvidesAspects.isEmpty()) {
213-
scopeInfo.buildAutoProvidesAspects(writer, autoProvidesAspects);
214-
}
215-
Set<String> autoRequires = ordering.autoRequires();
216-
if (!autoRequires.isEmpty()) {
217-
scopeInfo.buildAutoRequires(writer, autoRequires);
218-
}
219-
Set<String> autoRequiresAspects = ordering.autoRequiresAspects();
220-
if (!autoRequiresAspects.isEmpty()) {
221-
scopeInfo.buildAutoRequiresAspects(writer, autoRequiresAspects);
222-
}
207+
Set<String> scopeRequires = new TreeSet<>(scopeInfo.requires());
208+
scopeRequires.addAll(ordering.autoRequires());
209+
scopeInfo.buildProvides(writer, scopeProvides, scopeRequires);
223210

224-
var requires = new ArrayList<>(scopeInfo.requires());
225-
var provides = new ArrayList<>(scopeInfo.provides());
226-
requires.addAll(autoRequires);
227-
autoRequiresAspects.stream().map(Util::wrapAspect).forEach(requires::add);
228-
provides.addAll(autoProvides);
229-
autoProvidesAspects.stream().map(Util::wrapAspect).forEach(provides::add);
211+
var requires = new ArrayList<>(scopeRequires);
212+
var provides = new ArrayList<>(scopeProvides);
230213

231214
ProcessingContext.addModule(new ModuleData(fullName, provides, requires));
232215
}
@@ -320,7 +303,6 @@ private void writeStartClass() {
320303
if (scopeInfo.addModuleConstructor()) {
321304
writeConstructor();
322305
}
323-
scopeInfo.buildProvides(writer);
324306
}
325307

326308
private void writeWithBeans() {

inject-maven-plugin/src/main/java/io/avaje/inject/mojo/AutoProvidesMojo.java

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -147,21 +147,15 @@ private void writeModuleCSV(ClassLoader newClassLoader, FileWriter moduleWriter)
147147
provides.add(type);
148148
}
149149

150-
for (final var provide : module.autoProvidesBeans()) {
151-
var type = provide;
152-
provides.add(type);
153-
}
154-
155-
for (final var provide : module.autoProvidesAspectBeans()) {
156-
var type = wrapAspect(provide);
150+
for (final var provide : module.autoProvidesAspects()) {
151+
var type = wrapAspect(provide.getTypeName());
157152
provides.add(type);
158153
}
159154

160155
final var requires = Arrays.stream(module.requiresBeans()).collect(toList());
161-
162-
Collections.addAll(requires, module.autoRequiresBeans());
163156
Collections.addAll(requires, module.requiresPackagesFromType());
164-
Arrays.stream(module.autoRequiresAspectBeans())
157+
Arrays.stream(module.autoRequiresAspects())
158+
.map(Class::getTypeName)
165159
.map(AutoProvidesMojo::wrapAspect)
166160
.forEach(requires::add);
167161
modules.add(new ModuleData(name.getTypeName(), provides, requires));

inject/src/main/java/io/avaje/inject/DBeanScopeBuilder.java

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -327,8 +327,7 @@ public void add(AvajeModule module) {
327327
.add(factoryState);
328328

329329
addFactoryProvides(factoryState, module.providesBeans());
330-
addFactoryProvides(factoryState, module.autoProvidesBeans());
331-
addFactoryProvides(factoryState, module.autoProvidesAspectBeans());
330+
addAspectProvides(factoryState, module.autoProvidesAspects());
332331

333332
if (factoryState.isRequiresEmpty()) {
334333
if (factoryState.explicitlyProvides()) {
@@ -344,6 +343,16 @@ public void add(AvajeModule module) {
344343
}
345344
}
346345

346+
private void addAspectProvides(FactoryState factoryState, Class<?>[] aspects) {
347+
for (final var feature : aspects) {
348+
providesMap
349+
.computeIfAbsent(
350+
"io.avaje.inject.aop.AspectProvider<" + feature.getTypeName() + ">",
351+
s -> new FactoryList())
352+
.add(factoryState);
353+
}
354+
}
355+
347356
private void addFactoryProvides(FactoryState factoryState, String[] provides) {
348357
for (final var feature : provides) {
349358
providesMap.computeIfAbsent(feature, s -> new FactoryList()).add(factoryState);
@@ -392,7 +401,6 @@ private void processQueue() {
392401
sb.append("Module [").append(factory).append("] has unsatisfied");
393402
unsatisfiedRequires(sb, factory.requires(), "requires");
394403
unsatisfiedRequires(sb, factory.requiresPackages(), "requiresPackages");
395-
unsatisfiedRequires(sb, factory.autoRequires(), "autoRequires");
396404
}
397405
sb.append(" - none of the loaded modules ").append(moduleNames).append(" have this in their @InjectModule( provides = ... ). ");
398406
if (parent != null) {
@@ -442,9 +450,7 @@ private int processQueuedFactories() {
442450
/** Return true if the (module) requires dependencies are satisfied for this factory. */
443451
private boolean satisfiedDependencies(FactoryState factory) {
444452
return satisfiedDependencies(factory.requires())
445-
&& satisfiedDependencies(factory.requiresPackages())
446-
&& satisfiedDependencies(factory.autoRequiresAspects())
447-
&& satisfiedDependencies(factory.autoRequires());
453+
&& satisfiedDependencies(factory.requiresPackages());
448454
}
449455

450456
private boolean satisfiedDependencies(String[] requires) {
@@ -493,24 +499,13 @@ String[] requiresPackages() {
493499
return factory.requiresPackagesFromType();
494500
}
495501

496-
String[] autoRequires() {
497-
return factory.autoRequiresBeans();
498-
}
499-
500-
String[] autoRequiresAspects() {
501-
return factory.autoRequiresAspectBeans();
502-
}
503-
504502
@Override
505503
public String toString() {
506504
return factory.getClass().getTypeName();
507505
}
508506

509507
boolean isRequiresEmpty() {
510-
return isEmpty(factory.requiresBeans())
511-
&& isEmpty(factory.requiresPackagesFromType())
512-
&& isEmpty(factory.autoRequiresBeans())
513-
&& isEmpty(factory.autoRequiresAspectBeans());
508+
return isEmpty(factory.requiresBeans()) && isEmpty(factory.requiresPackagesFromType());
514509
}
515510

516511
boolean explicitlyProvides() {

inject/src/main/java/io/avaje/inject/spi/AvajeModule.java

Lines changed: 8 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.lang.reflect.Type;
44
import java.util.Arrays;
55
import java.util.Objects;
6+
import java.util.stream.Stream;
67

78
/** A Module containing dependencies that will be included in BeanScope. */
89
public interface AvajeModule extends InjectExtension {
@@ -37,7 +38,9 @@ default Type[] provides() {
3738

3839
/** Return the type names of types this module explicitly provides to other modules. */
3940
default String[] providesBeans() {
40-
return Arrays.stream(Objects.requireNonNullElse(provides(), EMPTY_CLASSES))
41+
return Stream.concat(
42+
Arrays.stream(Objects.requireNonNullElse(provides(), EMPTY_CLASSES)),
43+
Arrays.stream(Objects.requireNonNullElse(autoProvides(), EMPTY_CLASSES)))
4144
.map(Type::getTypeName)
4245
.toArray(String[]::new);
4346
}
@@ -57,7 +60,9 @@ default Type[] requires() {
5760
* modules.
5861
*/
5962
default String[] requiresBeans() {
60-
return Arrays.stream(Objects.requireNonNullElse(requires(), EMPTY_CLASSES))
63+
return Stream.concat(
64+
Arrays.stream(Objects.requireNonNullElse(requires(), EMPTY_CLASSES)),
65+
Arrays.stream(Objects.requireNonNullElse(autoRequires(), EMPTY_CLASSES)))
6166
.map(Type::getTypeName)
6267
.toArray(String[]::new);
6368
}
@@ -85,23 +90,13 @@ default String[] requiresPackagesFromType() {
8590
* <p>This is a convenience when using multiple modules that is otherwise controlled manually by
8691
* explicitly using {@link AvajeModule#provides()}.
8792
*
88-
* @deprecated use {@link #autoProvidesBeans()}
93+
* @deprecated use {@link #providesBeans()}
8994
*/
9095
@Deprecated(forRemoval = true)
9196
default Type[] autoProvides() {
9297
return EMPTY_CLASSES;
9398
}
9499

95-
/**
96-
* Return the type names of classes that this module provides that we allow other modules to auto
97-
* depend on.
98-
*/
99-
default String[] autoProvidesBeans() {
100-
return Arrays.stream(Objects.requireNonNullElse(autoProvides(), EMPTY_CLASSES))
101-
.map(Type::getTypeName)
102-
.toArray(String[]::new);
103-
}
104-
105100
/**
106101
* Return the aspects that this module provides.
107102
*
@@ -113,13 +108,6 @@ default Class<?>[] autoProvidesAspects() {
113108
return EMPTY_CLASSES;
114109
}
115110

116-
/** Return the type names of aspects that this module provides. */
117-
default String[] autoProvidesAspectBeans() {
118-
return Arrays.stream(Objects.requireNonNullElse(autoProvidesAspects(), EMPTY_CLASSES))
119-
.map(Class::getTypeName)
120-
.toArray(String[]::new);
121-
}
122-
123111
/**
124112
* These are the classes that this module requires for wiring that are provided by other external
125113
* modules (that are in the classpath at compile time).
@@ -132,16 +120,6 @@ default Type[] autoRequires() {
132120
return EMPTY_CLASSES;
133121
}
134122

135-
/**
136-
* Return the type names of classes that this module requires for wiring that are provided by
137-
* other external modules.
138-
*/
139-
default String[] autoRequiresBeans() {
140-
return Arrays.stream(Objects.requireNonNullElse(autoRequires(), EMPTY_CLASSES))
141-
.map(Type::getTypeName)
142-
.toArray(String[]::new);
143-
}
144-
145123
/**
146124
* These are the aspects that this module requires whose implementations are provided by other
147125
* external modules (that are in the classpath at compile time).
@@ -151,16 +129,6 @@ default Class<?>[] autoRequiresAspects() {
151129
return EMPTY_CLASSES;
152130
}
153131

154-
/**
155-
* Return the type names of aspects that this module requires whose implementations are provided
156-
* by other external modules.
157-
*/
158-
default String[] autoRequiresAspectBeans() {
159-
return Arrays.stream(Objects.requireNonNullElse(autoRequiresAspects(), EMPTY_CLASSES))
160-
.map(Class::getTypeName)
161-
.toArray(String[]::new);
162-
}
163-
164132
/** Marker for custom scoped modules. */
165133
interface Custom extends AvajeModule {}
166134
}

0 commit comments

Comments
 (0)