Skip to content

Commit 615d783

Browse files
authored
add supertypes to auto-provides (#504)
1 parent da13c75 commit 615d783

File tree

7 files changed

+23
-19
lines changed

7 files changed

+23
-19
lines changed

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ List<String> provides() {
168168
return typeReader.provides();
169169
}
170170

171-
String autoProvides() {
171+
List<String> autoProvides() {
172172
return typeReader.autoProvides();
173173
}
174174

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

+4-4
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ final class MetaData {
3333
/**
3434
* Type deemed to be candidate for providing to another external module.
3535
*/
36-
private String autoProvides;
36+
private List<String> autoProvides;
3737

3838
private boolean generateProxy;
3939
private boolean usesExternalDependency;
@@ -138,7 +138,7 @@ List<Dependency> dependsOn() {
138138
return dependsOn;
139139
}
140140

141-
String autoProvides() {
141+
List<String> autoProvides() {
142142
return autoProvides;
143143
}
144144

@@ -219,7 +219,7 @@ void buildMethod(Append append) {
219219
appendProvides(append, "dependsOn", dependsOn.stream().map(Dependency::dependsOn).collect(Collectors.toList()));
220220
}
221221
if (hasAutoProvides) {
222-
append.append(",").eol().append(" autoProvides = \"").append(autoProvides).append("\"");
222+
appendProvides(append, "autoProvides", autoProvides);
223223
}
224224
append.append(")").append(NEWLINE);
225225
append.append(" private void build_").append(buildName()).append("() {").append(NEWLINE);
@@ -269,7 +269,7 @@ void setMethod(String method) {
269269
this.method = method;
270270
}
271271

272-
void setAutoProvides(String autoProvides) {
272+
void setAutoProvides(List<String> autoProvides) {
273273
this.autoProvides = autoProvides;
274274
}
275275

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ MetaData createMeta() {
144144
}
145145
metaData.setDependsOn(dependsOn);
146146
metaData.setProvides(typeReader == null ? Collections.emptyList() : typeReader.provides());
147-
metaData.setAutoProvides(typeReader == null ? null : typeReader.autoProvides());
147+
metaData.setAutoProvides(typeReader == null ? List.of() : typeReader.autoProvides());
148148
metaData.setProvidesAspect(typeReader == null ? "" : typeReader.providesAspect());
149149
return metaData;
150150
}

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

+3-2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import java.io.IOException;
88
import java.io.Writer;
99
import java.util.LinkedHashSet;
10+
import java.util.List;
1011
import java.util.Map;
1112
import java.util.Set;
1213
import java.util.TreeSet;
@@ -103,9 +104,9 @@ private void writeProvides() {
103104
if (aspect != null && !aspect.isEmpty()) {
104105
autoProvidesAspects.add(aspect);
105106
}
106-
final String forExternal = metaData.autoProvides();
107+
final var forExternal = metaData.autoProvides();
107108
if (forExternal != null && !forExternal.isEmpty() && !forExternal.contains("<")) {
108-
autoProvides.add(forExternal);
109+
autoProvides.addAll(forExternal);
109110
}
110111
}
111112
if (!autoProvides.isEmpty()) {

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

+8-5
Original file line numberDiff line numberDiff line change
@@ -113,14 +113,17 @@ String providesAspect() {
113113
return providesAspect;
114114
}
115115

116-
UType autoProvides() {
116+
List<UType> autoProvides() {
117117
if (!autoProvide || !providesAspect.isEmpty()) {
118-
return null;
118+
return List.of();
119119
}
120-
if (baseTypeIsInterface || interfaceTypes.isEmpty()) {
121-
return Util.unwrapProvider(baseType.asType());
120+
if (baseTypeIsInterface) {
121+
return List.of(Util.unwrapProvider(baseType.asType()));
122122
}
123-
return interfaceTypes.get(0);
123+
var autoProvides = new ArrayList<>(interfaceTypes);
124+
autoProvides.addAll(extendsTypes);
125+
autoProvides.add(Util.unwrapProvider(baseType.asType()));
126+
return autoProvides;
124127
}
125128

126129
List<UType> provides() {

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

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
package io.avaje.inject.generator;
22

3-
43
import javax.lang.model.element.Element;
54
import javax.lang.model.element.TypeElement;
65
import java.util.List;
7-
import java.util.Optional;
86
import java.util.Set;
97

108
import static java.util.stream.Collectors.toList;
@@ -44,8 +42,10 @@ List<String> provides() {
4442
return extendsReader.provides().stream().map(UType::full).collect(toList());
4543
}
4644

47-
String autoProvides() {
48-
return Optional.ofNullable(extendsReader.autoProvides()).map(UType::full).orElse(null);
45+
List<String> autoProvides() {
46+
return extendsReader.autoProvides().stream()
47+
.map(UType::full)
48+
.collect(toList());
4949
}
5050

5151
String providesAspect() {

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,10 @@
4848
String[] dependsOn() default {};
4949

5050
/**
51-
* Type deemed to be reasonable to provide to external module.
51+
* Types deemed to be reasonable to provide to external module.
5252
* <p>
5353
* Used to support multiple module wiring automatically (as alternative to using explicit InjectModule annotation).
5454
*/
55-
String autoProvides() default "";
55+
String[] autoProvides() default {};
5656

5757
}

0 commit comments

Comments
 (0)