aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-10-06 16:55:10 +0100
committerMichael Williamson <mike@zwobble.org>2015-10-06 16:55:10 +0100
commit9d845a8deeb622736d54693ceb8efc9ea50497ca (patch)
treec63922192d84d496af27ce5c5733d96d671a134b /src
parentcea11f17222914ad65da19405f5a812be0c74d43 (diff)
Add static method builder to ClassNodeBuilder
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java15
-rw-r--r--src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java6
2 files changed, 14 insertions, 7 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java b/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java
index ce8c9a0..2a0d967 100644
--- a/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java
+++ b/src/main/java/org/zwobble/couscous/ast/ClassNodeBuilder.java
@@ -34,19 +34,28 @@ public class ClassNodeBuilder {
builder.arguments.build(),
builder.statements.build()));
}
-
+
public ClassNodeBuilder method(MethodNode method) {
this.methods.add(method);
return this;
}
+ public ClassNodeBuilder staticMethod(String name, Function<MethodBuilder<MethodNode>, MethodBuilder<MethodNode>> build) {
+ return method(name, true, build);
+ }
+
public ClassNodeBuilder method(String name, Function<MethodBuilder<MethodNode>, MethodBuilder<MethodNode>> build) {
- this.methods.add(build.apply(methodBuilder(name)).build());
+ return method(name, false, build);
+ }
+
+ public ClassNodeBuilder method(String name, boolean isStatic, Function<MethodBuilder<MethodNode>, MethodBuilder<MethodNode>> build) {
+ this.methods.add(build.apply(methodBuilder(name, isStatic)).build());
return this;
}
- private MethodBuilder<MethodNode> methodBuilder(String name) {
+ private MethodBuilder<MethodNode> methodBuilder(String name, boolean isStatic) {
return new MethodBuilder<MethodNode>(builder -> MethodNode.builder()
+ .isStatic(isStatic)
.name(name)
.arguments(builder.arguments.build())
.body(builder.statements.build())
diff --git a/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java b/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java
index c9b267d..08911c9 100644
--- a/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java
@@ -5,7 +5,6 @@ import java.util.List;
import org.junit.Test;
import org.zwobble.couscous.ast.ClassNode;
import org.zwobble.couscous.ast.ExpressionNode;
-import org.zwobble.couscous.ast.MethodNode;
import org.zwobble.couscous.ast.ReturnNode;
import org.zwobble.couscous.ast.TernaryConditionalNode;
import org.zwobble.couscous.values.IntegerValue;
@@ -80,9 +79,8 @@ public abstract class BackendEvalTests {
@Test
public void canCallStaticMethodFromUserDefinedStaticMethod() {
val classNode = ClassNode.builder("com.example.Example")
- .method(MethodNode.staticMethod("main")
- .statement(new ReturnNode(staticMethodCall("java.lang.Integer", "parseInt", literal("42"))))
- .build())
+ .staticMethod("main", method -> method
+ .statement(new ReturnNode(staticMethodCall("java.lang.Integer", "parseInt", literal("42")))))
.build();
val result = evalExpression(asList(classNode),
staticMethodCall("com.example.Example", "main"));