aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-11-15 13:23:42 +0000
committerMichael Williamson <mike@zwobble.org>2015-11-15 13:23:42 +0000
commit44ef2b3f95091e96b1985410c494e3e8757fb427 (patch)
tree1c02bc9a3c7ca63c7d0b0c6504a0512d5596d5dd
parent67fd155b7a9c97a44d28dee579911e25cd7a6f37 (diff)
Extract readOperation
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java33
1 files changed, 19 insertions, 14 deletions
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 196f50c..02d14c1 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
@@ -329,18 +329,17 @@ public class JavaReader {
private static ExpressionNode readInfixExpression(InfixExpression expression) {
TypeName operandType = typeOf(expression.getLeftOperand());
if (operandType.equals(IntegerValue.REF)) {
- ExpressionNode left = readExpression(IntegerValue.REF, expression.getLeftOperand());
- ExpressionNode right = readExpression(IntegerValue.REF, expression.getRightOperand());
-
if (expression.getOperator() == InfixExpression.Operator.NOT_EQUALS) {
- return MethodCallNode.notEqual(left, right);
+ return MethodCallNode.not(readOperation(
+ Operator.EQUALS,
+ expression.getLeftOperand(),
+ expression.getRightOperand()));
} else {
Operator operator = readOperator(expression.getOperator());
- return MethodCallNode.methodCall(
- left,
- operator.getMethodName(),
- asList(right),
- operator.isBoolean() ? BooleanValue.REF : operandType);
+ return readOperation(
+ operator,
+ expression.getLeftOperand(),
+ expression.getRightOperand());
}
} else {
ExpressionNode left = readExpression(ObjectValues.OBJECT, expression.getLeftOperand());
@@ -386,14 +385,20 @@ public class JavaReader {
left,
handleBoxing(
left.getType(),
- MethodCallNode.methodCall(
- readUnboxedExpression(expression.getLeftHandSide()),
- operator.getMethodName(),
- asList(right),
- unboxedType(left.getType()))));
+ readOperation(operator, expression.getLeftHandSide(), expression.getRightHandSide())));
}
}
+ private static ExpressionNode readOperation(Operator operator, Expression leftJava, Expression rightJava) {
+ ExpressionNode left = readUnboxedExpression(leftJava);
+ ExpressionNode right = readUnboxedExpression(rightJava);
+ return MethodCallNode.methodCall(
+ left,
+ operator.getMethodName(),
+ asList(right),
+ operator.isBoolean() ? BooleanValue.REF : left.getType());
+ }
+
private static ExpressionNode readUnboxedExpression(Expression expression) {
return readExpression(
unboxedType(typeOf(expression)),