1010import io .jbock .simple .Inject ;
1111import io .jbock .simple .processor .SimpleComponentProcessor ;
1212import io .jbock .simple .processor .binding .Binding ;
13+ import io .jbock .simple .processor .binding .BuilderElement ;
1314import io .jbock .simple .processor .binding .ComponentElement ;
1415import io .jbock .simple .processor .binding .DependencyRequest ;
16+ import io .jbock .simple .processor .binding .FactoryElement ;
1517import io .jbock .simple .processor .binding .Key ;
1618
1719import javax .annotation .processing .Generated ;
@@ -61,6 +63,7 @@ private ComponentImpl(
6163 TypeSpec generate () {
6264 TypeSpec .Builder spec = TypeSpec .classBuilder (component .generatedClass ())
6365 .addModifiers (modifiers )
66+ .addModifiers (FINAL )
6467 .addSuperinterface (component .element ().asType ());
6568 spec .addFields (getFields ());
6669 for (DependencyRequest r : component .requests ()) {
@@ -72,42 +75,46 @@ TypeSpec generate() {
7275 spec .addMethod (method .build ());
7376 }
7477 component .factoryElement ().ifPresent (factory -> {
75- spec .addMethod (MethodSpec .methodBuilder (FACTORY_METHOD )
76- .addModifiers (STATIC )
77- .addModifiers (modifiers )
78- .returns (TypeName .get (factory .element ().asType ()))
79- .addStatement ("return new $T()" , factory .generatedClass ())
80- .build ());
78+ spec .addMethod (generateFactoryMethod (factory ));
8179 spec .addType (factoryImpl .generate (factory ));
8280 });
8381 component .builderElement ().ifPresent (builder -> {
84- spec .addMethod (MethodSpec .methodBuilder (BUILDER_METHOD )
85- .addModifiers (STATIC )
86- .addModifiers (modifiers )
87- .returns (TypeName .get (builder .element ().asType ()))
88- .addStatement ("return new $T()" , builder .generatedClass ())
89- .build ());
90- spec .addType (builderImpl .generate (builder ));
82+ spec .addMethod (generateBuilderMethod (builder ));
83+ spec .addType (builderImpl .generate (builder , mockBuilder ));
9184 });
9285 if (component .factoryElement ().isEmpty () && component .builderElement ().isEmpty ()) {
9386 spec .addMethod (generateCreateMethod ());
94- if (!component .omitMockBuilder ()) {
95- spec .addMethod (generateMockBuilderMethod ());
96- }
9787 }
9888 if (!component .omitMockBuilder ()) {
89+ spec .addMethod (generateMockBuilderMethod ());
9990 spec .addType (mockBuilder .generate ());
10091 }
10192 spec .addAnnotation (AnnotationSpec .builder (Generated .class )
10293 .addMember ("value" , CodeBlock .of ("$S" , SimpleComponentProcessor .class .getCanonicalName ()))
10394 .addMember ("comments" , CodeBlock .of ("$S" , "https://github.com/jbock-java/simple-component" ))
10495 .build ());
105- spec .addModifiers (FINAL );
10696 spec .addMethod (generateAllParametersConstructor ());
10797 spec .addOriginatingElement (component .element ());
10898 return spec .build ();
10999 }
110100
101+ private MethodSpec generateFactoryMethod (FactoryElement factory ) {
102+ return MethodSpec .methodBuilder (FACTORY_METHOD )
103+ .addModifiers (STATIC )
104+ .addModifiers (modifiers )
105+ .returns (TypeName .get (factory .element ().asType ()))
106+ .addStatement ("return new $T()" , factory .generatedClass ())
107+ .build ();
108+ }
109+
110+ private MethodSpec generateBuilderMethod (BuilderElement builder ) {
111+ return MethodSpec .methodBuilder (BUILDER_METHOD )
112+ .addModifiers (STATIC )
113+ .addModifiers (modifiers )
114+ .addStatement ("return new $T(null)" , builder .generatedClass ())
115+ .returns (TypeName .get (builder .element ().asType ())).build ();
116+ }
117+
111118 private MethodSpec generateCreateMethod () {
112119 List <CodeBlock > constructorParameters = new ArrayList <>();
113120 MethodSpec .Builder method = MethodSpec .methodBuilder (CREATE_METHOD );
0 commit comments