From 17072b4d14dad00acac247508e35b52c0233170b Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 8 Jan 2016 08:28:42 +0000 Subject: Allow multiple source paths to be set --- .../org/zwobble/couscous/CouscousCompiler.java | 9 +++++---- src/main/java/org/zwobble/couscous/Frontend.java | 11 ----------- .../couscous/frontends/java/JavaFrontend.java | 8 +++----- .../couscous/frontends/java/JavaParser.java | 22 ++++++++++++++++++---- .../couscous/frontends/java/JavaReader.java | 4 ++-- 5 files changed, 28 insertions(+), 26 deletions(-) delete mode 100644 src/main/java/org/zwobble/couscous/Frontend.java (limited to 'src/main/java') diff --git a/src/main/java/org/zwobble/couscous/CouscousCompiler.java b/src/main/java/org/zwobble/couscous/CouscousCompiler.java index da9852f..9c909ac 100644 --- a/src/main/java/org/zwobble/couscous/CouscousCompiler.java +++ b/src/main/java/org/zwobble/couscous/CouscousCompiler.java @@ -5,18 +5,19 @@ import java.nio.file.Path; import java.util.List; import org.zwobble.couscous.ast.ClassNode; +import org.zwobble.couscous.frontends.java.JavaFrontend; public class CouscousCompiler { - private final Frontend frontend; + private final JavaFrontend frontend; private final Backend backend; - public CouscousCompiler(Frontend frontend, Backend backend) { + public CouscousCompiler(JavaFrontend frontend, Backend backend) { this.frontend = frontend; this.backend = backend; } - public void compileDirectory(Path sourceRoot, Path path) throws IOException { - List classes = frontend.readSourceDirectory(sourceRoot, path); + public void compileDirectory(List sourcePaths, Path path) throws IOException { + List classes = frontend.readSourceDirectory(sourcePaths, path); backend.compile(classes); } diff --git a/src/main/java/org/zwobble/couscous/Frontend.java b/src/main/java/org/zwobble/couscous/Frontend.java deleted file mode 100644 index b400356..0000000 --- a/src/main/java/org/zwobble/couscous/Frontend.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.zwobble.couscous; - -import java.io.IOException; -import java.nio.file.Path; -import java.util.List; - -import org.zwobble.couscous.ast.ClassNode; - -public interface Frontend { - List readSourceDirectory(Path sourceRoot, Path path) throws IOException; -} 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 ca71954..5ab2678 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaFrontend.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaFrontend.java @@ -1,7 +1,6 @@ package org.zwobble.couscous.frontends.java; import com.google.common.collect.Multimaps; -import org.zwobble.couscous.Frontend; import org.zwobble.couscous.ast.ClassNode; import org.zwobble.couscous.ast.Node; import org.zwobble.couscous.ast.VariableDeclaration; @@ -20,12 +19,11 @@ import static org.zwobble.couscous.util.ExtraLists.eagerFlatMap; import static org.zwobble.couscous.util.ExtraLists.flatMap; import static org.zwobble.couscous.util.ExtraStreams.toStream; -public class JavaFrontend implements Frontend { - @Override - public List readSourceDirectory(Path sourceRoot, Path directoryPath) throws IOException { +public class JavaFrontend { + public List readSourceDirectory(List sourcePaths, Path directoryPath) throws IOException { List classNodes = flatMap( findJavaFiles(directoryPath), - javaFile -> JavaReader.readClassFromFile(sourceRoot, javaFile)); + javaFile -> JavaReader.readClassFromFile(sourcePaths, javaFile)); ensureDeclarationsAreUnique(classNodes); return classNodes; } diff --git a/src/main/java/org/zwobble/couscous/frontends/java/JavaParser.java b/src/main/java/org/zwobble/couscous/frontends/java/JavaParser.java index c740b9d..9de85cc 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaParser.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaParser.java @@ -6,13 +6,20 @@ import java.nio.CharBuffer; import java.nio.file.Files; import java.nio.file.Path; import java.util.Hashtable; +import java.util.List; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Iterables; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.dom.AST; import org.eclipse.jdt.core.dom.ASTParser; import org.eclipse.jdt.core.dom.CompilationUnit; import com.google.common.base.Charsets; +import static com.google.common.collect.Iterables.concat; +import static com.google.common.collect.Iterables.transform; +import static java.util.Arrays.asList; + public class JavaParser { private final ASTParser parser; @@ -29,12 +36,19 @@ public class JavaParser { parser.setResolveBindings(true); } - public CompilationUnit parseCompilationUnit(Path root, Path sourcePath) throws IOException { - parser.setUnitName("/" + root.relativize(sourcePath).toString()); + public CompilationUnit parseCompilationUnit(List sourcePaths, Path sourcePath) throws IOException { + parser.setUnitName(sourcePath.toString()); + + String[] sourcePathArguments = Iterables.toArray( + concat( + ImmutableList.of("/usr/lib/jvm/java-8-openjdk-amd64/jre/src.zip"), + transform(sourcePaths, Object::toString)), + String.class); + parser.setEnvironment( new String[]{"/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar"}, - new String[]{"/usr/lib/jvm/java-8-openjdk-amd64/jre/src.zip", root.toString()}, - new String[]{"UTF-8", "UTF-8"}, + sourcePathArguments, + Iterables.toArray(transform(asList(sourcePathArguments), argument -> "UTF-8"), String.class), false); final byte[] javaFileBytes = Files.readAllBytes(sourcePath); CharBuffer source = Charsets.UTF_8.decode(ByteBuffer.wrap(javaFileBytes)); 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 5e81ec9..04aa3b8 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java @@ -36,8 +36,8 @@ import static org.zwobble.couscous.util.ExtraLists.*; import static org.zwobble.couscous.util.ExtraMaps.toMap; public class JavaReader { - public static List readClassFromFile(Path root, Path sourcePath) throws IOException { - CompilationUnit ast = new JavaParser().parseCompilationUnit(root, sourcePath); + public static List readClassFromFile(List sourcePaths, Path sourcePath) throws IOException { + CompilationUnit ast = new JavaParser().parseCompilationUnit(sourcePaths, sourcePath); System.out.println(sourcePath); for (Message message : ast.getMessages()) { System.out.println(message.getMessage()); -- cgit v1.2.3