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.java8
-rw-r--r--src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java23
2 files changed, 28 insertions, 3 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 8037540..26936ee 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
@@ -10,6 +10,7 @@ import org.eclipse.jdt.core.dom.ClassInstanceCreation;
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.ExpressionStatement;
import org.eclipse.jdt.core.dom.FieldAccess;
import org.eclipse.jdt.core.dom.FieldDeclaration;
import org.eclipse.jdt.core.dom.IBinding;
@@ -32,6 +33,7 @@ import org.zwobble.couscous.ast.ClassNode;
import org.zwobble.couscous.ast.ClassNodeBuilder;
import org.zwobble.couscous.ast.ConstructorCallNode;
import org.zwobble.couscous.ast.ExpressionNode;
+import org.zwobble.couscous.ast.ExpressionStatementNode;
import org.zwobble.couscous.ast.FieldAccessNode;
import org.zwobble.couscous.ast.LiteralNode;
import org.zwobble.couscous.ast.MethodCallNode;
@@ -105,6 +107,8 @@ public class JavaReader {
switch (statement.getNodeType()) {
case ASTNode.RETURN_STATEMENT:
return readReturnStatement((ReturnStatement)statement);
+ case ASTNode.EXPRESSION_STATEMENT:
+ return readExpressionStatement((ExpressionStatement)statement);
default:
throw new RuntimeException("Unsupported statement: " + statement.getClass());
}
@@ -114,6 +118,10 @@ public class JavaReader {
return new ReturnNode(readExpression(statement.getExpression()));
}
+ private static StatementNode readExpressionStatement(ExpressionStatement statement) {
+ return new ExpressionStatementNode(readExpression(statement.getExpression()));
+ }
+
private static ExpressionNode readExpression(Expression expression) {
switch (expression.getNodeType()) {
case ASTNode.BOOLEAN_LITERAL:
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 bee10b9..c9867be 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,7 +5,9 @@ import java.nio.file.Files;
import org.junit.Test;
import org.zwobble.couscous.ast.ClassNode;
import org.zwobble.couscous.ast.ExpressionNode;
+import org.zwobble.couscous.ast.ExpressionStatementNode;
import org.zwobble.couscous.ast.ReturnNode;
+import org.zwobble.couscous.ast.StatementNode;
import org.zwobble.couscous.ast.TernaryConditionalNode;
import org.zwobble.couscous.ast.ThisReferenceNode;
import org.zwobble.couscous.ast.TypeName;
@@ -159,6 +161,17 @@ public class JavaReaderTests {
literal("blah")),
returnNode.getValue());
}
+
+ @Test
+ public void canReadExpressionStatements() {
+ assertEquals(
+ new ExpressionStatementNode(
+ staticMethodCall(
+ TypeName.of("java.lang.Integer"),
+ "parseInt",
+ asList(literal("42")))),
+ readStatement("Integer.parseInt(\"42\");"));
+ }
private ExpressionNode readExpressionInInstanceMethod(String expressionSource) {
val javaClass =
@@ -172,14 +185,18 @@ public class JavaReaderTests {
}
private ExpressionNode readExpression(String expressionSource) {
+ val returnStatement = (ReturnNode) readStatement("return " + expressionSource + ";");
+ return returnStatement.getValue();
+ }
+
+ private StatementNode readStatement(String statementSource) {
val javaClass =
"public static Object main() {" +
- " return " + expressionSource + ";" +
+ statementSource +
"}";
val classNode = readClass(javaClass);
- val returnStatement = (ReturnNode) classNode.getMethods().get(0).getBody().get(0);
- return returnStatement.getValue();
+ return classNode.getMethods().get(0).getBody().get(0);
}
@SneakyThrows