aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-11-21 18:01:59 +0000
committerMichael Williamson <mike@zwobble.org>2015-11-21 18:01:59 +0000
commit61ca0aede839a9dda4fedf3a61d83d86de517af8 (patch)
tree6cfa4958d27e4c746293bcf5556ebfc532c436bf /src/main/java
parent8c28f424ee421cb3c757bd34d050c14a192f321f (diff)
Allow single compilation unit to generate multiple classes
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaFrontend.java2
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java8
-rw-r--r--src/main/java/org/zwobble/couscous/util/ExtraLists.java8
3 files changed, 10 insertions, 8 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 2a842c9..6e9945e 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaFrontend.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaFrontend.java
@@ -14,7 +14,7 @@ public class JavaFrontend implements Frontend {
@Override
public List<ClassNode> readSourceDirectory(Path directoryPath) throws IOException {
JavaReader reader = new JavaReader();
- return ExtraLists.map(
+ return ExtraLists.flatMap(
findJavaFiles(directoryPath),
javaFile -> reader.readClassFromFile(directoryPath, javaFile));
}
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 4f07149..446bc31 100644
--- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
+++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java
@@ -8,25 +8,27 @@ import org.zwobble.couscous.ast.TypeName;
import java.io.IOException;
import java.nio.file.Path;
+import java.util.List;
import java.util.Optional;
+import static java.util.Arrays.asList;
import static org.zwobble.couscous.frontends.java.JavaTypes.typeOf;
public class JavaReader {
private final JavaParser parser = new JavaParser();
- public ClassNode readClassFromFile(Path root, Path sourcePath) throws IOException {
+ public List<ClassNode> readClassFromFile(Path root, Path sourcePath) throws IOException {
CompilationUnit ast = parser.parseCompilationUnit(root, sourcePath);
return readCompilationUnit(ast);
}
- private static ClassNode readCompilationUnit(CompilationUnit ast) {
+ private static List<ClassNode> readCompilationUnit(CompilationUnit ast) {
String name = generateClassName(ast);
ClassNodeBuilder classBuilder = new ClassNodeBuilder(name);
TypeDeclaration type = (TypeDeclaration)ast.types().get(0);
readFields(type, classBuilder);
readMethods(type, classBuilder);
- return classBuilder.build();
+ return asList(classBuilder.build());
}
private static void readFields(TypeDeclaration type, ClassNodeBuilder classBuilder) {
diff --git a/src/main/java/org/zwobble/couscous/util/ExtraLists.java b/src/main/java/org/zwobble/couscous/util/ExtraLists.java
index 8c282e8..1951868 100644
--- a/src/main/java/org/zwobble/couscous/util/ExtraLists.java
+++ b/src/main/java/org/zwobble/couscous/util/ExtraLists.java
@@ -20,14 +20,14 @@ public class ExtraLists {
}
@SuppressWarnings("unchecked")
- public static <T, R, E extends Exception> List<R> map(
+ public static <T, R, E extends Exception> List<R> flatMap(
Stream<T> stream,
- CheckedFunction<T, R, E> function) throws E {
+ CheckedFunction<T, Iterable<R>, E> function) throws E {
try {
return stream
- .map(value -> {
+ .flatMap(value -> {
try {
- return function.apply(value);
+ return StreamSupport.stream(function.apply(value).spliterator(), false);
} catch (Exception exception) {
throw new StashedException(exception);
}