aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/backends/python
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-10-06 10:55:08 +0100
committerMichael Williamson <mike@zwobble.org>2015-10-06 10:55:08 +0100
commita7669795d1d58e4962f16272cb5e92783cf01c64 (patch)
tree770b1810be9a3e15172be151359d85ff7240a4f4 /src/main/java/org/zwobble/couscous/backends/python
parent92d6bef1c9df704a22a01a9e61653681e95ec073 (diff)
Create notion of ClassName
Diffstat (limited to 'src/main/java/org/zwobble/couscous/backends/python')
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java11
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/PythonCompiler.java9
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/PythonSerializer.java2
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/ast/PythonImportNode.java7
4 files changed, 18 insertions, 11 deletions
diff --git a/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java b/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java
index d22562c..d0024de 100644
--- a/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java
+++ b/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java
@@ -7,6 +7,7 @@ import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.zwobble.couscous.ast.AssignmentNode;
+import org.zwobble.couscous.ast.ClassName;
import org.zwobble.couscous.ast.ClassNode;
import org.zwobble.couscous.ast.ExpressionNode;
import org.zwobble.couscous.ast.ExpressionStatementNode;
@@ -69,7 +70,7 @@ public class PythonCodeGenerator {
.map(PythonCodeGenerator::generateFunction)
.collect(Collectors.toList());
- val pythonClass = pythonClass(classNode.getLocalName(), pythonBody);
+ val pythonClass = pythonClass(classNode.getSimpleName(), pythonBody);
return pythonModule(ImmutableList.copyOf(Iterators.concat(
imports,
@@ -82,8 +83,8 @@ public class PythonCodeGenerator {
.map(name -> pythonImport(name));
}
- private static Set<String> findReferencedClasses(ClassNode classNode) {
- val imports = ImmutableSet.<String>builder();
+ private static Set<ClassName> findReferencedClasses(ClassNode classNode) {
+ val imports = ImmutableSet.<ClassName>builder();
NodeVisitors.visitAll(classNode, new NodeVisitorWithEmptyDefaults() {
@Override
public void visit(StaticMethodCallNode staticMethodCall) {
@@ -209,7 +210,7 @@ public class PythonCodeGenerator {
@Override
public PythonExpressionNode visit(StaticMethodCallNode staticMethodCall) {
val className = staticMethodCall.getClassName();
- val moduleParts = asList(className.split(Pattern.quote(".")));
+ val moduleParts = asList(className.getQualifiedName().split(Pattern.quote(".")));
val module = foldLeft(
moduleParts,
@@ -218,7 +219,7 @@ public class PythonCodeGenerator {
val classReference = pythonAttributeAccess(
module,
- className.substring(className.lastIndexOf(".") + 1));
+ className.getSimpleName());
val methodReference = pythonAttributeAccess(
classReference,
diff --git a/src/main/java/org/zwobble/couscous/backends/python/PythonCompiler.java b/src/main/java/org/zwobble/couscous/backends/python/PythonCompiler.java
index a54f037..67e24cc 100644
--- a/src/main/java/org/zwobble/couscous/backends/python/PythonCompiler.java
+++ b/src/main/java/org/zwobble/couscous/backends/python/PythonCompiler.java
@@ -5,6 +5,7 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
+import org.zwobble.couscous.ast.ClassName;
import org.zwobble.couscous.ast.ClassNode;
import static java.util.Arrays.asList;
@@ -25,15 +26,15 @@ public class PythonCompiler {
for (val classNode : classes) {
compileClass(classNode);
}
- writeClass("java.lang.Integer",
+ writeClass(ClassName.of("java.lang.Integer"),
"class Integer(object):\n" +
" def parseInt(value):\n" +
" return int(value)"
);
}
- private Path pathForClass(String className) {
- return root.resolve(className.replace(".", File.separator) + ".py");
+ private Path pathForClass(ClassName className) {
+ return root.resolve(className.getQualifiedName().replace(".", File.separator) + ".py");
}
private void compileClass(ClassNode classNode) {
@@ -41,7 +42,7 @@ public class PythonCompiler {
}
@SneakyThrows
- private void writeClass(String name, String contents) {
+ private void writeClass(ClassName name, String contents) {
val path = pathForClass(name);
Files.createDirectories(path.getParent());
Files.write(path, asList(contents));
diff --git a/src/main/java/org/zwobble/couscous/backends/python/PythonSerializer.java b/src/main/java/org/zwobble/couscous/backends/python/PythonSerializer.java
index 9c82b5d..be53faa 100644
--- a/src/main/java/org/zwobble/couscous/backends/python/PythonSerializer.java
+++ b/src/main/java/org/zwobble/couscous/backends/python/PythonSerializer.java
@@ -166,7 +166,7 @@ public class PythonSerializer implements PythonNodeVisitor {
writer.writeStatement(() -> {
writer.writeKeyword("import");
writer.writeSpace();
- writer.writeIdentifier(importNode.getName());
+ writer.writeIdentifier(importNode.getName().getQualifiedName());
});
}
diff --git a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonImportNode.java b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonImportNode.java
index 2d38004..d8b97ad 100644
--- a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonImportNode.java
+++ b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonImportNode.java
@@ -1,12 +1,17 @@
package org.zwobble.couscous.backends.python.ast;
+import org.zwobble.couscous.ast.ClassName;
import org.zwobble.couscous.backends.python.ast.visitors.PythonNodeVisitor;
import lombok.Value;
@Value(staticConstructor="pythonImport")
public class PythonImportNode implements PythonStatementNode {
- String name;
+ public static PythonImportNode pythonImport(String name) {
+ return pythonImport(ClassName.of(name));
+ }
+
+ ClassName name;
@Override
public void accept(PythonNodeVisitor visitor) {