Skip to content

Commit aa5b6f5

Browse files
committed
#262 - De-duplication for autoProvides and autoRequires
Any dependencies on the explicit provides are removed from autoProvides and similarly with requires and autoRequires Also change the style of generation for these provides/requires methods so that the field is always used and follows the method - slightly funky but keeps the fields and methods together.
1 parent d836a10 commit aa5b6f5

File tree

2 files changed

+35
-55
lines changed

2 files changed

+35
-55
lines changed

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

Lines changed: 28 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -379,57 +379,47 @@ private void attributeClasses(boolean leadingComma, Append writer, String prefix
379379
writer.append("}");
380380
}
381381

382-
private void buildClassArray(Append writer, Set<String> values) {
383-
writer.append("new Class<?>[]");
384-
writer.append("{");
385-
if (!values.isEmpty()) {
386-
int c = 0;
387-
for (String value : values) {
388-
if (c++ > 0) {
389-
writer.append(",");
390-
}
391-
writer.append(value).append(".class");
392-
}
393-
}
394-
writer.append("}");
395-
}
396-
397-
void buildFields(Append writer) {
382+
void buildProvides(Append writer) {
398383
if (!provides.isEmpty()) {
399-
writer.append(" private final Class<?>[] provides = ");
400-
buildClassArray(writer, provides);
401-
writer.append(";").eol();
384+
buildProvidesMethod(writer, "provides", provides);
402385
}
403386
if (!requires.isEmpty()) {
404-
writer.append(" private final Class<?>[] requires = ");
405-
buildClassArray(writer, requires);
406-
writer.append(";").eol();
387+
buildProvidesMethod(writer, "requires", requires);
407388
}
408389
if (!requiresPackages.isEmpty()) {
409-
writer.append(" private final Class<?>[] requiresPackages = ");
410-
buildClassArray(writer, requiresPackages);
411-
writer.append(";").eol();
390+
buildProvidesMethod(writer, "requiresPackages", requiresPackages);
412391
}
413-
writer.append(" private Builder builder;").eol().eol();
414392
}
415393

416-
void buildProvides(Append writer) {
417-
if (!provides.isEmpty()) {
418-
buildProvidesMethod(writer, "provides");
394+
private void buildProvidesMethod(Append writer, String fieldName, Set<String> types) {
395+
writer.append(" @Override").eol();
396+
writer.append(" public Class<?>[] %s() { return %s; }", fieldName, fieldName).eol();
397+
writer.append(" private final Class<?>[] %s = new Class<?>[]{", fieldName).eol();
398+
for (String rawType : types) {
399+
writer.append(" %s.class,", rawType).eol();
419400
}
420-
if (!requires.isEmpty()) {
421-
buildProvidesMethod(writer, "requires");
401+
writer.append(" };").eol().eol();
402+
}
403+
404+
void buildAutoProvides(Append writer, Set<String> autoProvides) {
405+
autoProvides.removeAll(provides);
406+
if (!autoProvides.isEmpty()) {
407+
buildProvidesMethod(writer, "autoProvides", autoProvides);
422408
}
423-
if (!requiresPackages.isEmpty()) {
424-
buildProvidesMethod(writer, "requiresPackages");
409+
}
410+
411+
void buildAutoProvidesAspects(Append writer, Set<String> autoProvidesAspects) {
412+
autoProvidesAspects.removeAll(provides);
413+
if (!autoProvidesAspects.isEmpty()) {
414+
buildProvidesMethod(writer, "autoProvidesAspects", autoProvidesAspects);
425415
}
426416
}
427417

428-
private void buildProvidesMethod(Append writer, String fieldName) {
429-
writer.append(" @Override").eol();
430-
writer.append(" public Class<?>[] %s() {", fieldName).eol();
431-
writer.append(" return %s;", fieldName).eol();
432-
writer.append(" }").eol().eol();
418+
void buildAutoRequires(Append writer, Set<String> autoRequires) {
419+
autoRequires.removeAll(requires);
420+
if (!autoRequires.isEmpty()) {
421+
buildProvidesMethod(writer, "autoRequires", autoRequires);
422+
}
433423
}
434424

435425
void readModuleMetaData(TypeElement moduleType) {

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

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ void write(ScopeInfo.Type scopeType) throws IOException {
6565
writer = new Append(createFileWriter());
6666
writePackage();
6767
writeStartClass();
68-
writeAutoProvides();
68+
writeProvides();
6969
writeClassesMethod();
7070
writeBuildMethod();
7171
writeBuildMethods();
@@ -90,7 +90,7 @@ private void writeServicesFile(ScopeInfo.Type scopeType) {
9090
}
9191
}
9292

93-
private void writeAutoProvides() {
93+
private void writeProvides() {
9494
Set<String> autoProvidesAspects = new TreeSet<>();
9595
Set<String> autoProvides = new TreeSet<>();
9696

@@ -105,33 +105,23 @@ private void writeAutoProvides() {
105105
}
106106
}
107107
if (!autoProvides.isEmpty()) {
108-
writer.append(" @Override").eol();
109-
writer.append(" public Class<?>[] autoProvides() {").eol();
110-
writeReturnClassArray(autoProvides);
108+
scopeInfo.buildAutoProvides(writer, autoProvides);
111109
}
112110
if (!autoProvidesAspects.isEmpty()) {
113-
writer.append(" @Override").eol();
114-
writer.append(" public Class<?>[] autoProvidesAspects() {").eol();
115-
writeReturnClassArray(autoProvidesAspects);
111+
scopeInfo.buildAutoProvidesAspects(writer, autoProvidesAspects);
116112
}
117113
Set<String> autoRequires = ordering.autoRequires();
118114
if (!autoRequires.isEmpty()) {
119-
writer.append(" @Override").eol();
120-
writer.append(" public Class<?>[] autoRequires() {").eol();
121-
writeReturnClassArray(autoRequires);
115+
scopeInfo.buildAutoRequires(writer, autoRequires);
122116
}
123117
}
124118

125119
private void writeClassesMethod() {
126120
Set<String> allClasses = distinctPublicClasses();
127121
writer.append(" @Override").eol();
128122
writer.append(" public Class<?>[] classes() {").eol();
129-
writeReturnClassArray(new TreeSet<>(allClasses));
130-
}
131-
132-
private void writeReturnClassArray(Set<String> types) {
133123
writer.append(" return new Class<?>[]{").eol();
134-
for (String rawType : types) {
124+
for (String rawType : new TreeSet<>(allClasses)) {
135125
writer.append(" %s.class,", rawType).eol();
136126
}
137127
writer.append(" };").eol();
@@ -211,7 +201,7 @@ private void writeStartClass() {
211201

212202
String interfaceType = scopeInfo.type().type();
213203
writer.append("public final class %s implements %s {", shortName, interfaceType).eol().eol();
214-
scopeInfo.buildFields(writer);
204+
writer.append(" private Builder builder;").eol().eol();
215205
if (scopeInfo.addModuleConstructor()) {
216206
writeConstructor();
217207
}

0 commit comments

Comments
 (0)