aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/couscous/CouscousCompiler.java4
-rw-r--r--src/main/java/org/zwobble/couscous/Frontend.java2
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaFrontend.java4
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaParser.java12
-rw-r--r--src/main/java/org/zwobble/couscous/frontends/java/JavaReader.java4
-rw-r--r--src/test/java/org/zwobble/couscous/tests/JavaToPythonTests.java5
6 files changed, 18 insertions, 13 deletions
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<ClassNode> classes = frontend.readSourceDirectory(path);
+ public void compileDirectory(Path sourceRoot, Path path) throws IOException {
+ List<ClassNode> 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<ClassNode> readSourceDirectory(Path path) throws IOException;
+ 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 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<ClassNode> readSourceDirectory(Path directoryPath) throws IOException {
+ public List<ClassNode> readSourceDirectory(Path sourceRoot, Path directoryPath) throws IOException {
List<ClassNode> 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<String, String> 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<ClassNode> 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());
}
diff --git a/src/test/java/org/zwobble/couscous/tests/JavaToPythonTests.java b/src/test/java/org/zwobble/couscous/tests/JavaToPythonTests.java
index 71a5cfe..edb0260 100644
--- a/src/test/java/org/zwobble/couscous/tests/JavaToPythonTests.java
+++ b/src/test/java/org/zwobble/couscous/tests/JavaToPythonTests.java
@@ -12,6 +12,7 @@ import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
+import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
@@ -134,7 +135,7 @@ public class JavaToPythonTests {
"/java/" + directoryName + "/" + type.getQualifiedName().replace(".", "/") + ".java");
return execProgram(
- directoryName(path, type.getQualifiedName().split(".").length),
+ directoryName(path, type.getQualifiedName().split("\\.").length),
type,
methodName,
arguments);
@@ -151,7 +152,7 @@ public class JavaToPythonTests {
CouscousCompiler compiler = new CouscousCompiler(
new JavaFrontend(),
new PythonBackend(directoryPath, "couscous"));
- compiler.compileDirectory(directory);
+ compiler.compileDirectory(directory, directory);
return PythonMethodRunner.runFunction(directoryPath, type, methodName, arguments);
} finally {
deleteRecursively(directoryPath.toFile());