From 7ac08dcdac16eb94b6092a7a8e16cf6b65ae6569 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 25 Oct 2015 18:07:25 +0000 Subject: Remove lombok from ExpressionStatementNode --- .../org/zwobble/couscous/ast/AssignmentNode.java | 5 ++- .../couscous/ast/ExpressionStatementNode.java | 48 ++++++++++++++++++++-- .../couscous/frontends/java/JavaReader.java | 4 +- .../zwobble/couscous/tests/BackendMethodTests.java | 6 +-- .../zwobble/couscous/tests/ValueObjectTests.java | 2 + .../tests/frontends/java/JavaReaderTests.java | 4 +- .../tests/interpreter/InterpreterMethodTests.java | 6 +-- 7 files changed, 59 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/main/java/org/zwobble/couscous/ast/AssignmentNode.java b/src/main/java/org/zwobble/couscous/ast/AssignmentNode.java index ead783c..b6c8f9c 100644 --- a/src/main/java/org/zwobble/couscous/ast/AssignmentNode.java +++ b/src/main/java/org/zwobble/couscous/ast/AssignmentNode.java @@ -2,11 +2,12 @@ package org.zwobble.couscous.ast; import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper; +import static org.zwobble.couscous.ast.ExpressionStatementNode.expressionStatement; import static org.zwobble.couscous.ast.VariableReferenceNode.reference; public class AssignmentNode implements ExpressionNode { public static StatementNode assignStatement(AssignableExpressionNode target, ExpressionNode value) { - return new ExpressionStatementNode(assign(target, value)); + return expressionStatement(assign(target, value)); } public static AssignmentNode assign(AssignableExpressionNode target, ExpressionNode value) { @@ -14,7 +15,7 @@ public class AssignmentNode implements ExpressionNode { } public static StatementNode assignStatement(VariableNode target, ExpressionNode value) { - return new ExpressionStatementNode(assign(target, value)); + return expressionStatement(assign(target, value)); } public static AssignmentNode assign(VariableNode target, ExpressionNode value) { diff --git a/src/main/java/org/zwobble/couscous/ast/ExpressionStatementNode.java b/src/main/java/org/zwobble/couscous/ast/ExpressionStatementNode.java index 5bbe2b5..b814076 100644 --- a/src/main/java/org/zwobble/couscous/ast/ExpressionStatementNode.java +++ b/src/main/java/org/zwobble/couscous/ast/ExpressionStatementNode.java @@ -2,14 +2,54 @@ package org.zwobble.couscous.ast; import org.zwobble.couscous.ast.visitors.StatementNodeMapper; -import lombok.Value; - -@Value public class ExpressionStatementNode implements StatementNode { - ExpressionNode expression; + public static ExpressionStatementNode expressionStatement(ExpressionNode expression) { + return new ExpressionStatementNode(expression); + } + + private final ExpressionNode expression; + private ExpressionStatementNode(ExpressionNode expression) { + this.expression = expression; + } + + public ExpressionNode getExpression() { + return expression; + } + @Override public T accept(StatementNodeMapper visitor) { return visitor.visit(this); } + + @Override + public String toString() { + return "ExpressionStatementNode(expression=" + expression + ")"; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + + ((expression == null) ? 0 : expression.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; + ExpressionStatementNode other = (ExpressionStatementNode) obj; + if (expression == null) { + if (other.expression != null) + return false; + } else if (!expression.equals(other.expression)) + 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 9b680be..512a94b 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java @@ -38,7 +38,6 @@ import org.zwobble.couscous.ast.ClassNodeBuilder; import org.zwobble.couscous.ast.ClassNodeBuilder.MethodBuilder; import org.zwobble.couscous.ast.ConstructorCallNode; import org.zwobble.couscous.ast.ExpressionNode; -import org.zwobble.couscous.ast.ExpressionStatementNode; import org.zwobble.couscous.ast.FieldAccessNode; import org.zwobble.couscous.ast.LiteralNode; import org.zwobble.couscous.ast.MethodCallNode; @@ -52,6 +51,7 @@ import org.zwobble.couscous.ast.TypeName; import com.google.common.collect.Lists; import static java.util.Arrays.asList; +import static org.zwobble.couscous.ast.ExpressionStatementNode.expressionStatement; import static org.zwobble.couscous.ast.LocalVariableDeclarationNode.localVariableDeclaration; import static org.zwobble.couscous.ast.VariableDeclaration.var; import static org.zwobble.couscous.ast.VariableReferenceNode.reference; @@ -152,7 +152,7 @@ public class JavaReader { } private static StatementNode readExpressionStatement(ExpressionStatement statement) { - return new ExpressionStatementNode(readExpression(statement.getExpression())); + return expressionStatement(readExpression(statement.getExpression())); } private static List readVariableDeclarationStatement(VariableDeclarationStatement statement) { diff --git a/src/test/java/org/zwobble/couscous/tests/BackendMethodTests.java b/src/test/java/org/zwobble/couscous/tests/BackendMethodTests.java index 0fa4972..2fe7648 100644 --- a/src/test/java/org/zwobble/couscous/tests/BackendMethodTests.java +++ b/src/test/java/org/zwobble/couscous/tests/BackendMethodTests.java @@ -2,7 +2,6 @@ package org.zwobble.couscous.tests; import org.junit.Test; import org.zwobble.couscous.ast.ClassNode; -import org.zwobble.couscous.ast.ExpressionStatementNode; import org.zwobble.couscous.ast.LiteralNode; import org.zwobble.couscous.ast.MethodNode; import org.zwobble.couscous.ast.ReturnNode; @@ -13,6 +12,7 @@ import org.zwobble.couscous.values.StringValue; import static java.util.Arrays.asList; import static org.junit.Assert.assertEquals; import static org.zwobble.couscous.ast.AssignmentNode.assign; +import static org.zwobble.couscous.ast.ExpressionStatementNode.expressionStatement; import static org.zwobble.couscous.ast.FormalArgumentNode.formalArg; import static org.zwobble.couscous.ast.LiteralNode.literal; import static org.zwobble.couscous.ast.LocalVariableDeclarationNode.localVariableDeclaration; @@ -57,7 +57,7 @@ public abstract class BackendMethodTests { val arg = formalArg(var(ANY_ID, "x", StringValue.REF)); val method = staticMethod("hello") .argument(arg) - .statement(new ExpressionStatementNode(assign(reference(arg), LiteralNode.literal("[updated value]")))) + .statement(expressionStatement(assign(reference(arg), LiteralNode.literal("[updated value]")))) .statement(new ReturnNode(reference(arg))); val result = runMethod(method, value("[initial value]")); @@ -82,7 +82,7 @@ public abstract class BackendMethodTests { ANY_ID, "x", StringValue.REF, LiteralNode.literal("[initial value]")); val method = staticMethod("hello") .statement(localVariableDeclaration) - .statement(new ExpressionStatementNode(assign(reference(localVariableDeclaration), LiteralNode.literal("[updated value]")))) + .statement(expressionStatement(assign(reference(localVariableDeclaration), LiteralNode.literal("[updated value]")))) .statement(new ReturnNode(reference(localVariableDeclaration))); val result = runMethod(method); diff --git a/src/test/java/org/zwobble/couscous/tests/ValueObjectTests.java b/src/test/java/org/zwobble/couscous/tests/ValueObjectTests.java index 6396423..1c3dcd3 100644 --- a/src/test/java/org/zwobble/couscous/tests/ValueObjectTests.java +++ b/src/test/java/org/zwobble/couscous/tests/ValueObjectTests.java @@ -19,6 +19,7 @@ import org.zwobble.couscous.ast.ClassNode; import org.zwobble.couscous.ast.ConstructorCallNode; import org.zwobble.couscous.ast.ConstructorNode; import org.zwobble.couscous.ast.ExpressionNode; +import org.zwobble.couscous.ast.ExpressionStatementNode; import org.zwobble.couscous.ast.LiteralNode; import org.zwobble.couscous.ast.VariableDeclaration; import org.zwobble.couscous.ast.VariableReferenceNode; @@ -49,6 +50,7 @@ public class ValueObjectTests { {ClassNode.class}, {ConstructorCallNode.class}, {ConstructorNode.class}, + {ExpressionStatementNode.class}, {VariableDeclaration.class} }); } diff --git a/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java b/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java index 74dec1a..5f30eb5 100644 --- a/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java +++ b/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java @@ -6,7 +6,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.ExpressionStatementNode; import org.zwobble.couscous.ast.LocalVariableDeclarationNode; import org.zwobble.couscous.ast.ReturnNode; import org.zwobble.couscous.ast.StatementNode; @@ -24,6 +23,7 @@ import static org.zwobble.couscous.ast.AnnotationNode.annotation; import static org.zwobble.couscous.ast.AssignmentNode.assign; import static org.zwobble.couscous.ast.AssignmentNode.assignStatement; import static org.zwobble.couscous.ast.ConstructorCallNode.constructorCall; +import static org.zwobble.couscous.ast.ExpressionStatementNode.expressionStatement; import static org.zwobble.couscous.ast.FieldAccessNode.fieldAccess; import static org.zwobble.couscous.ast.FieldDeclarationNode.field; import static org.zwobble.couscous.ast.LiteralNode.literal; @@ -202,7 +202,7 @@ public class JavaReaderTests { @Test public void canReadExpressionStatements() { assertEquals( - new ExpressionStatementNode( + expressionStatement( staticMethodCall( TypeName.of("java.lang.Integer"), "parseInt", 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 9ef64d2..c11b76a 100644 --- a/src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterMethodTests.java +++ b/src/test/java/org/zwobble/couscous/tests/interpreter/InterpreterMethodTests.java @@ -5,7 +5,6 @@ import java.util.stream.Collectors; import org.junit.Test; import org.zwobble.couscous.ast.ClassNode; -import org.zwobble.couscous.ast.ExpressionStatementNode; import org.zwobble.couscous.ast.LiteralNode; import org.zwobble.couscous.ast.ReturnNode; import org.zwobble.couscous.ast.TypeName; @@ -24,6 +23,7 @@ import org.zwobble.couscous.values.StringValue; import static org.junit.Assert.assertEquals; import static org.zwobble.couscous.ast.AssignmentNode.assign; +import static org.zwobble.couscous.ast.ExpressionStatementNode.expressionStatement; import static org.zwobble.couscous.ast.FormalArgumentNode.formalArg; import static org.zwobble.couscous.ast.LiteralNode.literal; import static org.zwobble.couscous.ast.LocalVariableDeclarationNode.localVariableDeclaration; @@ -52,7 +52,7 @@ public class InterpreterMethodTests extends BackendMethodTests { val arg = formalArg(var(ANY_ID, "x", StringValue.REF)); val method = staticMethod("hello") .argument(arg) - .statement(new ExpressionStatementNode(assign(reference(arg), literal(0)))); + .statement(expressionStatement(assign(reference(arg), literal(0)))); val exception = assertThrows(UnexpectedValueType.class, () -> runMethod(method, value(""))); @@ -65,7 +65,7 @@ public class InterpreterMethodTests extends BackendMethodTests { val localVariableDeclaration = localVariableDeclaration( ANY_ID, "x", StringValue.REF, literal("")); val method = staticMethod("hello") - .statement(new ExpressionStatementNode(assign(reference(localVariableDeclaration), LiteralNode.literal("[updated value]")))); + .statement(expressionStatement(assign(reference(localVariableDeclaration), LiteralNode.literal("[updated value]")))); val exception = assertThrows(VariableNotInScope.class, () -> runMethod(method)); -- cgit v1.2.3