Skip to content

Commit 1f74588

Browse files
authored
ISSUES-4 create method invoke all param constructor (#7)
1 parent f818156 commit 1f74588

File tree

3 files changed

+37
-9
lines changed

3 files changed

+37
-9
lines changed

compiler/src/main/java/io/jbock/simple/processor/writing/ComponentImpl.java

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,7 @@ TypeSpec generate() {
8383
spec.addType(createBuilderImpl(builder));
8484
});
8585
if (component.factoryElement().isEmpty() && component.builderElement().isEmpty()) {
86-
spec.addMethod(MethodSpec.methodBuilder("create")
87-
.addModifiers(STATIC)
88-
.addModifiers(modifiers)
89-
.returns(TypeName.get(component.element().asType()))
90-
.addStatement("return new $T()", component.generatedClass())
91-
.build());
86+
spec.addMethod(generateCreateMethod(modifiers));
9287
}
9388
spec.addAnnotation(AnnotationSpec.builder(Generated.class)
9489
.addMember("value", CodeBlock.of("$S", SimpleComponentProcessor.class.getCanonicalName()))
@@ -103,6 +98,29 @@ TypeSpec generate() {
10398
return spec.build();
10499
}
105100

101+
private MethodSpec generateCreateMethod(Modifier[] modifiers) {
102+
List<CodeBlock> constructorParameters = new ArrayList<>();
103+
MethodSpec.Builder method = MethodSpec.methodBuilder("create");
104+
for (NamedBinding namedBinding : sorted.values()) {
105+
Binding b = namedBinding.binding();
106+
Key key = b.key();
107+
CodeBlock invocation = b.invocation(names);
108+
ParameterSpec param = names.apply(key);
109+
if (namedBinding.isComponentRequest()) {
110+
constructorParameters.add(CodeBlock.of("$N", names.apply(key)));
111+
}
112+
method.addStatement("$T $N = $L", key.typeName(), param, invocation);
113+
}
114+
return method
115+
.addModifiers(STATIC)
116+
.addModifiers(modifiers)
117+
.returns(TypeName.get(component.element().asType()))
118+
.addStatement("return new $T($L)",
119+
component.generatedClass(),
120+
constructorParameters.stream().collect(CodeBlock.joining(", ")))
121+
.build();
122+
}
123+
106124
private MethodSpec generateConstructor() {
107125
MethodSpec.Builder constructor = MethodSpec.constructorBuilder().addModifiers(PRIVATE);
108126
for (NamedBinding namedBinding : sorted.values()) {

compiler/src/test/java/io/jbock/simple/processor/ProcessorComponentTest.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,10 @@ void staticMethodBindings() {
6363
" }",
6464
"",
6565
" public static TestClass.AComponent create() {",
66-
" return new TestClass_AComponent_Impl();",
66+
" TestClass.C c = TestClass.C.createC();",
67+
" TestClass.B b = TestClass.B.createB(c);",
68+
" TestClass.A a = new TestClass.A(b);",
69+
" return new TestClass_AComponent_Impl(a);",
6770
" }",
6871
"}");
6972
}
@@ -125,7 +128,11 @@ void dependencyDiamond() {
125128
" }",
126129
"",
127130
" static TestClass.AComponent create() {",
128-
" return new TestClass_AComponent_Impl();",
131+
" TestClass.E e = new TestClass.E();",
132+
" TestClass.C c = new TestClass.C(e);",
133+
" TestClass.B b = new TestClass.B(e);",
134+
" TestClass.A a = new TestClass.A(b, c);",
135+
" return new TestClass_AComponent_Impl(a);",
129136
" }",
130137
"}");
131138
}

compiler/src/test/java/io/jbock/simple/processor/StaticInjectionTest.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,10 @@ void clashResolvedByQualifiers() {
5757
" }",
5858
"",
5959
" static TestClass.AComponent create() {",
60-
" return new TestClass_AComponent_Impl();",
60+
" TestClass.B b = TestClass.B.create1();",
61+
" TestClass.B b2 = TestClass.B.create2();",
62+
" TestClass.A a = new TestClass.A(b, b2);",
63+
" return new TestClass_AComponent_Impl(a);",
6164
" }",
6265
"}");
6366
}

0 commit comments

Comments
 (0)