diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-01-13 21:02:11 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-01-13 21:02:11 +0000 |
| commit | 561432667229f94fa22adbd5ff083d0bddea482e (patch) | |
| tree | 976e92348f45e4584deeab069528b7d1c1ded686 /src/main/java/org/zwobble/couscous/frontends | |
| parent | 6f55b35b12c31e923170818ac0452e694465c68c (diff) | |
Tidy up processing of statements in switch
Diffstat (limited to 'src/main/java/org/zwobble/couscous/frontends')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java index d03c7c0..99e8d7e 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java @@ -11,7 +11,8 @@ import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; -import static com.google.common.collect.Iterables.*; +import static com.google.common.collect.Iterables.filter; +import static com.google.common.collect.Iterables.tryFind; import static com.google.common.collect.Maps.immutableEntry; import static org.zwobble.couscous.ast.ExpressionStatementNode.expressionStatement; import static org.zwobble.couscous.ast.IfStatementNode.ifStatement; @@ -21,7 +22,8 @@ import static org.zwobble.couscous.ast.WhileNode.whileLoop; import static org.zwobble.couscous.frontends.java.JavaExpressionReader.coerceExpression; import static org.zwobble.couscous.frontends.java.JavaTypes.typeOf; import static org.zwobble.couscous.util.ExtraLists.*; -import static org.zwobble.couscous.util.ExtraLists.concat; +import static org.zwobble.couscous.util.Tails.tail; +import static org.zwobble.couscous.util.Tails.tails; import static org.zwobble.couscous.util.UpToAndIncludingIterable.upToAndIncluding; class JavaStatementReader { @@ -100,10 +102,10 @@ class JavaStatementReader { List<Statement> statements = switchStatement.statements(); List<Map.Entry<Optional<ExpressionNode>, List<StatementNode>>> cases = new ArrayList<>(); - for (int statementIndex = 0; statementIndex < statements.size(); statementIndex++) { - Statement statement = statements.get(statementIndex); - if (statement.getNodeType() == ASTNode.SWITCH_CASE) { - cases.add(readSwitchCase(statements, statementIndex)); + for (List<Statement> tail : tails(statements)) { + Statement first = tail.get(0); + if (first.getNodeType() == ASTNode.SWITCH_CASE) { + cases.add(readSwitchCase((SwitchCase) first, tail(tail))); } } @@ -129,12 +131,13 @@ class JavaStatementReader { handle); } - private Map.Entry<Optional<ExpressionNode>,List<StatementNode>> readSwitchCase(List<Statement> statements, int statementIndex) { - SwitchCase caseStatement = (SwitchCase)statements.get(statementIndex); - + private Map.Entry<Optional<ExpressionNode>,List<StatementNode>> readSwitchCase( + SwitchCase caseStatement, + List<Statement> statements) + { Iterable<Statement> statementsForCase = upToAndIncluding( filter( - skip(statements, statementIndex), + statements, statement -> statement.getNodeType() != ASTNode.SWITCH_CASE), JavaStatementReader::isEndOfCase); return immutableEntry( |
