aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java22
1 files changed, 17 insertions, 5 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 dee5430..32662a6 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
@@ -327,10 +327,9 @@ public class JavaReader {
}
private static ExpressionNode readInfixExpression(InfixExpression expression) {
- TypeName operandType = typeOf(expression.getLeftOperand());
- if (operandType.equals(IntegerValue.REF)) {
+ if (isPrimitiveOperation(expression)) {
Operator operator = readOperator(expression.getOperator());
- return readOperation(
+ return readPrimitiveOperation(
operator,
expression.getLeftOperand(),
expression.getRightOperand());
@@ -347,6 +346,19 @@ public class JavaReader {
}
}
+ private static boolean isPrimitiveOperation(InfixExpression expression) {
+ TypeName leftOperandType = typeOf(expression.getLeftOperand());
+ TypeName rightOperandType = typeOf(expression.getRightOperand());
+ return isPrimitive(leftOperandType)
+ || isPrimitive(rightOperandType)
+ || (expression.getOperator() != InfixExpression.Operator.NOT_EQUALS
+ && expression.getOperator() != InfixExpression.Operator.EQUALS);
+ }
+
+ private static boolean isPrimitive(TypeName type) {
+ return type.equals(BooleanValue.REF) || type.equals(IntegerValue.REF);
+ }
+
private static ExpressionNode readPrefixExpression(PrefixExpression expression) {
Operator operator = readOperator(expression.getOperator());
return AssignmentNode.assign(
@@ -378,11 +390,11 @@ public class JavaReader {
left,
handleBoxing(
left.getType(),
- readOperation(operator, expression.getLeftHandSide(), expression.getRightHandSide())));
+ readPrimitiveOperation(operator, expression.getLeftHandSide(), expression.getRightHandSide())));
}
}
- private static ExpressionNode readOperation(Operator operator, Expression leftJava, Expression rightJava) {
+ private static ExpressionNode readPrimitiveOperation(Operator operator, Expression leftJava, Expression rightJava) {
ExpressionNode left = readUnboxedExpression(leftJava);
ExpressionNode right = readUnboxedExpression(rightJava);
return MethodCallNode.methodCall(