diff options
Diffstat (limited to 'src/main/java')
3 files changed, 22 insertions, 1 deletions
diff --git a/src/main/java/org/zwobble/couscous/ast/StaticMethodCallNode.java b/src/main/java/org/zwobble/couscous/ast/StaticMethodCallNode.java index 36fea9f..06c63da 100644 --- a/src/main/java/org/zwobble/couscous/ast/StaticMethodCallNode.java +++ b/src/main/java/org/zwobble/couscous/ast/StaticMethodCallNode.java @@ -22,6 +22,14 @@ public class StaticMethodCallNode implements ExpressionNode { ObjectValues.BOXED_INT); } + public static ExpressionNode boxBoolean(ExpressionNode value) { + return staticMethodCall( + InternalCouscousValue.REF, + "boxBoolean", + asList(value), + ObjectValues.BOXED_BOOLEAN); + } + public static StaticMethodCallNode staticMethodCall( String className, String methodName, 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 a74cb35..99d0268 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java @@ -166,13 +166,25 @@ public class JavaReader { private static ExpressionNode readExpression(TypeName targetType, Expression expression) { ExpressionNode couscousExpression = readExpressionWithoutBoxing(expression); - if (couscousExpression.getType().equals(IntegerValue.REF) && !targetType.equals(IntegerValue.REF)) { + if (isIntegerBox(targetType, couscousExpression)) { return StaticMethodCallNode.boxInt(couscousExpression); + } else if (isBooleanBox(targetType, couscousExpression)) { + return StaticMethodCallNode.boxBoolean(couscousExpression); } else { return couscousExpression; } } + private static boolean isIntegerBox(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 ExpressionNode readExpressionWithoutBoxing(Expression expression) { switch (expression.getNodeType()) { case ASTNode.BOOLEAN_LITERAL: diff --git a/src/main/java/org/zwobble/couscous/values/ObjectValues.java b/src/main/java/org/zwobble/couscous/values/ObjectValues.java index ee02a11..2554e94 100644 --- a/src/main/java/org/zwobble/couscous/values/ObjectValues.java +++ b/src/main/java/org/zwobble/couscous/values/ObjectValues.java @@ -5,4 +5,5 @@ import org.zwobble.couscous.ast.TypeName; public class ObjectValues { public static final TypeName OBJECT = TypeName.of("java.lang.Object"); public static final TypeName BOXED_INT = TypeName.of("java.lang.Integer"); + public static final TypeName BOXED_BOOLEAN = TypeName.of("java.lang.Boolean"); } |
