aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java40
-rw-r--r--src/main/java/org/zwobble/couscous/util/UpToAndIncludingIterable.java38
2 files changed, 44 insertions, 34 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 1aa682a..eecba36 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaStatementReader.java
@@ -5,8 +5,10 @@ import org.zwobble.couscous.ast.*;
import org.zwobble.couscous.values.BooleanValue;
import org.zwobble.couscous.values.ObjectValues;
-import java.util.*;
-import java.util.function.Predicate;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
import java.util.stream.Collectors;
import static com.google.common.collect.Iterables.*;
@@ -20,6 +22,7 @@ import static org.zwobble.couscous.frontends.java.JavaExpressionReader.coerceExp
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.UpToAndIncludingIterable.upToAndIncluding;
class JavaStatementReader {
private final Scope scope;
@@ -131,7 +134,7 @@ class JavaStatementReader {
private Map.Entry<Optional<ExpressionNode>,List<StatementNode>> readSwitchCase(List<Statement> statements, int statementIndex) {
SwitchCase caseStatement = (SwitchCase)statements.get(statementIndex);
- Iterable<Statement> statementsForCase = upTo(
+ Iterable<Statement> statementsForCase = upToAndIncluding(
filter(
skip(statements, statementIndex),
statement -> statement.getNodeType() != ASTNode.SWITCH_CASE),
@@ -141,37 +144,6 @@ class JavaStatementReader {
readStatements(statementsForCase));
}
- private static <T> Iterable<T> upTo(Iterable<T> iterable, Predicate<T> predicate) {
- return () -> new UpToIterator<>(iterable.iterator(), predicate);
- }
-
- private static class UpToIterator<T> implements Iterator<T> {
- private final Iterator<T> iterator;
- private final Predicate<T> predicate;
- private boolean finished;
-
- public UpToIterator(Iterator<T> iterator, Predicate<T> predicate) {
- this.iterator = iterator;
- this.predicate = predicate;
- }
-
- @Override
- public boolean hasNext() {
- return !finished && iterator.hasNext();
- }
-
- @Override
- public T next() {
- if (hasNext()) {
- T value = iterator.next();
- finished = predicate.test(value);
- return value;
- } else {
- throw new NoSuchElementException();
- }
- }
- }
-
private static boolean isEndOfCase(Statement statement) {
// TODO: do this on transformed nodes instead?
return statement.getNodeType() == ASTNode.RETURN_STATEMENT;
diff --git a/src/main/java/org/zwobble/couscous/util/UpToAndIncludingIterable.java b/src/main/java/org/zwobble/couscous/util/UpToAndIncludingIterable.java
new file mode 100644
index 0000000..aef5d06
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/util/UpToAndIncludingIterable.java
@@ -0,0 +1,38 @@
+package org.zwobble.couscous.util;
+
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+import java.util.function.Predicate;
+
+public class UpToAndIncludingIterable {
+ public static <T> Iterable<T> upToAndIncluding(Iterable<T> iterable, Predicate<T> predicate) {
+ return () -> new UpToIterator<>(iterable.iterator(), predicate);
+ }
+
+ private static class UpToIterator<T> implements Iterator<T> {
+ private final Iterator<T> iterator;
+ private final Predicate<T> predicate;
+ private boolean finished;
+
+ public UpToIterator(Iterator<T> iterator, Predicate<T> predicate) {
+ this.iterator = iterator;
+ this.predicate = predicate;
+ }
+
+ @Override
+ public boolean hasNext() {
+ return !finished && iterator.hasNext();
+ }
+
+ @Override
+ public T next() {
+ if (hasNext()) {
+ T value = iterator.next();
+ finished = predicate.test(value);
+ return value;
+ } else {
+ throw new NoSuchElementException();
+ }
+ }
+ }
+}