diff options
| author | Michael Williamson <mike@zwobble.org> | 2015-10-25 21:18:38 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2015-10-25 21:18:38 +0000 |
| commit | 12c91d0c9fc8b9e400aae47058ae41d92602f6eb (patch) | |
| tree | f1a387b264cb2a5cde658264037c8526b7b916d7 /src | |
| parent | c935f5699b4a97a03171c3de9ae507ad67abc553 (diff) | |
Throw IOException rather than wrapping in RuntimeException
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/frontends/java/JavaFrontend.java | 19 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/couscous/util/ExtraLists.java | 36 |
2 files changed, 43 insertions, 12 deletions
diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaFrontend.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaFrontend.java index d7bd54f..f58e6af 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaFrontend.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaFrontend.java @@ -4,26 +4,21 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.List; -import java.util.stream.Collectors; import java.util.stream.Stream; + import org.zwobble.couscous.ast.ClassNode; +import org.zwobble.couscous.util.ExtraLists; public class JavaFrontend { public static List<ClassNode> readSourceDirectory(Path directoryPath) throws IOException { JavaReader reader = new JavaReader(); - return findJavaFiles(directoryPath) - .map(javaFile -> { - // TODO: unwrap exception in outer scope - try { - return reader.readClassFromFile(directoryPath, javaFile); - } catch (Exception e) { - throw new RuntimeException(e); - } - }) - .collect(Collectors.toList()); + return ExtraLists.map( + findJavaFiles(directoryPath), + javaFile -> reader.readClassFromFile(directoryPath, javaFile)); } private static Stream<Path> findJavaFiles(Path directoryPath) throws IOException { - return Files.walk(directoryPath).filter(path -> path.toFile().isFile() && path.toString().endsWith(".java")); + return Files.walk(directoryPath) + .filter(path -> path.toFile().isFile() && path.toString().endsWith(".java")); } }
\ No newline at end of file diff --git a/src/main/java/org/zwobble/couscous/util/ExtraLists.java b/src/main/java/org/zwobble/couscous/util/ExtraLists.java index b3c017f..36c9b06 100644 --- a/src/main/java/org/zwobble/couscous/util/ExtraLists.java +++ b/src/main/java/org/zwobble/couscous/util/ExtraLists.java @@ -3,8 +3,44 @@ package org.zwobble.couscous.util; import java.util.List; import java.util.function.BiFunction; import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; public class ExtraLists { + @SuppressWarnings("unchecked") + public static <T, R, E extends Exception> List<R> map( + Stream<T> stream, + CheckedFunction<T, R, E> function) throws E { + try { + return stream + .map(value -> { + try { + return function.apply(value); + } catch (Exception exception) { + throw new StashedException(exception); + } + }) + .collect(Collectors.toList()); + } catch (StashedException exception) { + throw (E)exception.exception; + } + } + + @FunctionalInterface + public static interface CheckedFunction<T, R, E extends Exception> { + R apply(T value) throws E; + } + + private static class StashedException extends RuntimeException { + private static final long serialVersionUID = 1L; + + private Exception exception; + + private StashedException(Exception exception) { + this.exception = exception; + } + } + public static <T, R> R foldLeft( List<T> list, Function<T, R> initialValue, |
