aboutsummaryrefslogtreecommitdiff
path: root/src
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
parentb1f3af70685985974fafaeb8f3df991d158d2a01 (diff)
Allow multiple source paths to be set
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/couscous/CouscousCompiler.java9
-rw-r--r--src/main/java/org/zwobble/couscous/Frontend.java11
-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
-rw-r--r--src/test/java/org/zwobble/couscous/tests/JavaToInterpreterTests.java2
-rw-r--r--src/test/java/org/zwobble/couscous/tests/JavaToPythonTests.java3
-rw-r--r--src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java3
8 files changed, 33 insertions, 29 deletions
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<ClassNode> classes = frontend.readSourceDirectory(sourceRoot, path);
+ public void compileDirectory(List<Path> sourcePaths, Path path) throws IOException {
+ List<ClassNode> 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<ClassNode> 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<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());
diff --git a/src/test/java/org/zwobble/couscous/tests/JavaToInterpreterTests.java b/src/test/java/org/zwobble/couscous/tests/JavaToInterpreterTests.java
index 49b1fbf..8008261 100644
--- a/src/test/java/org/zwobble/couscous/tests/JavaToInterpreterTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/JavaToInterpreterTests.java
@@ -26,7 +26,7 @@ public class JavaToInterpreterTests extends CompilerTests {
List<PrimitiveValue> arguments
) throws IOException, InterruptedException {
JavaFrontend frontend = new JavaFrontend();
- List<ClassNode> classNodes = frontend.readSourceDirectory(directory, directory);
+ List<ClassNode> classNodes = frontend.readSourceDirectory(ImmutableList.of(directory), directory);
Project project = JavaProject.of(classNodes);
Interpreter interpreter = new Interpreter(project);
diff --git a/src/test/java/org/zwobble/couscous/tests/JavaToPythonTests.java b/src/test/java/org/zwobble/couscous/tests/JavaToPythonTests.java
index 2c8dfeb..d2d62b1 100644
--- a/src/test/java/org/zwobble/couscous/tests/JavaToPythonTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/JavaToPythonTests.java
@@ -1,5 +1,6 @@
package org.zwobble.couscous.tests;
+import com.google.common.collect.ImmutableList;
import org.junit.Test;
import org.zwobble.couscous.CouscousCompiler;
import org.zwobble.couscous.ast.TypeName;
@@ -28,7 +29,7 @@ public class JavaToPythonTests extends CompilerTests {
CouscousCompiler compiler = new CouscousCompiler(
new JavaFrontend(),
new PythonBackend(directoryPath, "couscous"));
- compiler.compileDirectory(directory, directory);
+ compiler.compileDirectory(ImmutableList.of(directory), directory);
return PythonMethodRunner.runFunction(directoryPath, type, methodName, arguments);
} finally {
deleteRecursively(directoryPath.toFile());
diff --git a/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java b/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java
index 2e61fe0..5548b2f 100644
--- a/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/frontends/java/JavaReaderTests.java
@@ -1,5 +1,6 @@
package org.zwobble.couscous.tests.frontends.java;
+import com.google.common.collect.ImmutableList;
import org.junit.Test;
import org.zwobble.couscous.ast.*;
import org.zwobble.couscous.frontends.java.JavaReader;
@@ -646,7 +647,7 @@ public class JavaReaderTests {
Files.createDirectories(directoryPath.resolve("com/example"));
Files.write(sourcePath, asList(javaClass));
- return JavaReader.readClassFromFile(directoryPath, sourcePath);
+ return JavaReader.readClassFromFile(ImmutableList.of(directoryPath), sourcePath);
} finally {
deleteRecursively(directoryPath.toFile());
}