Skip to content

Commit 77f5859

Browse files
committed
Merge branch 'SentryMan-aspectRequires' into feature/aspect-requires
2 parents 45d16f0 + 3ab4cee commit 77f5859

File tree

6 files changed

+62
-13
lines changed

6 files changed

+62
-13
lines changed

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,12 @@ void init() {
2121
for (final Class<?> provide : module.provides()) {
2222
providedTypes.add(provide.getCanonicalName());
2323
}
24-
for (Class<?> provide : module.autoProvides()) {
24+
for (final Class<?> provide : module.autoProvides()) {
2525
providedTypes.add(provide.getCanonicalName());
2626
}
27+
for (final Class<?> provide : module.autoProvidesAspects()) {
28+
providedTypes.add(Constants.ASPECT_PROVIDER + "<" + provide.getCanonicalName() + ">");
29+
}
2730
}
2831
}
2932

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

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ final class MetaDataOrdering {
1717
private final Map<String, ProviderList> providers = new HashMap<>();
1818
private final List<DependencyLink> circularDependencies = new ArrayList<>();
1919
private final Set<String> missingDependencyTypes = new LinkedHashSet<>();
20-
private final Set<String> autoRequires = new TreeSet<>();
20+
private final Set<String> autoRequires = new TreeSet<>();
21+
private final Set<String> autoRequiresAspects = new TreeSet<>();
22+
2123

2224
MetaDataOrdering(Collection<MetaData> values, ProcessingContext context, ScopeInfo scopeInfo) {
2325
this.context = context;
@@ -190,17 +192,19 @@ private boolean allDependenciesWired(MetaData queuedMeta, boolean includeExterna
190192
if (providerList == null) {
191193
if (!scopeInfo.providedByOther(dependency)) {
192194
if (includeExternal && context.externallyProvided(dependency.name())) {
193-
autoRequires.add(dependency.name());
195+
if (Util.isAspectProvider(dependency.name())) {
196+
autoRequiresAspects.add(Util.extractAspectType(dependency.name()));
197+
} else {
198+
autoRequires.add(dependency.name());
199+
}
194200
queuedMeta.markWithExternalDependency();
195201
} else {
196202
return false;
197203
}
198204
}
199-
} else {
200-
if (!providerList.isAllWired()) {
201-
return false;
202-
}
203-
}
205+
} else if (!providerList.isAllWired()) {
206+
return false;
207+
}
204208
}
205209
}
206210
return true;
@@ -210,6 +214,10 @@ Set<String> autoRequires() {
210214
return autoRequires;
211215
}
212216

217+
Set<String> autoRequiresAspects() {
218+
return autoRequiresAspects;
219+
}
220+
213221
List<MetaData> ordered() {
214222
return orderedList;
215223
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -414,6 +414,13 @@ void buildAutoRequires(Append writer, Set<String> autoRequires) {
414414
}
415415
}
416416

417+
void buildAutoRequiresAspects(Append writer, Set<String> autoRequires) {
418+
autoRequires.removeAll(requires);
419+
if (!autoRequires.isEmpty()) {
420+
buildProvidesMethod(writer, "autoRequiresAspects", autoRequires);
421+
}
422+
}
423+
417424
void readModuleMetaData(TypeElement moduleType) {
418425
InjectModule module = moduleType.getAnnotation(InjectModule.class);
419426
details(module.name(), moduleType);

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,11 @@ private void writeProvides() {
114114
if (!autoRequires.isEmpty()) {
115115
scopeInfo.buildAutoRequires(writer, autoRequires);
116116
}
117+
118+
Set<String> autoRequiresAspects = ordering.autoRequiresAspects();
119+
if (!autoRequires.isEmpty()) {
120+
scopeInfo.buildAutoRequiresAspects(writer, autoRequiresAspects);
121+
}
117122
}
118123

119124
private void writeClassesMethod() {

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

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -338,13 +338,27 @@ private int processQueuedFactories() {
338338
*/
339339
private boolean satisfiedDependencies(FactoryState factory) {
340340
return satisfiedDependencies(factory.requires())
341-
&& satisfiedDependencies(factory.requiresPackages())
342-
&& satisfiedDependencies(factory.autoRequires());
341+
&& satisfiedDependencies(factory.requiresPackages())
342+
&& satisfiedAspectDependencies(factory.autoRequiresAspects())
343+
&& satisfiedDependencies(factory.autoRequires());
343344
}
344345

345346
private boolean satisfiedDependencies(Class<?>[] requires) {
346-
for (Class<?> dependency : requires) {
347-
if (notProvided(dependency.getTypeName())) {
347+
for (final Class<?> dependency : requires) {
348+
if (notProvided(dependency.getTypeName())) {
349+
return false;
350+
}
351+
}
352+
return true;
353+
}
354+
355+
private boolean satisfiedAspectDependencies(Class<?>[] requiresAspects) {
356+
for (final Class<?> dependency : requiresAspects) {
357+
358+
if (notProvided(
359+
"interface io.avaje.inject.aop.AspectProvider<"
360+
+ dependency.getCanonicalName()
361+
+ ">")) {
348362
return false;
349363
}
350364
}
@@ -395,6 +409,10 @@ Class<?>[] autoRequires() {
395409
return factory.autoRequires();
396410
}
397411

412+
Class<?>[] autoRequiresAspects() {
413+
return factory.autoRequiresAspects();
414+
}
415+
398416
@Override
399417
public String toString() {
400418
return factory.getClass().getTypeName();

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public interface Module {
1010
/**
1111
* Empty array of classes.
1212
*/
13-
Class<?>[] EMPTY_CLASSES = new Class<?>[]{};
13+
Class<?>[] EMPTY_CLASSES = {};
1414

1515
/**
1616
* Return the set of types this module explicitly provides to other modules.
@@ -63,6 +63,14 @@ default Class<?>[] autoProvidesAspects() {
6363
default Class<?>[] autoRequires() {
6464
return EMPTY_CLASSES;
6565
}
66+
/**
67+
* These are the apects that this module requires whose implementations are provided by other external
68+
* modules (that are in the classpath at compile time).
69+
*
70+
*/
71+
default Class<?>[] autoRequiresAspects() {
72+
return EMPTY_CLASSES;
73+
}
6674

6775
/**
6876
* Return public classes of the beans that would be registered by this module.

0 commit comments

Comments
 (0)