aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-10-31 18:47:20 +0000
committerMichael Williamson <mike@zwobble.org>2015-10-31 18:47:20 +0000
commit493d00f3ccf6af2d4ccb4421a82c143d96945178 (patch)
tree0dc8001461cc492eeb8e25fea7e2dc2c1d08f2ca /src/main/java/org
parent971fb3c743df26c408d752f1bc4137e645f455a2 (diff)
Support reading of boxed booleans
Diffstat (limited to 'src/main/java/org')
-rw-r--r--src/main/java/org/zwobble/couscous/ast/StaticMethodCallNode.java8
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java14
-rw-r--r--src/main/java/org/zwobble/couscous/values/ObjectValues.java1
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");
}