From 40b4de2450c299209a18e3c504e5b7ac2be674f0 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 2 Apr 2016 11:34:58 +0100 Subject: Allow multiple types to be read at once in JavaReader --- .../couscous/frontends/java/JavaFrontend.java | 3 ++- .../couscous/frontends/java/JavaReader.java | 26 ++++++++++++++-------- .../couscous/tests/frontends/java/JavaReading.java | 2 +- 3 files changed, 20 insertions(+), 11 deletions(-) (limited to 'src') 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 51df264..9925068 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaFrontend.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaFrontend.java @@ -14,13 +14,14 @@ import static org.zwobble.couscous.ast.structure.NodeStructure.descendantNodesAn import static org.zwobble.couscous.util.Casts.tryCast; import static org.zwobble.couscous.util.ExtraLists.eagerFlatMap; import static org.zwobble.couscous.util.ExtraLists.flatMap; +import static org.zwobble.couscous.util.ExtraLists.list; import static org.zwobble.couscous.util.ExtraStreams.toStream; public class JavaFrontend { public List readSourceDirectory(List sourcePaths, Path directoryPath) throws IOException { List classNodes = flatMap( findJavaFiles(directoryPath), - javaFile -> JavaReader.readClassFromFile(sourcePaths, javaFile)); + javaFile -> JavaReader.readClassesFromFiles(sourcePaths, list(javaFile))); ensureDeclarationsAreUnique(classNodes); return classNodes; } 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 cb06cfe..41ee30d 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java @@ -44,15 +44,19 @@ import static org.zwobble.couscous.util.ExtraLists.*; import static org.zwobble.couscous.util.ExtraMaps.lookup; public class JavaReader { - public static List readClassFromFile(List sourcePaths, Path sourcePath) throws IOException { - CompilationUnit ast = new JavaParser().parseCompilationUnit(sourcePaths, sourcePath); + public static List readClassesFromFiles(List sourcePaths, List sourceFiles) throws IOException { + JavaParser parser = new JavaParser(); + JavaReader reader = new JavaReader(); + for (Path sourceFile : sourceFiles) { + CompilationUnit ast = parser.parseCompilationUnit(sourcePaths, sourceFile); - List errors = eagerFilter(asList(ast.getProblems()), problem -> problem.isError()); - if (!errors.isEmpty()) { - throw new RuntimeException("Errors during parsing:\n\n" + describe(errors)); + List errors = eagerFilter(asList(ast.getProblems()), problem -> problem.isError()); + if (!errors.isEmpty()) { + throw new RuntimeException("Errors during parsing:\n\n" + describe(errors)); + } + reader.readCompilationUnit(ast); } - JavaReader reader = new JavaReader(); - return reader.readCompilationUnit(ast); + return reader.types(); } private static String describe(List errors) { @@ -74,9 +78,13 @@ public class JavaReader { classes = ImmutableList.builder(); } - private List readCompilationUnit(CompilationUnit ast) { + private void readCompilationUnit(CompilationUnit ast) { TypeDeclaration type = (TypeDeclaration)ast.types().get(0); - List classes = cons(readTypeDeclaration(type), this.classes.build()); + classes.add(readTypeDeclaration(type)); + } + + private List types() { + List classes = this.classes.build(); NodeTransformer transformer = NodeTransformer.builder() .transformExpression(expression -> tryCast(ConstructorCallNode.class, expression) diff --git a/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReading.java b/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReading.java index f7d2c85..a7dc180 100644 --- a/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReading.java +++ b/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReading.java @@ -66,7 +66,7 @@ public class JavaReading { Files.createDirectories(sourcePath.getParent()); Files.write(sourcePath, list(contents)); - return JavaReader.readClassFromFile(list(directoryPath), directoryPath.resolve(path)); + return JavaReader.readClassesFromFiles(list(directoryPath), list(directoryPath.resolve(path))); } finally { deleteRecursively(directoryPath.toFile()); } -- cgit v1.2.3