aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java11
-rw-r--r--src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java8
2 files changed, 19 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 77002d9..1ab6dfb 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
@@ -6,6 +6,7 @@ import java.util.List;
import org.eclipse.jdt.core.dom.ASTNode;
import org.eclipse.jdt.core.dom.BooleanLiteral;
import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.ConditionalExpression;
import org.eclipse.jdt.core.dom.Expression;
import org.eclipse.jdt.core.dom.MethodInvocation;
import org.eclipse.jdt.core.dom.NumberLiteral;
@@ -21,6 +22,7 @@ import org.zwobble.couscous.ast.MethodCallNode;
import org.zwobble.couscous.ast.ReturnNode;
import org.zwobble.couscous.ast.StatementNode;
import org.zwobble.couscous.ast.StaticMethodCallNode;
+import org.zwobble.couscous.ast.TernaryConditionalNode;
import org.zwobble.couscous.ast.TypeName;
import com.google.common.collect.Lists;
@@ -83,6 +85,8 @@ public class JavaReader {
return readStringLiteral((StringLiteral)expression);
case ASTNode.METHOD_INVOCATION:
return readMethodInvocation((MethodInvocation)expression);
+ case ASTNode.CONDITIONAL_EXPRESSION:
+ return readConditionalExpression((ConditionalExpression)expression);
default:
throw new RuntimeException("Unsupported expression: " + expression.getClass());
}
@@ -118,6 +122,13 @@ public class JavaReader {
}
}
+ private static ExpressionNode readConditionalExpression(ConditionalExpression expression) {
+ return new TernaryConditionalNode(
+ readExpression(expression.getExpression()),
+ readExpression(expression.getThenExpression()),
+ readExpression(expression.getElseExpression()));
+ }
+
private static String generateClassName(CompilationUnit ast) {
val type = (TypeDeclaration)ast.types().get(0);
return ast.getPackage().getName().getFullyQualifiedName() + "." + type.getName().getFullyQualifiedName();
diff --git a/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java b/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java
index 341ee5d..efcd337 100644
--- a/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java
@@ -5,6 +5,7 @@ import java.nio.file.Files;
import org.junit.Test;
import org.zwobble.couscous.ast.ExpressionNode;
import org.zwobble.couscous.ast.ReturnNode;
+import org.zwobble.couscous.ast.TernaryConditionalNode;
import org.zwobble.couscous.ast.TypeName;
import org.zwobble.couscous.frontends.java.JavaReader;
import org.zwobble.couscous.values.BooleanValue;
@@ -41,6 +42,13 @@ public class JavaReaderTests {
staticMethodCall(TypeName.of("java.lang.Integer"), "parseInt", asList(literal("42"))),
readExpression("Integer.parseInt(\"42\")"));
}
+
+ @Test
+ public void canReadTernaryConditionals() {
+ assertEquals(
+ new TernaryConditionalNode(literal(true), literal(1), literal(2)),
+ readExpression("true ? 1 : 2"));
+ }
@SneakyThrows
private ExpressionNode readExpression(String expressionSource) {