diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java | 11 | ||||
| -rw-r--r-- | src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java | 8 |
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) { |
