aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-10-06 16:44:09 +0100
committerMichael Williamson <mike@zwobble.org>2015-10-06 16:44:09 +0100
commit1352b8d81c5bc7a36f32908ad9c15fcbf081e57e (patch)
tree90b9695248e53778a829fb18c2bdfde677e28f8d
parente6f463257720bee91a1b4954d97684dbb3398cbf (diff)
Simplify builder usage
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ClassNode.java2
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java8
-rw-r--r--src/main/java/org/zwobble/couscous/ast/MethodNode.java4
-rw-r--r--src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java10
4 files changed, 12 insertions, 12 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/ClassNode.java b/src/main/java/org/zwobble/couscous/ast/ClassNode.java
index 280b772..674e347 100644
--- a/src/main/java/org/zwobble/couscous/ast/ClassNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/ClassNode.java
@@ -4,7 +4,6 @@ import java.util.List;
import org.zwobble.couscous.ast.visitors.NodeVisitor;
-import lombok.Singular;
import lombok.Value;
@Value
@@ -15,7 +14,6 @@ public class ClassNode implements Node {
TypeName name;
ConstructorNode constructor;
- @Singular
List<MethodNode> methods;
public String getSimpleName() {
diff --git a/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java b/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java
index cd324b9..65d2fda 100644
--- a/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java
+++ b/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java
@@ -77,10 +77,12 @@ public class ClassNodeBuilder {
public class MethodBuilder {
private final String methodName;
+ private final ImmutableList.Builder<FormalArgumentNode> arguments;
private final ImmutableList.Builder<StatementNode> statements;
public MethodBuilder(String name) {
this.methodName = name;
+ this.arguments = ImmutableList.builder();
this.statements = ImmutableList.builder();
}
@@ -88,6 +90,11 @@ public class ClassNodeBuilder {
return ThisReferenceNode.thisReference(name);
}
+ public MethodBuilder argument(FormalArgumentNode argument) {
+ arguments.add(argument);
+ return this;
+ }
+
public MethodBuilder statement(StatementNode statement) {
statements.add(statement);
return this;
@@ -96,6 +103,7 @@ public class ClassNodeBuilder {
public MethodNode build() {
return MethodNode.builder()
.name(methodName)
+ .arguments(arguments.build())
.body(statements.build())
.build();
}
diff --git a/src/main/java/org/zwobble/couscous/ast/MethodNode.java b/src/main/java/org/zwobble/couscous/ast/MethodNode.java
index 700e9ec..0bdad59 100644
--- a/src/main/java/org/zwobble/couscous/ast/MethodNode.java
+++ b/src/main/java/org/zwobble/couscous/ast/MethodNode.java
@@ -15,10 +15,6 @@ public class MethodNode implements CallableNode {
return builder().isStatic(true).name(name);
}
- public static MethodNodeBuilder method(String name) {
- return builder().isStatic(false).name(name);
- }
-
boolean isStatic;
String name;
@Singular
diff --git a/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java b/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java
index 765be9c..c9b267d 100644
--- a/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java
@@ -92,9 +92,8 @@ public abstract class BackendEvalTests {
@Test
public void canCallInstanceMethodWithNoArgumentsOnUserDefinedClass() {
val classNode = ClassNode.builder("com.example.Example")
- .method(MethodNode.method("main")
- .statement(new ReturnNode(literal(42)))
- .build())
+ .method("main", method -> method
+ .statement(new ReturnNode(literal(42))))
.build();
val result = evalExpression(asList(classNode),
methodCall(constructorCall(classNode.getName(), asList()), "main", asList(), IntegerValue.REF));
@@ -105,10 +104,9 @@ public abstract class BackendEvalTests {
public void canCallInstanceMethodWithArgumentsOnUserDefinedClass() {
val argument = formalArg(var(42, "x", IntegerValue.REF));
val classNode = ClassNode.builder("com.example.Example")
- .method(MethodNode.method("main")
+ .method("main", method -> method
.argument(argument)
- .statement(new ReturnNode(reference(argument)))
- .build())
+ .statement(new ReturnNode(reference(argument))))
.build();
val result = evalExpression(