From d8cfe057ba5683dd4c9fe3871aa5af28f977919d Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 7 Nov 2015 23:12:08 +0000 Subject: Rename PythonCompiler to PythonBackend --- .../org/zwobble/couscous/CouscousCompiler.java | 6 +- .../couscous/backends/python/PythonBackend.java | 74 ++++++++++++++++++++++ .../couscous/backends/python/PythonCompiler.java | 74 ---------------------- .../zwobble/couscous/tests/JavaToPythonTests.java | 4 +- .../tests/backends/python/PythonMethodRunner.java | 4 +- 5 files changed, 81 insertions(+), 81 deletions(-) create mode 100644 src/main/java/org/zwobble/couscous/backends/python/PythonBackend.java delete mode 100644 src/main/java/org/zwobble/couscous/backends/python/PythonCompiler.java diff --git a/src/main/java/org/zwobble/couscous/CouscousCompiler.java b/src/main/java/org/zwobble/couscous/CouscousCompiler.java index 8c303b0..7c088a4 100644 --- a/src/main/java/org/zwobble/couscous/CouscousCompiler.java +++ b/src/main/java/org/zwobble/couscous/CouscousCompiler.java @@ -5,13 +5,13 @@ import java.nio.file.Path; import java.util.List; import org.zwobble.couscous.ast.ClassNode; -import org.zwobble.couscous.backends.python.PythonCompiler; +import org.zwobble.couscous.backends.python.PythonBackend; import org.zwobble.couscous.frontends.java.JavaFrontend; public class CouscousCompiler { - private final PythonCompiler backend; + private final PythonBackend backend; - public CouscousCompiler(PythonCompiler backend) { + public CouscousCompiler(PythonBackend backend) { this.backend = backend; } diff --git a/src/main/java/org/zwobble/couscous/backends/python/PythonBackend.java b/src/main/java/org/zwobble/couscous/backends/python/PythonBackend.java new file mode 100644 index 0000000..5c3d0c5 --- /dev/null +++ b/src/main/java/org/zwobble/couscous/backends/python/PythonBackend.java @@ -0,0 +1,74 @@ +package org.zwobble.couscous.backends.python; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; + +import org.zwobble.couscous.ast.ClassNode; + +import com.google.common.io.Resources; + +import static java.util.Arrays.asList; +import static org.zwobble.couscous.backends.python.PythonCodeGenerator.generateCode; +import static org.zwobble.couscous.backends.python.PythonSerializer.serialize; + +public class PythonBackend { + private static final List RUNTIME_FILES = asList( + "java.lang.Object", + "java.lang.Integer", + "_couscous"); + + private final Path root; + private final String packageName; + + public PythonBackend(Path root, String packageName) { + this.root = root; + this.packageName = packageName; + } + + public void compile(List classes) throws IOException { + for (ClassNode classNode : classes) { + compileClass(classNode); + } + for (String runtimeFile : RUNTIME_FILES) { + String path = relativePathForModule(runtimeFile); + writeModule( + runtimeFile, + Resources.toString(Resources.getResource("python/runtime/" + path), StandardCharsets.UTF_8)); + } + } + + private Path destinationPathForModule(String moduleName) { + return root.resolve(packageName).resolve(relativePathForModule(moduleName)); + } + + private String relativePathForModule(String moduleName) { + return moduleName.replace(".", File.separator) + ".py"; + } + + private void compileClass(ClassNode classNode) throws IOException { + writeModule( + classNode.getName().getQualifiedName(), + serialize(generateCode(classNode))); + } + + private void writeModule(String name, String contents) throws IOException { + Path path = destinationPathForModule(name); + Files.createDirectories(path.getParent()); + createPythonPackages(path.getParent()); + Files.write(path, asList(contents)); + } + + private void createPythonPackages(Path packagePath) throws IOException { + while (packagePath.startsWith(root)) { + final java.nio.file.Path packageFile = packagePath.resolve("__init__.py"); + if (!packageFile.toFile().exists()) { + Files.createFile(packageFile); + } + packagePath = packagePath.getParent(); + } + } +} \ No newline at end of file diff --git a/src/main/java/org/zwobble/couscous/backends/python/PythonCompiler.java b/src/main/java/org/zwobble/couscous/backends/python/PythonCompiler.java deleted file mode 100644 index d077736..0000000 --- a/src/main/java/org/zwobble/couscous/backends/python/PythonCompiler.java +++ /dev/null @@ -1,74 +0,0 @@ -package org.zwobble.couscous.backends.python; - -import java.io.File; -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.List; - -import org.zwobble.couscous.ast.ClassNode; - -import com.google.common.io.Resources; - -import static java.util.Arrays.asList; -import static org.zwobble.couscous.backends.python.PythonCodeGenerator.generateCode; -import static org.zwobble.couscous.backends.python.PythonSerializer.serialize; - -public class PythonCompiler { - private static final List RUNTIME_FILES = asList( - "java.lang.Object", - "java.lang.Integer", - "_couscous"); - - private final Path root; - private final String packageName; - - public PythonCompiler(Path root, String packageName) { - this.root = root; - this.packageName = packageName; - } - - public void compile(List classes) throws IOException { - for (ClassNode classNode : classes) { - compileClass(classNode); - } - for (String runtimeFile : RUNTIME_FILES) { - String path = relativePathForModule(runtimeFile); - writeModule( - runtimeFile, - Resources.toString(Resources.getResource("python/runtime/" + path), StandardCharsets.UTF_8)); - } - } - - private Path destinationPathForModule(String moduleName) { - return root.resolve(packageName).resolve(relativePathForModule(moduleName)); - } - - private String relativePathForModule(String moduleName) { - return moduleName.replace(".", File.separator) + ".py"; - } - - private void compileClass(ClassNode classNode) throws IOException { - writeModule( - classNode.getName().getQualifiedName(), - serialize(generateCode(classNode))); - } - - private void writeModule(String name, String contents) throws IOException { - Path path = destinationPathForModule(name); - Files.createDirectories(path.getParent()); - createPythonPackages(path.getParent()); - Files.write(path, asList(contents)); - } - - private void createPythonPackages(Path packagePath) throws IOException { - while (packagePath.startsWith(root)) { - final java.nio.file.Path packageFile = packagePath.resolve("__init__.py"); - if (!packageFile.toFile().exists()) { - Files.createFile(packageFile); - } - packagePath = packagePath.getParent(); - } - } -} \ No newline at end of file diff --git a/src/test/java/org/zwobble/couscous/tests/JavaToPythonTests.java b/src/test/java/org/zwobble/couscous/tests/JavaToPythonTests.java index c6471c9..d844360 100644 --- a/src/test/java/org/zwobble/couscous/tests/JavaToPythonTests.java +++ b/src/test/java/org/zwobble/couscous/tests/JavaToPythonTests.java @@ -12,7 +12,7 @@ import org.junit.Test; import org.zwobble.couscous.CouscousCompiler; import org.zwobble.couscous.ast.ClassNode; import org.zwobble.couscous.ast.TypeName; -import org.zwobble.couscous.backends.python.PythonCompiler; +import org.zwobble.couscous.backends.python.PythonBackend; import org.zwobble.couscous.frontends.java.JavaFrontend; import org.zwobble.couscous.tests.backends.python.PythonMethodRunner; import org.zwobble.couscous.values.PrimitiveValue; @@ -71,7 +71,7 @@ public class JavaToPythonTests { Path directoryPath = Files.createTempDirectory(null); try { CouscousCompiler compiler = new CouscousCompiler( - new PythonCompiler(directoryPath, "couscous")); + new PythonBackend(directoryPath, "couscous")); compiler.compileDirectory(directoryName(path, type.getQualifiedName().split(".").length)); return PythonMethodRunner.runFunction(directoryPath, type, methodName, arguments); } finally { diff --git a/src/test/java/org/zwobble/couscous/tests/backends/python/PythonMethodRunner.java b/src/test/java/org/zwobble/couscous/tests/backends/python/PythonMethodRunner.java index d559e09..0c09178 100644 --- a/src/test/java/org/zwobble/couscous/tests/backends/python/PythonMethodRunner.java +++ b/src/test/java/org/zwobble/couscous/tests/backends/python/PythonMethodRunner.java @@ -9,7 +9,7 @@ import java.util.List; import org.zwobble.couscous.ast.ClassNode; import org.zwobble.couscous.ast.TypeName; import org.zwobble.couscous.backends.python.PythonCodeGenerator; -import org.zwobble.couscous.backends.python.PythonCompiler; +import org.zwobble.couscous.backends.python.PythonBackend; import org.zwobble.couscous.backends.python.PythonSerializer; import org.zwobble.couscous.tests.MethodRunner; import org.zwobble.couscous.values.PrimitiveValue; @@ -26,7 +26,7 @@ public class PythonMethodRunner implements MethodRunner { public PrimitiveValue runMethod(List classNodes, TypeName className, String methodName, List arguments) { try { Path directoryPath = Files.createTempDirectory(null); - PythonCompiler compiler = new PythonCompiler(directoryPath, "couscous"); + PythonBackend compiler = new PythonBackend(directoryPath, "couscous"); try { compiler.compile(classNodes); return runFunction(directoryPath, className, methodName, arguments); -- cgit v1.2.3