From 0597cb3b5fff29fca5cd4fb36bc4e205373ce234 Mon Sep 17 00:00:00 2001 From: jbock Date: Thu, 30 Nov 2023 18:14:17 +0100 Subject: [PATCH] ISSUES-4 factory use mockBuilder --- .../simple/processor/writing/MockBuilder.java | 53 +++++++++++-------- .../processor/JakartaQualifierTest.java | 4 +- .../jbock/simple/processor/PrimitiveTest.java | 6 +-- 3 files changed, 34 insertions(+), 29 deletions(-) diff --git a/compiler/src/main/java/io/jbock/simple/processor/writing/MockBuilder.java b/compiler/src/main/java/io/jbock/simple/processor/writing/MockBuilder.java index c58d652..184e8de 100644 --- a/compiler/src/main/java/io/jbock/simple/processor/writing/MockBuilder.java +++ b/compiler/src/main/java/io/jbock/simple/processor/writing/MockBuilder.java @@ -62,32 +62,39 @@ ClassName getClassName() { } private MethodSpec buildMethod() { - List constructorParameters = new ArrayList<>(); MethodSpec.Builder method = MethodSpec.methodBuilder("build"); - for (NamedBinding namedBinding : sorted.values()) { - Binding b = namedBinding.binding(); - Key key = b.key(); - CodeBlock invocation = b.invocation(names); - ParameterSpec param = names.apply(key); - if (namedBinding.isComponentRequest()) { - constructorParameters.add(CodeBlock.of("$N", names.apply(key))); - } - if (b instanceof ParameterBinding) { - method.addParameter(names.apply(b.key())); - } else if (!key.typeName().isPrimitive()) { - method.addStatement("$1T $2N = this.$2N != null ? this.$2N : $3L", key.typeName(), param, invocation); - } else { - FieldSpec auxField = FieldSpec.builder(TypeName.BOOLEAN, namedBinding.auxName(), PRIVATE).build(); - method.addStatement("$1T $2N = this.$3N ? this.$2N : $4L", key.typeName(), param, auxField, invocation); + method.addModifiers(modifiers); + component.factoryElement().ifPresent(factory -> { + method.returns(TypeName.get(factory.element().asType())); + method.addStatement("return new $T(this)", factory.generatedClass()); + }); + component.builderElement().ifPresent(builder -> { + method.returns(TypeName.get(builder.element().asType())); + method.addStatement("return new $T(this)", builder.generatedClass()); + }); + if (component.factoryElement().isEmpty() && component.builderElement().isEmpty()) { + method.returns(TypeName.get(component.element().asType())); + List constructorParameters = new ArrayList<>(); + for (NamedBinding namedBinding : sorted.values()) { + Binding b = namedBinding.binding(); + Key key = b.key(); + CodeBlock invocation = b.invocation(names); + ParameterSpec param = names.apply(key); + if (namedBinding.isComponentRequest()) { + constructorParameters.add(CodeBlock.of("$N", names.apply(key))); + } + if (!key.typeName().isPrimitive()) { + method.addStatement("$1T $2N = this.$2N != null ? this.$2N : $3L", key.typeName(), param, invocation); + } else { + FieldSpec auxField = FieldSpec.builder(TypeName.BOOLEAN, namedBinding.auxName(), PRIVATE).build(); + method.addStatement("$1T $2N = this.$3N ? this.$2N : $4L", key.typeName(), param, auxField, invocation); + } } + method.addStatement("return new $T($L)", + component.generatedClass(), + constructorParameters.stream().collect(CodeBlock.joining(", "))); } - return method - .addModifiers(modifiers) - .returns(TypeName.get(component.element().asType())) - .addStatement("return new $T($L)", - component.generatedClass(), - constructorParameters.stream().collect(CodeBlock.joining(", "))) - .build(); + return method.build(); } private List getFields() { diff --git a/compiler/src/test/java/io/jbock/simple/processor/JakartaQualifierTest.java b/compiler/src/test/java/io/jbock/simple/processor/JakartaQualifierTest.java index 5793c18..1efed7f 100644 --- a/compiler/src/test/java/io/jbock/simple/processor/JakartaQualifierTest.java +++ b/compiler/src/test/java/io/jbock/simple/processor/JakartaQualifierTest.java @@ -62,8 +62,8 @@ void qualifiedIdentity() { " }", "", " static final class MockBuilder {", - " TestClass.AComponent build(String a, String b) {", - " return new TestClass_AComponent_Impl(a);", + " TestClass.AComponent.Factory build() {", + " return new Factory_Impl(this);", " }", " }", "}"); diff --git a/compiler/src/test/java/io/jbock/simple/processor/PrimitiveTest.java b/compiler/src/test/java/io/jbock/simple/processor/PrimitiveTest.java index fa0253c..5d3d031 100644 --- a/compiler/src/test/java/io/jbock/simple/processor/PrimitiveTest.java +++ b/compiler/src/test/java/io/jbock/simple/processor/PrimitiveTest.java @@ -104,10 +104,8 @@ void providesPrimitive() { " private boolean b_isSet;", " private TestClass.A a;", "", - " TestClass.AComponent build(int i) {", - " int b = this.b_isSet ? this.b : TestClass.AComponent.getB(i);", - " TestClass.A a = this.a != null ? this.a : new TestClass.A(b);", - " return new TestClass_AComponent_Impl(a);", + " TestClass.AComponent.Factory build() {", + " return new Factory_Impl(this);", " }", "", " void b(int b) {",