aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/frontends
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-01-08 08:28:42 +0000
committerMichael Williamson <mike@zwobble.org>2016-01-08 08:28:42 +0000
commit17072b4d14dad00acac247508e35b52c0233170b (patch)
tree828e8741714def549479267ba1c8c44ea542683c /src/main/java/org/zwobble/couscous/frontends
parentb1f3af70685985974fafaeb8f3df991d158d2a01 (diff)
Allow multiple source paths to be set
Diffstat (limited to 'src/main/java/org/zwobble/couscous/frontends')
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaFrontend.java8
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaParser.java22
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java4
3 files changed, 23 insertions, 11 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 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<ClassNode> readSourceDirectory(Path sourceRoot, Path directoryPath) throws IOException {
+public class JavaFrontend {
+ public List<ClassNode> readSourceDirectory(List<Path> sourcePaths, Path directoryPath) throws IOException {
List<ClassNode> 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<Path> 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<ClassNode> readClassFromFile(Path root, Path sourcePath) throws IOException {
- CompilationUnit ast = new JavaParser().parseCompilationUnit(root, sourcePath);
+ public static List<ClassNode> readClassFromFile(List<Path> 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());