diff options
| author | Michael Williamson <mike@zwobble.org> | 2015-10-06 10:55:08 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2015-10-06 10:55:08 +0100 |
| commit | a7669795d1d58e4962f16272cb5e92783cf01c64 (patch) | |
| tree | 770b1810be9a3e15172be151359d85ff7240a4f4 /src/main/java/org/zwobble/couscous/backends/python | |
| parent | 92d6bef1c9df704a22a01a9e61653681e95ec073 (diff) | |
Create notion of ClassName
Diffstat (limited to 'src/main/java/org/zwobble/couscous/backends/python')
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) { |
