Skip to content

Commit 7d95a17

Browse files
authored
Merge pull request #795 from SentryMan/duplicateTypes
Fix duplicate short names in Module Generation
2 parents c967f28 + 2cb9772 commit 7d95a17

File tree

7 files changed

+78
-4
lines changed

7 files changed

+78
-4
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package org.example.myapp.duplicate;
2+
3+
import jakarta.inject.Singleton;
4+
5+
@Singleton
6+
public class SameType {
7+
@Singleton
8+
public static class Inner {}
9+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package org.example.myapp.duplicate.two;
2+
3+
import jakarta.inject.Singleton;
4+
5+
@Singleton
6+
public class SameType {
7+
@Singleton
8+
public static class Inner {}
9+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package org.example.myapp.duplicate;
2+
3+
import io.avaje.inject.BeanScope;
4+
import org.junit.jupiter.api.Test;
5+
6+
import static org.assertj.core.api.Assertions.assertThat;
7+
8+
9+
class SameTypeTest {
10+
11+
@Test
12+
void testDuplicateShortName() {
13+
try (BeanScope testScope = BeanScope.builder().build()) {
14+
15+
var sameType = testScope.get(SameType.class);
16+
var sameTypeInner = testScope.get(SameType.Inner.class);
17+
var sameType2 = testScope.get(org.example.myapp.duplicate.two.SameType.class);
18+
var sameType2Inner = testScope.get(org.example.myapp.duplicate.two.SameType.Inner.class);
19+
20+
assertThat(sameType).isNotNull();
21+
assertThat(sameTypeInner).isNotNull();
22+
assertThat(sameType2).isNotNull();
23+
assertThat(sameType2Inner).isNotNull();
24+
}
25+
}
26+
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ void addImportTypes(Set<String> importTypes) {
222222
}
223223
}
224224

225-
void buildMethod(Append append) {
225+
void buildMethod(Append append, boolean fullyQualify) {
226226
if (generateProxy) {
227227
return;
228228
}
@@ -273,7 +273,7 @@ void buildMethod(Append append) {
273273
if (hasMethod()) {
274274
append.append(" ").append(Util.shortMethod(method)).append("(builder");
275275
} else {
276-
append.append(" ").append(shortType).append(Constants.DI).append(".build(builder");
276+
append.append(" ").append(fullyQualify ? type : shortType).append(Constants.DI).append(".build(builder");
277277
}
278278
append.append(");").append(NEWLINE);
279279
append.append(" }").append(NEWLINE);

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

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,17 @@
33
import static io.avaje.inject.generator.APContext.logError;
44
import static io.avaje.inject.generator.APContext.typeElement;
55
import static io.avaje.inject.generator.ProcessingContext.createMetaInfWriterFor;
6+
import static java.util.stream.Collectors.toSet;
67

78
import java.io.IOException;
89
import java.io.Writer;
910
import java.util.ArrayList;
11+
import java.util.HashSet;
1012
import java.util.LinkedHashSet;
1113
import java.util.Map;
1214
import java.util.Set;
1315
import java.util.TreeSet;
16+
import java.util.stream.Stream;
1417

1518
import javax.lang.model.element.Modifier;
1619
import javax.lang.model.element.TypeElement;
@@ -52,6 +55,7 @@ final class SimpleModuleWriter {
5255
private final String fullName;
5356
private final ScopeInfo scopeInfo;
5457
private final MetaDataOrdering ordering;
58+
private final Set<String> duplicateTypes;
5559

5660
private Append writer;
5761

@@ -61,6 +65,13 @@ final class SimpleModuleWriter {
6165
this.modulePackage = scopeInfo.modulePackage();
6266
this.shortName = scopeInfo.moduleShortName();
6367
this.fullName = scopeInfo.moduleFullName();
68+
final Set<String> seen = new HashSet<>();
69+
this.duplicateTypes =
70+
ordering.ordered().stream()
71+
.map(MetaData::type)
72+
.filter(t -> !seen.add(ProcessorUtils.shortType(t)))
73+
.flatMap(t -> Stream.of(t, t + "$DI"))
74+
.collect(toSet());
6475
}
6576

6677
void write(ScopeInfo.Type scopeType) throws IOException {
@@ -183,7 +194,7 @@ private void writeBuildMethod() {
183194

184195
private void writeBuildMethods() {
185196
for (MetaData metaData : ordering.ordered()) {
186-
metaData.buildMethod(writer);
197+
metaData.buildMethod(writer, duplicateTypes.contains(metaData.type()));
187198
}
188199
}
189200

@@ -192,8 +203,9 @@ private void writePackage() {
192203
for (String type : factoryImportTypes()) {
193204
writer.append("import %s;", type).eol();
194205
}
206+
195207
for (String type : scopeInfo.initModuleDependencies(ordering.importTypes())) {
196-
if (Util.validImportType(type, modulePackage)) {
208+
if (!duplicateTypes.contains(type) && Util.validImportType(type, modulePackage)) {
197209
writer.append("import %s;", type).eol();
198210
}
199211
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package io.avaje.inject.generator.models.valid.duplicate;
2+
3+
import jakarta.inject.Singleton;
4+
5+
@Singleton
6+
public class SameType {
7+
@Singleton
8+
public static class Inner {}
9+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package io.avaje.inject.generator.models.valid.duplicate.two;
2+
3+
import jakarta.inject.Singleton;
4+
5+
@Singleton
6+
public class SameType {
7+
@Singleton
8+
public static class Inner {}
9+
}

0 commit comments

Comments
 (0)