Skip to content

Commit 625c75f

Browse files
committed
#164 - Detect when duplicate modules occurs and throw a nice error in this case
1 parent d58121f commit 625c75f

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class ProcessingContext {
2828
private final Filer filer;
2929
private final Elements elementUtils;
3030
private final Types typeUtils;
31+
private final Set<String> uniqueModuleNames = new HashSet<>();
3132

3233
ProcessingContext(ProcessingEnvironment processingEnv) {
3334
this.processingEnv = processingEnv;
@@ -134,4 +135,14 @@ Element asElement(TypeMirror returnType) {
134135
PackageElement getPackageOf(Element element) {
135136
return elementUtils.getPackageOf(element);
136137
}
138+
139+
void addModule(String moduleFullName) {
140+
if (moduleFullName != null) {
141+
uniqueModuleNames.add(moduleFullName);
142+
}
143+
}
144+
145+
boolean isDuplicateModule(String moduleFullName) {
146+
return uniqueModuleNames.contains(moduleFullName);
147+
}
137148
}

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

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@
44
import io.avaje.inject.spi.DependencyMeta;
55

66
import javax.annotation.processing.FilerException;
7-
import javax.lang.model.element.*;
7+
import javax.lang.model.element.Element;
8+
import javax.lang.model.element.ElementKind;
9+
import javax.lang.model.element.Name;
10+
import javax.lang.model.element.TypeElement;
811
import javax.tools.JavaFileObject;
912
import java.io.IOException;
1013
import java.util.*;
@@ -183,8 +186,17 @@ private void initialiseModule() {
183186
if (!moduleInitialised) {
184187
try {
185188
initialiseName(MetaTopPackage.of(metaData.values()));
189+
context.addModule(moduleFullName);
186190
moduleInitialised = true;
187191
} catch (IOException e) {
192+
if (context.isDuplicateModule(moduleFullName)) {
193+
String msg = "Attempting to create 2 modules both called " + moduleFullName
194+
+ ". This can occur when a custom scope (named from it's annotation) has a name clash with" +
195+
" the default module which can be named from the package. Look to resolve this by either " +
196+
"changing the name of the custom scope annotation, or explicitly naming the default scope " +
197+
"using @InjectModule(name), or changing the top level package used by the default scope";
198+
throw new IllegalStateException(msg);
199+
}
188200
context.logError("Failed to create module filer " + e.getMessage());
189201
}
190202
}

0 commit comments

Comments
 (0)