diff options
Diffstat (limited to 'src/main/java/org/zwobble/couscous/frontends')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java | 14 |
1 files changed, 14 insertions, 0 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 99d0268..a47c4e9 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java @@ -168,8 +168,12 @@ public class JavaReader { ExpressionNode couscousExpression = readExpressionWithoutBoxing(expression); if (isIntegerBox(targetType, couscousExpression)) { return StaticMethodCallNode.boxInt(couscousExpression); + } else if (isIntegerUnbox(targetType, couscousExpression)) { + return StaticMethodCallNode.unboxInt(couscousExpression); } else if (isBooleanBox(targetType, couscousExpression)) { return StaticMethodCallNode.boxBoolean(couscousExpression); + } else if (isBooleanUnbox(targetType, couscousExpression)) { + return StaticMethodCallNode.unboxBoolean(couscousExpression); } else { return couscousExpression; } @@ -180,11 +184,21 @@ public class JavaReader { !targetType.equals(IntegerValue.REF); } + private static boolean isIntegerUnbox(TypeName targetType, ExpressionNode expression) { + return !expression.getType().equals(IntegerValue.REF) && + targetType.equals(IntegerValue.REF); + } + private static boolean isBooleanBox(TypeName targetType, ExpressionNode expression) { return expression.getType().equals(BooleanValue.REF) && !targetType.equals(BooleanValue.REF); } + private static boolean isBooleanUnbox(TypeName targetType, ExpressionNode expression) { + return !expression.getType().equals(BooleanValue.REF) && + targetType.equals(BooleanValue.REF); + } + private static ExpressionNode readExpressionWithoutBoxing(Expression expression) { switch (expression.getNodeType()) { case ASTNode.BOOLEAN_LITERAL: |
