From 1e770167feb081a1019fd4401ec583ab4f0543ff Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Thu, 31 Dec 2015 21:53:44 +0000 Subject: Add source root to class path when compiling --- src/main/java/org/zwobble/couscous/CouscousCompiler.java | 4 ++-- src/main/java/org/zwobble/couscous/Frontend.java | 2 +- .../org/zwobble/couscous/frontends/java/JavaFrontend.java | 4 ++-- .../java/org/zwobble/couscous/frontends/java/JavaParser.java | 12 ++++++------ .../java/org/zwobble/couscous/frontends/java/JavaReader.java | 4 ++++ 5 files changed, 15 insertions(+), 11 deletions(-) (limited to 'src/main/java/org/zwobble') diff --git a/src/main/java/org/zwobble/couscous/CouscousCompiler.java b/src/main/java/org/zwobble/couscous/CouscousCompiler.java index 39c1709..da9852f 100644 --- a/src/main/java/org/zwobble/couscous/CouscousCompiler.java +++ b/src/main/java/org/zwobble/couscous/CouscousCompiler.java @@ -15,8 +15,8 @@ public class CouscousCompiler { this.backend = backend; } - public void compileDirectory(Path path) throws IOException { - List classes = frontend.readSourceDirectory(path); + public void compileDirectory(Path sourceRoot, Path path) throws IOException { + List classes = frontend.readSourceDirectory(sourceRoot, path); backend.compile(classes); } diff --git a/src/main/java/org/zwobble/couscous/Frontend.java b/src/main/java/org/zwobble/couscous/Frontend.java index 9d823bc..b400356 100644 --- a/src/main/java/org/zwobble/couscous/Frontend.java +++ b/src/main/java/org/zwobble/couscous/Frontend.java @@ -7,5 +7,5 @@ import java.util.List; import org.zwobble.couscous.ast.ClassNode; public interface Frontend { - List readSourceDirectory(Path path) throws IOException; + 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 b8747fc..ca71954 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaFrontend.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaFrontend.java @@ -22,10 +22,10 @@ import static org.zwobble.couscous.util.ExtraStreams.toStream; public class JavaFrontend implements Frontend { @Override - public List readSourceDirectory(Path directoryPath) throws IOException { + public List readSourceDirectory(Path sourceRoot, Path directoryPath) throws IOException { List classNodes = flatMap( findJavaFiles(directoryPath), - javaFile -> JavaReader.readClassFromFile(directoryPath, javaFile)); + javaFile -> JavaReader.readClassFromFile(sourceRoot, 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 c8e13b0..c740b9d 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaParser.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaParser.java @@ -18,7 +18,7 @@ public class JavaParser { public JavaParser() { parser = ASTParser.newParser(AST.JLS8); - parser.setBindingsRecovery(true); + parser.setBindingsRecovery(false); parser.setKind(ASTParser.K_COMPILATION_UNIT); @SuppressWarnings("unchecked") Hashtable options = JavaCore.getOptions(); @@ -26,16 +26,16 @@ public class JavaParser { options.put(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, JavaCore.VERSION_1_8); options.put(JavaCore.COMPILER_SOURCE, JavaCore.VERSION_1_8); parser.setCompilerOptions(options); - 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"}, - new String[]{"UTF-8"}, - false); parser.setResolveBindings(true); } public CompilationUnit parseCompilationUnit(Path root, Path sourcePath) throws IOException { parser.setUnitName("/" + root.relativize(sourcePath).toString()); + 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"}, + false); final byte[] javaFileBytes = Files.readAllBytes(sourcePath); CharBuffer source = Charsets.UTF_8.decode(ByteBuffer.wrap(javaFileBytes)); parser.setSource(source.array()); 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 84e95e8..ce705ca 100644 --- a/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java +++ b/src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java @@ -32,6 +32,10 @@ import static org.zwobble.couscous.util.ExtraLists.*; public class JavaReader { public static List readClassFromFile(Path root, Path sourcePath) throws IOException { CompilationUnit ast = new JavaParser().parseCompilationUnit(root, sourcePath); + System.out.println(sourcePath); + for (Message message : ast.getMessages()) { + System.out.println(message.getMessage()); + } JavaReader reader = new JavaReader(); return cons(reader.readCompilationUnit(ast), reader.classes.build()); } -- cgit v1.2.3