diff options
| author | Michael Williamson <mike@zwobble.org> | 2015-11-07 16:02:17 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2015-11-07 16:02:17 +0000 |
| commit | 6be445abcd08cb111d0b77029620d350262b3840 (patch) | |
| tree | 6085b79d07197eda28d35bb297eb2313e33edceb /src/main/java | |
| parent | f7a7bfd4764f2787e022fc0a9dd8eb57c151e90d (diff) | |
Java frontend: read if statements
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java | 28 |
1 files changed, 26 insertions, 2 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 a47c4e9..c75205d 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java @@ -8,6 +8,7 @@ import java.util.stream.IntStream; import org.eclipse.jdt.core.dom.ASTNode; import org.eclipse.jdt.core.dom.Assignment; +import org.eclipse.jdt.core.dom.Block; import org.eclipse.jdt.core.dom.BooleanLiteral; import org.eclipse.jdt.core.dom.ClassInstanceCreation; import org.eclipse.jdt.core.dom.CompilationUnit; @@ -21,6 +22,7 @@ import org.eclipse.jdt.core.dom.IBinding; import org.eclipse.jdt.core.dom.IMethodBinding; import org.eclipse.jdt.core.dom.ITypeBinding; import org.eclipse.jdt.core.dom.IVariableBinding; +import org.eclipse.jdt.core.dom.IfStatement; import org.eclipse.jdt.core.dom.InfixExpression; import org.eclipse.jdt.core.dom.InfixExpression.Operator; import org.eclipse.jdt.core.dom.MethodDeclaration; @@ -45,6 +47,7 @@ import org.zwobble.couscous.ast.ClassNodeBuilder.MethodBuilder; import org.zwobble.couscous.ast.ConstructorCallNode; import org.zwobble.couscous.ast.ExpressionNode; import org.zwobble.couscous.ast.FieldAccessNode; +import org.zwobble.couscous.ast.IfStatementNode; import org.zwobble.couscous.ast.LiteralNode; import org.zwobble.couscous.ast.MethodCallNode; import org.zwobble.couscous.ast.ReturnNode; @@ -128,21 +131,35 @@ public class JavaReader { private static List<StatementNode> readStatement(Statement statement) { switch (statement.getNodeType()) { + case ASTNode.BLOCK: + return readBlock((Block)statement); + case ASTNode.RETURN_STATEMENT: return asList(readReturnStatement((ReturnStatement)statement)); case ASTNode.EXPRESSION_STATEMENT: return asList(readExpressionStatement((ExpressionStatement)statement)); + + case ASTNode.IF_STATEMENT: + return asList(readIfStatement((IfStatement)statement)); case ASTNode.VARIABLE_DECLARATION_STATEMENT: return readVariableDeclarationStatement((VariableDeclarationStatement)statement); - + default: throw new RuntimeException("Unsupported statement: " + statement.getClass()); } } - + + private static List<StatementNode> readBlock(Block block) { + @SuppressWarnings("unchecked") + List<Statement> statements = block.statements(); + return statements.stream() + .flatMap(statement -> readStatement(statement).stream()) + .collect(Collectors.toList()); + } + private static StatementNode readReturnStatement(ReturnStatement statement) { // TODO: set target type return ReturnNode.returns(readExpressionWithoutBoxing(statement.getExpression())); @@ -152,6 +169,13 @@ public class JavaReader { return expressionStatement(readExpressionWithoutBoxing(statement.getExpression())); } + private static StatementNode readIfStatement(IfStatement statement) { + return IfStatementNode.ifStatement( + readExpression(BooleanValue.REF, statement.getExpression()), + readStatement(statement.getThenStatement()), + readStatement(statement.getElseStatement())); + } + private static List<StatementNode> readVariableDeclarationStatement(VariableDeclarationStatement statement) { @SuppressWarnings("unchecked") List<VariableDeclarationFragment> fragments = statement.fragments(); |
