4646import androidx .room .compiler .processing .XProcessingEnv ;
4747import com .google .common .collect .ImmutableList ;
4848import com .google .common .collect .ImmutableMap ;
49+ import com .google .common .collect .ImmutableSet ;
4950import com .google .common .collect .Lists ;
5051import com .squareup .javapoet .AnnotationSpec ;
5152import com .squareup .javapoet .ClassName ;
8081 * Inject} constructors.
8182 */
8283public final class FactoryGenerator extends SourceFileGenerator <ProvisionBinding > {
84+ private static final ImmutableSet <BindingKind > VALID_BINDING_KINDS =
85+ ImmutableSet .of (BindingKind .INJECTION , BindingKind .ASSISTED_INJECTION , BindingKind .PROVISION );
86+
8387 private final CompilerOptions compilerOptions ;
8488 private final SourceFiles sourceFiles ;
8589
@@ -105,10 +109,7 @@ public ImmutableList<TypeSpec.Builder> topLevelTypes(ProvisionBinding binding) {
105109 // We don't want to write out resolved bindings -- we want to write out the generic version.
106110 checkArgument (!binding .unresolved ().isPresent ());
107111 checkArgument (binding .bindingElement ().isPresent ());
108-
109- if (binding .kind () == BindingKind .DELEGATE ) {
110- return ImmutableList .of ();
111- }
112+ checkArgument (VALID_BINDING_KINDS .contains (binding .kind ()));
112113
113114 return ImmutableList .of (factoryBuilder (binding ));
114115 }
@@ -117,14 +118,9 @@ private TypeSpec.Builder factoryBuilder(ProvisionBinding binding) {
117118 TypeSpec .Builder factoryBuilder =
118119 classBuilder (generatedClassNameForBinding (binding ))
119120 .addModifiers (PUBLIC , FINAL )
120- .addTypeVariables (bindingTypeElementTypeVariableNames (binding ));
121-
122- if (binding .kind () == BindingKind .INJECTION
123- || binding .kind () == BindingKind .ASSISTED_INJECTION
124- || binding .kind () == BindingKind .PROVISION ) {
125- factoryBuilder .addAnnotation (scopeMetadataAnnotation (binding ));
126- factoryBuilder .addAnnotation (qualifierMetadataAnnotation (binding ));
127- }
121+ .addTypeVariables (bindingTypeElementTypeVariableNames (binding ))
122+ .addAnnotation (scopeMetadataAnnotation (binding ))
123+ .addAnnotation (qualifierMetadataAnnotation (binding ));
128124
129125 factoryTypeName (binding ).ifPresent (factoryBuilder ::addSuperinterface );
130126 addConstructorAndFields (binding , factoryBuilder );
@@ -341,20 +337,17 @@ private enum FactoryCreationStrategy {
341337
342338 static FactoryCreationStrategy of (Binding binding ) {
343339 switch (binding .kind ()) {
344- case DELEGATE :
345- throw new AssertionError ("Delegate bindings don't have a factory." );
346340 case PROVISION :
347341 return binding .dependencies ().isEmpty () && !binding .requiresModuleInstance ()
348342 ? SINGLETON_INSTANCE
349343 : CLASS_CONSTRUCTOR ;
350344 case INJECTION :
351- case MULTIBOUND_SET :
352- case MULTIBOUND_MAP :
345+ case ASSISTED_INJECTION :
353346 return binding .dependencies ().isEmpty ()
354347 ? SINGLETON_INSTANCE
355348 : CLASS_CONSTRUCTOR ;
356349 default :
357- return CLASS_CONSTRUCTOR ;
350+ throw new AssertionError ( "Unexpected binding kind: " + binding . kind ()) ;
358351 }
359352 }
360353 }
0 commit comments