diff options
| author | Michael Williamson <mike@zwobble.org> | 2015-11-15 13:23:42 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2015-11-15 13:23:42 +0000 |
| commit | 44ef2b3f95091e96b1985410c494e3e8757fb427 (patch) | |
| tree | 1c02bc9a3c7ca63c7d0b0c6504a0512d5596d5dd | |
| parent | 67fd155b7a9c97a44d28dee579911e25cd7a6f37 (diff) | |
Extract readOperation
| -rw-r--r-- | src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java | 33 |
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)), |
