diff options
| -rw-r--r-- | src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java | 8 | ||||
| -rw-r--r-- | src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java | 23 |
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 |
