From 9d845a8deeb622736d54693ceb8efc9ea50497ca Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Tue, 6 Oct 2015 16:55:10 +0100 Subject: Add static method builder to ClassNodeBuilder --- .../java/org/zwobble/couscous/ast/ClassNodeBuilder.java | 15 ++++++++++++--- .../java/org/zwobble/couscous/tests/BackendEvalTests.java | 6 ++---- 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> build) { + return method(name, true, build); + } + public ClassNodeBuilder method(String name, Function, MethodBuilder> build) { - this.methods.add(build.apply(methodBuilder(name)).build()); + return method(name, false, build); + } + + public ClassNodeBuilder method(String name, boolean isStatic, Function, MethodBuilder> build) { + this.methods.add(build.apply(methodBuilder(name, isStatic)).build()); return this; } - private MethodBuilder methodBuilder(String name) { + private MethodBuilder methodBuilder(String name, boolean isStatic) { return new MethodBuilder(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")); -- cgit v1.2.3