From 72cd9d3ef576c3bb9037b1692781a1b46297e998 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 10 Jan 2016 16:21:35 +0000 Subject: Move operation static methods into their own class --- .../org/zwobble/couscous/ast/MethodCallNode.java | 72 -------------------- .../java/org/zwobble/couscous/ast/Operations.java | 79 ++++++++++++++++++++++ .../frontends/java/JavaExpressionReader.java | 3 +- .../zwobble/couscous/tests/BackendEvalTests.java | 16 ++--- .../zwobble/couscous/tests/BackendMethodTests.java | 4 +- .../tests/frontends/java/JavaReaderTests.java | 1 + 6 files changed, 88 insertions(+), 87 deletions(-) create mode 100644 src/main/java/org/zwobble/couscous/ast/Operations.java (limited to 'src') diff --git a/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java b/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java index 3bae839..b385eec 100644 --- a/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java +++ b/src/main/java/org/zwobble/couscous/ast/MethodCallNode.java @@ -1,86 +1,14 @@ package org.zwobble.couscous.ast; import org.zwobble.couscous.ast.visitors.ExpressionNodeMapper; -import org.zwobble.couscous.values.BooleanValue; -import org.zwobble.couscous.values.IntegerValue; -import java.util.Collections; import java.util.List; import java.util.function.Function; import static org.zwobble.couscous.ast.InstanceReceiver.instanceReceiver; import static org.zwobble.couscous.util.ExtraLists.eagerMap; -import static org.zwobble.couscous.util.ExtraLists.list; public class MethodCallNode implements ExpressionNode { - public static ExpressionNode not(ExpressionNode value) { - if (value.getType().equals(BooleanValue.REF)) { - return methodCall(value, "negate", Collections.emptyList(), BooleanValue.REF); - } else { - throw new IllegalArgumentException("Can only negate booleans"); - } - } - - public static ExpressionNode booleanAnd(ExpressionNode left, ExpressionNode right) { - return booleanOperation(Operator.BOOLEAN_AND.getMethodName(), left, right); - } - - public static ExpressionNode booleanOr(ExpressionNode left, ExpressionNode right) { - return booleanOperation(Operator.BOOLEAN_OR.getMethodName(), left, right); - } - - public static ExpressionNode integerAdd(ExpressionNode left, ExpressionNode right) { - return integerOperation(Operator.ADD.getMethodName(), left, right); - } - - public static ExpressionNode integerSubtract(ExpressionNode left, ExpressionNode right) { - return integerOperation(Operator.SUBTRACT.getMethodName(), left, right); - } - - public static ExpressionNode integerMultiply(ExpressionNode left, ExpressionNode right) { - return integerOperation(Operator.MULTIPLY.getMethodName(), left, right); - } - - public static ExpressionNode integerDivide(ExpressionNode left, ExpressionNode right) { - return integerOperation(Operator.DIVIDE.getMethodName(), left, right); - } - - public static ExpressionNode integerMod(ExpressionNode left, ExpressionNode right) { - return integerOperation(Operator.MOD.getMethodName(), left, right); - } - - public static MethodCallNode integerOperation(String methodName, ExpressionNode left, ExpressionNode right) { - return methodCall(left, methodName, list(right), IntegerValue.REF); - } - - public static ExpressionNode equal(ExpressionNode left, ExpressionNode right) { - return booleanOperation(Operator.EQUALS.getMethodName(), left, right); - } - - public static ExpressionNode notEqual(ExpressionNode left, ExpressionNode right) { - return booleanOperation(Operator.NOT_EQUALS.getMethodName(), left, right); - } - - public static ExpressionNode greaterThan(ExpressionNode left, ExpressionNode right) { - return booleanOperation(Operator.GREATER_THAN.getMethodName(), left, right); - } - - public static ExpressionNode greaterThanOrEqual(ExpressionNode left, ExpressionNode right) { - return booleanOperation(Operator.GREATER_THAN_OR_EQUAL.getMethodName(), left, right); - } - - public static ExpressionNode lessThan(ExpressionNode left, ExpressionNode right) { - return booleanOperation(Operator.LESS_THAN.getMethodName(), left, right); - } - - public static ExpressionNode lessThanOrEqual(ExpressionNode left, ExpressionNode right) { - return booleanOperation(Operator.LESS_THAN_OR_EQUAL.getMethodName(), left, right); - } - - private static ExpressionNode booleanOperation(String methodName, ExpressionNode left, ExpressionNode right) { - return methodCall(left, methodName, list(right), BooleanValue.REF); - } - public static MethodCallNode methodCall( ExpressionNode receiver, String methodName, diff --git a/src/main/java/org/zwobble/couscous/ast/Operations.java b/src/main/java/org/zwobble/couscous/ast/Operations.java new file mode 100644 index 0000000..5691891 --- /dev/null +++ b/src/main/java/org/zwobble/couscous/ast/Operations.java @@ -0,0 +1,79 @@ +package org.zwobble.couscous.ast; + +import org.zwobble.couscous.values.BooleanValue; +import org.zwobble.couscous.values.IntegerValue; + +import java.util.Collections; + +import static org.zwobble.couscous.ast.MethodCallNode.methodCall; +import static org.zwobble.couscous.util.ExtraLists.list; + +public class Operations { + public static ExpressionNode not(ExpressionNode value) { + if (value.getType().equals(BooleanValue.REF)) { + return methodCall(value, "negate", Collections.emptyList(), BooleanValue.REF); + } else { + throw new IllegalArgumentException("Can only negate booleans"); + } + } + + public static ExpressionNode booleanAnd(ExpressionNode left, ExpressionNode right) { + return booleanOperation(Operator.BOOLEAN_AND.getMethodName(), left, right); + } + + public static ExpressionNode booleanOr(ExpressionNode left, ExpressionNode right) { + return booleanOperation(Operator.BOOLEAN_OR.getMethodName(), left, right); + } + + public static ExpressionNode integerAdd(ExpressionNode left, ExpressionNode right) { + return integerOperation(Operator.ADD.getMethodName(), left, right); + } + + public static ExpressionNode integerSubtract(ExpressionNode left, ExpressionNode right) { + return integerOperation(Operator.SUBTRACT.getMethodName(), left, right); + } + + public static ExpressionNode integerMultiply(ExpressionNode left, ExpressionNode right) { + return integerOperation(Operator.MULTIPLY.getMethodName(), left, right); + } + + public static ExpressionNode integerDivide(ExpressionNode left, ExpressionNode right) { + return integerOperation(Operator.DIVIDE.getMethodName(), left, right); + } + + public static ExpressionNode integerMod(ExpressionNode left, ExpressionNode right) { + return integerOperation(Operator.MOD.getMethodName(), left, right); + } + + public static MethodCallNode integerOperation(String methodName, ExpressionNode left, ExpressionNode right) { + return methodCall(left, methodName, list(right), IntegerValue.REF); + } + + public static ExpressionNode equal(ExpressionNode left, ExpressionNode right) { + return booleanOperation(Operator.EQUALS.getMethodName(), left, right); + } + + public static ExpressionNode notEqual(ExpressionNode left, ExpressionNode right) { + return booleanOperation(Operator.NOT_EQUALS.getMethodName(), left, right); + } + + public static ExpressionNode greaterThan(ExpressionNode left, ExpressionNode right) { + return booleanOperation(Operator.GREATER_THAN.getMethodName(), left, right); + } + + public static ExpressionNode greaterThanOrEqual(ExpressionNode left, ExpressionNode right) { + return booleanOperation(Operator.GREATER_THAN_OR_EQUAL.getMethodName(), left, right); + } + + public static ExpressionNode lessThan(ExpressionNode left, ExpressionNode right) { + return booleanOperation(Operator.LESS_THAN.getMethodName(), left, right); + } + + public static ExpressionNode lessThanOrEqual(ExpressionNode left, ExpressionNode right) { + return booleanOperation(Operator.LESS_THAN_OR_EQUAL.getMethodName(), left, right); + } + + private static ExpressionNode booleanOperation(String methodName, ExpressionNode left, ExpressionNode right) { + return methodCall(left, methodName, list(right), BooleanValue.REF); + } +} diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java index 67c1e04..21d7112 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaExpressionReader.java @@ -10,10 +10,9 @@ import java.util.List; import java.util.stream.Collectors; import java.util.stream.IntStream; -import static java.util.Arrays.asList; import static org.zwobble.couscous.ast.ConstructorCallNode.constructorCall; import static org.zwobble.couscous.ast.LiteralNode.literal; -import static org.zwobble.couscous.ast.MethodCallNode.not; +import static org.zwobble.couscous.ast.Operations.not; import static org.zwobble.couscous.ast.TypeCoercionNode.typeCoercion; import static org.zwobble.couscous.frontends.java.JavaOperators.readOperator; import static org.zwobble.couscous.frontends.java.JavaTypes.typeOf; diff --git a/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java b/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java index 3ca5a1a..a555802 100644 --- a/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java +++ b/src/test/java/org/zwobble/couscous/tests/BackendEvalTests.java @@ -1,28 +1,22 @@ package org.zwobble.couscous.tests; -import java.util.Collections; -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.FormalArgumentNode; -import org.zwobble.couscous.ast.TypeName; -import org.zwobble.couscous.values.BooleanValue; +import org.zwobble.couscous.ast.*; import org.zwobble.couscous.values.IntegerValue; import org.zwobble.couscous.values.PrimitiveValue; import org.zwobble.couscous.values.StringValue; -import com.google.common.collect.ImmutableList; +import java.util.Collections; +import java.util.List; -import static java.util.Arrays.asList; import static org.junit.Assert.assertEquals; import static org.zwobble.couscous.ast.AssignmentNode.assignStatement; import static org.zwobble.couscous.ast.ConstructorCallNode.constructorCall; 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.*; +import static org.zwobble.couscous.ast.MethodCallNode.methodCall; +import static org.zwobble.couscous.ast.Operations.*; import static org.zwobble.couscous.ast.ReturnNode.returns; import static org.zwobble.couscous.ast.StaticMethodCallNode.same; import static org.zwobble.couscous.ast.StaticMethodCallNode.staticMethodCall; diff --git a/src/test/java/org/zwobble/couscous/tests/BackendMethodTests.java b/src/test/java/org/zwobble/couscous/tests/BackendMethodTests.java index 1f34127..e64542a 100644 --- a/src/test/java/org/zwobble/couscous/tests/BackendMethodTests.java +++ b/src/test/java/org/zwobble/couscous/tests/BackendMethodTests.java @@ -20,8 +20,8 @@ import static org.zwobble.couscous.ast.FormalArgumentNode.formalArg; import static org.zwobble.couscous.ast.IfStatementNode.ifStatement; import static org.zwobble.couscous.ast.LiteralNode.literal; import static org.zwobble.couscous.ast.LocalVariableDeclarationNode.localVariableDeclaration; -import static org.zwobble.couscous.ast.MethodCallNode.integerAdd; -import static org.zwobble.couscous.ast.MethodCallNode.notEqual; +import static org.zwobble.couscous.ast.Operations.integerAdd; +import static org.zwobble.couscous.ast.Operations.notEqual; import static org.zwobble.couscous.ast.MethodNode.staticMethod; import static org.zwobble.couscous.ast.ReturnNode.returns; import static org.zwobble.couscous.ast.VariableDeclaration.var; 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 fc27d75..901c1a7 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 @@ -27,6 +27,7 @@ import static org.zwobble.couscous.ast.IfStatementNode.ifStatement; import static org.zwobble.couscous.ast.LiteralNode.literal; import static org.zwobble.couscous.ast.LocalVariableDeclarationNode.localVariableDeclaration; import static org.zwobble.couscous.ast.MethodCallNode.*; +import static org.zwobble.couscous.ast.Operations.*; import static org.zwobble.couscous.ast.ReturnNode.returns; import static org.zwobble.couscous.ast.StaticMethodCallNode.*; import static org.zwobble.couscous.ast.TernaryConditionalNode.ternaryConditional; -- cgit v1.2.3