16
16
17
17
package dagger .hilt .processor .internal .root ;
18
18
19
+ import static com .google .common .base .Preconditions .checkState ;
19
20
import static dagger .hilt .processor .internal .Processors .toClassNames ;
20
21
import static dagger .internal .codegen .extension .DaggerStreams .toImmutableSet ;
21
22
import static javax .lang .model .element .Modifier .ABSTRACT ;
40
41
import dagger .hilt .processor .internal .ComponentTree ;
41
42
import dagger .hilt .processor .internal .Processors ;
42
43
import java .io .IOException ;
44
+ import java .util .HashMap ;
45
+ import java .util .Map ;
43
46
import java .util .Optional ;
44
47
import javax .annotation .processing .ProcessingEnvironment ;
45
48
import javax .lang .model .element .Modifier ;
@@ -58,6 +61,8 @@ static void generate(RootMetadata metadata, ProcessingEnvironment env) throws IO
58
61
private final RootMetadata metadata ;
59
62
private final ProcessingEnvironment env ;
60
63
private final Root root ;
64
+ private final Map <String , Integer > simpleComponentNamesToDedupeSuffix = new HashMap <>();
65
+ private final Map <ComponentDescriptor , ClassName > componentNameMap = new HashMap <>();
61
66
62
67
private RootGenerator (RootMetadata metadata , ProcessingEnvironment env ) {
63
68
this .metadata = metadata ;
@@ -214,6 +219,34 @@ private ClassName getComponentsWrapperClassName() {
214
219
}
215
220
216
221
private ClassName getComponentClassName (ComponentDescriptor componentDescriptor ) {
217
- return ComponentNames .generatedComponent (root .classname (), componentDescriptor .component ());
222
+ if (componentNameMap .containsKey (componentDescriptor )) {
223
+ return componentNameMap .get (componentDescriptor );
224
+ }
225
+
226
+ // Disallow any component names with the same name as our SingletonComponent because we treat
227
+ // that component specially and things may break.
228
+ checkState (
229
+ componentDescriptor .component ().equals (ClassNames .SINGLETON_COMPONENT )
230
+ || !componentDescriptor .component ().simpleName ().equals (
231
+ ClassNames .SINGLETON_COMPONENT .simpleName ()),
232
+ "Cannot have a component with the same simple name as the reserved %s: %s" ,
233
+ ClassNames .SINGLETON_COMPONENT .simpleName (),
234
+ componentDescriptor .component ());
235
+
236
+ ClassName generatedComponent = ComponentNames .generatedComponent (
237
+ root .classname (), componentDescriptor .component ());
238
+
239
+ Integer suffix = simpleComponentNamesToDedupeSuffix .get (generatedComponent .simpleName ());
240
+ if (suffix != null ) {
241
+ // If an entry exists, use the suffix in the map and the replace it with the value incremented
242
+ generatedComponent = Processors .append (generatedComponent , String .valueOf (suffix ));
243
+ simpleComponentNamesToDedupeSuffix .put (generatedComponent .simpleName (), suffix + 1 );
244
+ } else {
245
+ // Otherwise, just add an entry for any possible future duplicates
246
+ simpleComponentNamesToDedupeSuffix .put (generatedComponent .simpleName (), 2 );
247
+ }
248
+
249
+ componentNameMap .put (componentDescriptor , generatedComponent );
250
+ return generatedComponent ;
218
251
}
219
252
}
0 commit comments