diff options
| author | Michael Williamson <mike@zwobble.org> | 2015-10-25 18:24:06 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2015-10-25 18:24:06 +0000 |
| commit | 5295624f7252662025532cc54ac17baebb0a3f65 (patch) | |
| tree | 8ab0d5701fbe6fe5245e5f7662573765ef257d0e /src | |
| parent | ed9dcc150efe3df4884b6023a71c6c5216cc8e33 (diff) | |
Remove lombok from ReturnNode
Diffstat (limited to 'src')
7 files changed, 61 insertions, 20 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/ReturnNode.java b/src/main/java/org/zwobble/couscous/ast/ReturnNode.java index 7f4a57e..008b985 100644 --- a/src/main/java/org/zwobble/couscous/ast/ReturnNode.java +++ b/src/main/java/org/zwobble/couscous/ast/ReturnNode.java @@ -2,14 +2,53 @@ package org.zwobble.couscous.ast; import org.zwobble.couscous.ast.visitors.StatementNodeMapper; -import lombok.Value; - -@Value public class ReturnNode implements StatementNode { - ExpressionNode value; + public static ReturnNode returns(ExpressionNode value) { + return new ReturnNode(value); + } + + private final ExpressionNode value; + private ReturnNode(ExpressionNode value) { + this.value = value; + } + + public ExpressionNode getValue() { + return value; + } + @Override public <T> T accept(StatementNodeMapper<T> visitor) { return visitor.visit(this); } + + @Override + public String toString() { + return "ReturnNode(value=" + value + ")"; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((value == null) ? 0 : value.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + ReturnNode other = (ReturnNode) obj; + if (value == null) { + if (other.value != null) + return false; + } else if (!value.equals(other.value)) + return false; + return true; + } } diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java index 512a94b..2bb82ef 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java @@ -148,7 +148,7 @@ public class JavaReader { } private static StatementNode readReturnStatement(ReturnStatement statement) { - return new ReturnNode(readExpression(statement.getExpression())); + return ReturnNode.returns(readExpression(statement.getExpression())); } private static StatementNode readExpressionStatement(ExpressionStatement statement) { diff --git a/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java b/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java index 99c1479..c926618 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.ReturnNode; import org.zwobble.couscous.ast.TernaryConditionalNode; import org.zwobble.couscous.values.IntegerValue; import org.zwobble.couscous.values.PrimitiveValue; @@ -21,6 +20,7 @@ import static org.zwobble.couscous.ast.FieldAccessNode.fieldAccess; import static org.zwobble.couscous.ast.FormalArgumentNode.formalArg; import static org.zwobble.couscous.ast.LiteralNode.literal; import static org.zwobble.couscous.ast.MethodCallNode.methodCall; +import static org.zwobble.couscous.ast.ReturnNode.returns; import static org.zwobble.couscous.ast.StaticMethodCallNode.staticMethodCall; import static org.zwobble.couscous.ast.VariableDeclaration.var; import static org.zwobble.couscous.ast.VariableReferenceNode.reference; @@ -81,7 +81,7 @@ public abstract class BackendEvalTests { public void canCallStaticMethodFromUserDefinedStaticMethod() { val classNode = ClassNode.builder("com.example.Example") .staticMethod("main", method -> method - .statement(new ReturnNode(staticMethodCall("java.lang.Integer", "parseInt", literal("42"))))) + .statement(returns(staticMethodCall("java.lang.Integer", "parseInt", literal("42"))))) .build(); val result = evalExpression(asList(classNode), staticMethodCall("com.example.Example", "main")); @@ -92,7 +92,7 @@ public abstract class BackendEvalTests { public void canCallInstanceMethodWithNoArgumentsOnUserDefinedClass() { val classNode = ClassNode.builder("com.example.Example") .method("main", method -> method - .statement(new ReturnNode(literal(42)))) + .statement(returns(literal(42)))) .build(); val result = evalExpression(asList(classNode), methodCall(constructorCall(classNode.getName(), asList()), "main", asList(), IntegerValue.REF)); @@ -105,7 +105,7 @@ public abstract class BackendEvalTests { val classNode = ClassNode.builder("com.example.Example") .method("main", method -> method .argument(argument) - .statement(new ReturnNode(reference(argument)))) + .statement(returns(reference(argument)))) .build(); val result = evalExpression( @@ -130,7 +130,7 @@ public abstract class BackendEvalTests { fieldAccess(constructor.thisReference(), "value", IntegerValue.REF), reference(argument)))) .method("main", method -> method - .statement(new ReturnNode( + .statement(returns( fieldAccess(method.thisReference(), "value", IntegerValue.REF)))) .build(); diff --git a/src/test/java/org/zwobble/couscous/tests/BackendMethodTests.java b/src/test/java/org/zwobble/couscous/tests/BackendMethodTests.java index 2fe7648..c7549d9 100644 --- a/src/test/java/org/zwobble/couscous/tests/BackendMethodTests.java +++ b/src/test/java/org/zwobble/couscous/tests/BackendMethodTests.java @@ -4,7 +4,6 @@ import org.junit.Test; import org.zwobble.couscous.ast.ClassNode; import org.zwobble.couscous.ast.LiteralNode; import org.zwobble.couscous.ast.MethodNode; -import org.zwobble.couscous.ast.ReturnNode; import org.zwobble.couscous.values.PrimitiveValue; import org.zwobble.couscous.values.PrimitiveValues; import org.zwobble.couscous.values.StringValue; @@ -17,6 +16,7 @@ import static org.zwobble.couscous.ast.FormalArgumentNode.formalArg; import static org.zwobble.couscous.ast.LiteralNode.literal; import static org.zwobble.couscous.ast.LocalVariableDeclarationNode.localVariableDeclaration; import static org.zwobble.couscous.ast.MethodNode.staticMethod; +import static org.zwobble.couscous.ast.ReturnNode.returns; import static org.zwobble.couscous.ast.VariableDeclaration.var; import static org.zwobble.couscous.ast.VariableReferenceNode.reference; import static org.zwobble.couscous.tests.TestIds.ANY_ID; @@ -36,7 +36,7 @@ public abstract class BackendMethodTests { @Test public void canReturnLiteralValue() { val method = staticMethod("hello") - .statement(new ReturnNode(literal("hello, world!"))); + .statement(returns(literal("hello, world!"))); val result = runMethod(method); assertEquals(value("hello, world!"), result); @@ -46,7 +46,7 @@ public abstract class BackendMethodTests { val arg = formalArg(var(ANY_ID, "x", StringValue.REF)); val method = staticMethod("hello") .argument(arg) - .statement(new ReturnNode(reference(arg))); + .statement(returns(reference(arg))); val result = runMethod(method, value("hello, world!")); assertEquals(value("hello, world!"), result); @@ -58,7 +58,7 @@ public abstract class BackendMethodTests { val method = staticMethod("hello") .argument(arg) .statement(expressionStatement(assign(reference(arg), LiteralNode.literal("[updated value]")))) - .statement(new ReturnNode(reference(arg))); + .statement(returns(reference(arg))); val result = runMethod(method, value("[initial value]")); assertEquals(value("[updated value]"), result); @@ -70,7 +70,7 @@ public abstract class BackendMethodTests { ANY_ID, "x", StringValue.REF, LiteralNode.literal("[initial value]")); val method = staticMethod("hello") .statement(localVariableDeclaration) - .statement(new ReturnNode(reference(localVariableDeclaration))); + .statement(returns(reference(localVariableDeclaration))); val result = runMethod(method); assertEquals(value("[initial value]"), result); @@ -83,7 +83,7 @@ public abstract class BackendMethodTests { val method = staticMethod("hello") .statement(localVariableDeclaration) .statement(expressionStatement(assign(reference(localVariableDeclaration), LiteralNode.literal("[updated value]")))) - .statement(new ReturnNode(reference(localVariableDeclaration))); + .statement(returns(reference(localVariableDeclaration))); val result = runMethod(method); assertEquals(value("[updated value]"), result); diff --git a/src/test/java/org/zwobble/couscous/tests/ValueObjectTests.java b/src/test/java/org/zwobble/couscous/tests/ValueObjectTests.java index c018c26..b19d9f1 100644 --- a/src/test/java/org/zwobble/couscous/tests/ValueObjectTests.java +++ b/src/test/java/org/zwobble/couscous/tests/ValueObjectTests.java @@ -26,6 +26,7 @@ import org.zwobble.couscous.ast.FormalArgumentNode; import org.zwobble.couscous.ast.LiteralNode; import org.zwobble.couscous.ast.LocalVariableDeclarationNode; import org.zwobble.couscous.ast.MethodCallNode; +import org.zwobble.couscous.ast.ReturnNode; import org.zwobble.couscous.ast.VariableDeclaration; import org.zwobble.couscous.ast.VariableReferenceNode; import org.zwobble.couscous.util.ExtraArrays; @@ -62,6 +63,7 @@ public class ValueObjectTests { {LiteralNode.class}, {LocalVariableDeclarationNode.class}, {MethodCallNode.class}, + {ReturnNode.class}, {VariableDeclaration.class} }); } diff --git a/src/test/java/org/zwobble/couscous/tests/backends/python/PythonCompilerEvalTests.java b/src/test/java/org/zwobble/couscous/tests/backends/python/PythonCompilerEvalTests.java index e4a5ddf..c273638 100644 --- a/src/test/java/org/zwobble/couscous/tests/backends/python/PythonCompilerEvalTests.java +++ b/src/test/java/org/zwobble/couscous/tests/backends/python/PythonCompilerEvalTests.java @@ -24,7 +24,7 @@ public class PythonCompilerEvalTests extends BackendEvalTests { val programNode = ClassNode.builder("Program") .method(MethodNode.staticMethod("run") - .statement(new ReturnNode(expression)) + .statement(ReturnNode.returns(expression)) .build()) .build(); diff --git a/src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterMethodTests.java b/src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterMethodTests.java index c11b76a..118d657 100644 --- a/src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterMethodTests.java +++ b/src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterMethodTests.java @@ -6,7 +6,6 @@ import java.util.stream.Collectors; import org.junit.Test; import org.zwobble.couscous.ast.ClassNode; import org.zwobble.couscous.ast.LiteralNode; -import org.zwobble.couscous.ast.ReturnNode; import org.zwobble.couscous.ast.TypeName; import org.zwobble.couscous.interpreter.Interpreter; import org.zwobble.couscous.interpreter.JavaProject; @@ -28,6 +27,7 @@ import static org.zwobble.couscous.ast.FormalArgumentNode.formalArg; import static org.zwobble.couscous.ast.LiteralNode.literal; import static org.zwobble.couscous.ast.LocalVariableDeclarationNode.localVariableDeclaration; import static org.zwobble.couscous.ast.MethodNode.staticMethod; +import static org.zwobble.couscous.ast.ReturnNode.returns; import static org.zwobble.couscous.ast.VariableDeclaration.var; import static org.zwobble.couscous.ast.VariableReferenceNode.reference; import static org.zwobble.couscous.tests.TestIds.ANY_ID; @@ -78,7 +78,7 @@ public class InterpreterMethodTests extends BackendMethodTests { val localVariableDeclaration = localVariableDeclaration( ANY_ID, "x", StringValue.REF, literal("")); val method = staticMethod("hello") - .statement(new ReturnNode(reference(localVariableDeclaration))); + .statement(returns(reference(localVariableDeclaration))); val exception = assertThrows(VariableNotInScope.class, () -> runMethod(method)); @@ -91,7 +91,7 @@ public class InterpreterMethodTests extends BackendMethodTests { val localVariableDeclaration = localVariableDeclaration( ANY_ID, "x", StringValue.REF, literal("")); val method = staticMethod("hello") - .statement(new ReturnNode(reference(localVariableDeclaration))) + .statement(returns(reference(localVariableDeclaration))) .statement(localVariableDeclaration); val exception = assertThrows(UnboundVariable.class, |
