Skip to content

Commit 943ebe7

Browse files
authored
Remove Auto Provides from @DependencyMeta (#872)
* dependencyMeta * remove auto provides from `@DependencyMeta`
1 parent fd75fcc commit 943ebe7

File tree

13 files changed

+60
-176
lines changed

13 files changed

+60
-176
lines changed

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

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -243,14 +243,6 @@ List<String> provides() {
243243
return Util.addQualifierSuffix(typeReader.provides(), name);
244244
}
245245

246-
List<String> autoProvides() {
247-
return Util.addQualifierSuffix(typeReader.autoProvides(), name);
248-
}
249-
250-
String providesAspect() {
251-
return typeReader.providesAspect();
252-
}
253-
254246
Set<UType> allGenericTypes() {
255247
if (allUTypes != null) {
256248
return allUTypes;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ final class Dependency {
2020
this.softDependency = false;
2121
nameStr = type;
2222
}
23-
this.name = nameStr.replace(", ", ",");
23+
this.name = nameStr;
2424
}
2525

2626
Dependency(String type, String qualifier) {

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -119,11 +119,15 @@ static void registerPluginProvidedTypes(ScopeInfo defaultScope) {
119119
defaultScope.pluginProvided(provide.getTypeName());
120120
}
121121
for (final var provide : plugin.providesAspects()) {
122-
defaultScope.pluginProvided(Util.wrapAspect(provide.getTypeName()));
122+
defaultScope.pluginProvided(wrapAspect(provide.getTypeName()));
123123
}
124124
}
125125
}
126126

127+
private static String wrapAspect(String aspect) {
128+
return Constants.ASPECT_PROVIDER + "<" + aspect + ">";
129+
}
130+
127131
private static boolean pluginExists(String relativeName) {
128132
try {
129133
return APContext.getBuildResource(relativeName).toFile().exists();
@@ -150,7 +154,6 @@ static void readMetaDataProvides(Collection<String> providedTypes) {
150154
providedTypes.add(meta.key());
151155
providedTypes.add(meta.type());
152156
providedTypes.addAll(Util.addQualifierSuffix(meta.provides(), meta.name()));
153-
providedTypes.addAll(Util.addQualifierSuffix(meta.autoProvides(), meta.name()));
154157
});
155158
}
156159

@@ -211,7 +214,7 @@ private static void addPluginToScope(ScopeInfo defaultScope, TypeElement pluginT
211214
provides.add(provide);
212215
}
213216
for (final var provide : prism.providesAspects()) {
214-
final var wrapAspect = Util.wrapAspect(provide.toString());
217+
final var wrapAspect = wrapAspect(provide.toString());
215218
defaultScope.pluginProvided(wrapAspect);
216219
provides.add(wrapAspect);
217220
}
@@ -266,7 +269,6 @@ private static void addOtherModuleProvides(Collection<String> providedTypes, Typ
266269
.map(MetaData::new)
267270
.forEach(m -> {
268271
externalMeta.add(m);
269-
provides.addAll(m.autoProvides());
270272
provides.addAll(m.provides());
271273
m.dependsOn().stream()
272274
.filter(d -> !d.isSoftDependency())
@@ -276,7 +278,6 @@ private static void addOtherModuleProvides(Collection<String> providedTypes, Typ
276278
providedTypes.add(m.key());
277279
providedTypes.add(m.type());
278280
providedTypes.addAll(Util.addQualifierSuffix(m.provides(), m.name()));
279-
providedTypes.addAll(Util.addQualifierSuffix(m.autoProvides(), m.name()));
280281
});
281282

282283
final var name = otherModule.getQualifiedName().toString();

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

Lines changed: 2 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ final class MetaData implements Comparable<MetaData> {
3333
private final String method;
3434
private final String key;
3535
private boolean wired;
36-
private String providesAspect;
3736

3837
/**
3938
* The interfaces and class annotations the bean has (to register into lists).
@@ -45,11 +44,6 @@ final class MetaData implements Comparable<MetaData> {
4544
*/
4645
private List<Dependency> dependsOn;
4746

48-
/**
49-
* Type deemed to be candidate for providing to another external module.
50-
*/
51-
private List<String> autoProvides;
52-
5347
private boolean generateProxy;
5448
private boolean usesExternalDependency;
5549
private final Set<String> externalDependencies = new HashSet<>();
@@ -60,10 +54,8 @@ final class MetaData implements Comparable<MetaData> {
6054
this.name = trimName(meta.name());
6155
this.shortType = Util.shortName(type);
6256
this.method = meta.method();
63-
this.providesAspect = meta.providesAspect();
6457
this.dependsOn = meta.dependsOn().stream().map(Dependency::new).collect(Collectors.toList());
6558
this.provides = Util.addQualifierSuffix(meta.provides(), name);
66-
this.autoProvides = Util.addQualifierSuffix(meta.autoProvides(), name);
6759
this.importedComponent = meta.importedComponent();
6860
this.key = createKey();
6961
this.buildName = createBuildName();
@@ -163,8 +155,6 @@ void setWired() {
163155
void update(BeanReader beanReader) {
164156
this.provides = beanReader.provides();
165157
this.dependsOn = beanReader.dependsOn();
166-
this.providesAspect = beanReader.providesAspect();
167-
this.autoProvides = beanReader.autoProvides();
168158
this.generateProxy = beanReader.isGenerateProxy();
169159
this.importedComponent = beanReader.importedComponent();
170160
}
@@ -185,14 +175,6 @@ List<Dependency> dependsOn() {
185175
return dependsOn;
186176
}
187177

188-
List<String> autoProvides() {
189-
return autoProvides;
190-
}
191-
192-
String providesAspect() {
193-
return providesAspect;
194-
}
195-
196178
/**
197179
* Return the top level package for the bean and the interfaces it implements.
198180
*/
@@ -232,18 +214,11 @@ void buildMethod(Append append, boolean fullyQualify) {
232214

233215
final var hasName = name != null;
234216
final var hasMethod = hasMethod();
235-
final var hasProvidesAspect = !providesAspect.isEmpty();
236217
final var hasDependsOn = !dependsOn.isEmpty();
237218
final var hasProvides = !provides.isEmpty();
238-
final var hasAutoProvides = autoProvides != null && !autoProvides.isEmpty();
239219

240220
append.append(" @DependencyMeta(");
241-
if (hasName
242-
|| hasMethod
243-
|| hasProvidesAspect
244-
|| hasDependsOn
245-
|| hasProvides
246-
|| hasAutoProvides) {
221+
if (hasName || hasMethod || hasDependsOn || hasProvides) {
247222
append.eol().append(INDENT);
248223
}
249224

@@ -257,17 +232,12 @@ void buildMethod(Append append, boolean fullyQualify) {
257232
if (hasMethod) {
258233
append.append(",").eol().append(" method = \"").append(method).append("\"");
259234
}
260-
if (hasProvidesAspect) {
261-
append.append(",").eol().append(" providesAspect = \"").append(providesAspect).append("\"");
262-
} else if (hasProvides) {
235+
if (hasProvides) {
263236
appendProvides(append, "provides", provides);
264237
}
265238
if (hasDependsOn) {
266239
appendProvides(append, "dependsOn", dependsOn.stream().map(Dependency::dependsOn).collect(Collectors.toList()));
267240
}
268-
if (hasAutoProvides) {
269-
appendProvides(append, "autoProvides", autoProvides);
270-
}
271241
append.append(")").append(NEWLINE);
272242
append.append(" private void build_").append(buildName()).append("(Builder builder) {").append(NEWLINE);
273243
if (hasMethod()) {
@@ -321,14 +291,6 @@ void setDependsOn(List<String> dependsOn) {
321291
this.dependsOn = dependsOn.stream().map(Dependency::new).collect(Collectors.toList());
322292
}
323293

324-
void setAutoProvides(List<String> autoProvides) {
325-
this.autoProvides = autoProvides;
326-
}
327-
328-
void setProvidesAspect(String providesAspect) {
329-
this.providesAspect = providesAspect;
330-
}
331-
332294
/**
333295
* This depends on a dependency that comes from another module in the classpath.
334296
*/

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

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,6 @@ final class MetaDataOrdering {
4141
for (String provide : metaData.provides()) {
4242
providerAdd(provide).add(metaData);
4343
}
44-
final String aspect = metaData.providesAspect();
45-
if (aspect != null && !aspect.isEmpty()) {
46-
providerAdd(Util.wrapAspect(aspect)).add(metaData);
47-
}
4844
}
4945
externallyRequiredDependencies();
5046
}
@@ -69,12 +65,18 @@ int processQueue() {
6965
int count;
7066
do {
7167
// first run without external dependencies from other modules
72-
count = processQueueRound(false);
68+
count = processQueueRound(false, false);
7369
} while (count > 0);
74-
do {
70+
71+
while (count > 0) {
7572
// run again including externally provided dependencies from other modules
76-
count = processQueueRound(true);
77-
} while (count > 0);
73+
count = processQueueRound(true, false);
74+
}
75+
76+
while (count > 0) {
77+
// Last ditch effort, match any bean available
78+
count = processQueueRound(true, true);
79+
}
7880

7981
int remaining = queue.size();
8082
if (remaining != 0) {
@@ -145,7 +147,7 @@ void missingDependencies() {
145147

146148
private void checkMissingDependencies(MetaData metaData) {
147149
for (Dependency dependency : metaData.dependsOn()) {
148-
if (!dependencySatisfied(dependency, true, metaData)) {
150+
if (!dependencySatisfied(dependency, true, metaData, true)) {
149151
TypeElement element = elementMaybe(metaData.type());
150152
logError(element, "No dependency provided for %s on %s", dependency, metaData.type());
151153
missingDependencyTypes.add(dependency.name());
@@ -178,13 +180,13 @@ void logWarnings() {
178180
}
179181
}
180182

181-
private int processQueueRound(boolean includeExternal) {
183+
private int processQueueRound(boolean includeExternal, boolean anyWired) {
182184
// loop queue looking for entry that has all provides marked as included
183185
int count = 0;
184186
Iterator<MetaData> iterator = queue.iterator();
185187
while (iterator.hasNext()) {
186188
MetaData queuedMeta = iterator.next();
187-
if (allDependenciesWired(queuedMeta, includeExternal)) {
189+
if (allDependenciesWired(queuedMeta, includeExternal, anyWired)) {
188190
orderedList.add(queuedMeta);
189191
queuedMeta.setWired();
190192
iterator.remove();
@@ -194,20 +196,20 @@ private int processQueueRound(boolean includeExternal) {
194196
return count;
195197
}
196198

197-
private boolean allDependenciesWired(MetaData queuedMeta, boolean includeExternal) {
199+
private boolean allDependenciesWired(MetaData queuedMeta, boolean includeExternal, boolean anyWired) {
198200
for (Dependency dependency : queuedMeta.dependsOn()) {
199201
String dependencyName = dependency.name();
200202
if (Util.isProvider(dependencyName) || Constants.BEANSCOPE.equals(dependencyName)) {
201203
continue;
202204
}
203-
if (!dependencySatisfied(dependency, includeExternal, queuedMeta)) {
205+
if (!dependencySatisfied(dependency, includeExternal, queuedMeta, anyWired)) {
204206
return false;
205207
}
206208
}
207209
return true;
208210
}
209211

210-
private boolean dependencySatisfied(Dependency dependency, boolean includeExternal, MetaData queuedMeta) {
212+
private boolean dependencySatisfied(Dependency dependency, boolean includeExternal, MetaData queuedMeta, boolean anyWired) {
211213
String dependencyName = dependency.name();
212214
var providerList = providers.get(dependencyName);
213215
if (providerList == null) {
@@ -217,7 +219,7 @@ private boolean dependencySatisfied(Dependency dependency, boolean includeExtern
217219
return isExternal(dependencyName, includeExternal, queuedMeta);
218220
}
219221
} else {
220-
return providerList.isAllWired();
222+
return providerList.isWired(anyWired);
221223
}
222224
}
223225

@@ -258,18 +260,31 @@ private static class ProviderList {
258260

259261
private final List<MetaData> list = new ArrayList<>();
260262

261-
void add(MetaData beanMeta) {
263+
private void add(MetaData beanMeta) {
262264
list.add(beanMeta);
263265
}
264266

265-
boolean isAllWired() {
267+
private boolean isWired(boolean anyWired) {
268+
return anyWired ? isAnyWired() : isAllWired();
269+
}
270+
271+
private boolean isAllWired() {
266272
for (MetaData metaData : list) {
267273
if (!metaData.isWired()) {
268274
return false;
269275
}
270276
}
271277
return true;
272278
}
279+
280+
private boolean isAnyWired() {
281+
for (MetaData metaData : list) {
282+
if (metaData.isWired()) {
283+
return true;
284+
}
285+
}
286+
return list.isEmpty();
287+
}
273288
}
274289

275290
private static class DependencyLink {

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

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -218,11 +218,6 @@ MetaData createMeta() {
218218
typeReader == null
219219
? Collections.emptyList()
220220
: Util.addQualifierSuffix(typeReader.provides(), name));
221-
metaData.setAutoProvides(
222-
typeReader == null
223-
? List.of()
224-
: Util.addQualifierSuffix(typeReader.autoProvides(), name));
225-
metaData.setProvidesAspect(typeReader == null ? "" : typeReader.providesAspect());
226221
return metaData;
227222
}
228223

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

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -559,36 +559,22 @@ boolean providesDependencyLocally(String dependency) {
559559
if (requires.contains(dependency) || pluginProvided.contains(dependency)) {
560560
return true;
561561
}
562-
final String aspectDependency = aspectDependency(dependency);
563562
for (MetaData meta : metaData.values()) {
564563
if (dependency.equals(meta.type())) {
565564
return true;
566565
}
567-
if (aspectDependency != null) {
568-
if (aspectDependency.equals(meta.providesAspect())) {
569-
return true;
570-
}
571-
} else {
572-
final List<String> provides = meta.provides();
573-
if (provides != null && !provides.isEmpty()) {
574-
for (String provide : provides) {
575-
if (dependency.equals(provide)) {
576-
return true;
577-
}
566+
final List<String> provides = meta.provides();
567+
if (provides != null && !provides.isEmpty()) {
568+
for (String provide : provides) {
569+
if (dependency.equals(provide)) {
570+
return true;
578571
}
579572
}
580573
}
581574
}
582575
return false;
583576
}
584577

585-
private String aspectDependency(String dependency) {
586-
if (Util.isAspectProvider(dependency)) {
587-
return Util.extractAspectType(dependency);
588-
}
589-
return null;
590-
}
591-
592578
boolean providedByPackage(String dependency) {
593579
for (String pkg : requirePkg) {
594580
if (dependency.startsWith(pkg)) {

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

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -194,16 +194,6 @@ private void writeProvides() {
194194
scopeProvides.add(scopeInfo.scopeAnnotationFQN());
195195
scopeProvides.add(shortName);
196196
}
197-
for (MetaData metaData : ordering.ordered()) {
198-
final String aspect = metaData.providesAspect();
199-
if (aspect != null && !aspect.isEmpty()) {
200-
scopeProvides.add(Util.wrapAspect(aspect));
201-
}
202-
final var forExternal = metaData.autoProvides();
203-
if (forExternal != null && !forExternal.isEmpty()) {
204-
scopeProvides.addAll(forExternal);
205-
}
206-
}
207197
Set<String> scopeRequires = new TreeSet<>(scopeInfo.requires());
208198
scopeRequires.addAll(ordering.autoRequires());
209199
scopeInfo.buildProvides(writer, scopeProvides, scopeRequires);

0 commit comments

Comments
 (0)