aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-10-06 10:41:17 +0100
committerMichael Williamson <mike@zwobble.org>2015-10-06 10:41:17 +0100
commit92d6bef1c9df704a22a01a9e61653681e95ec073 (patch)
treed0ce8f61acbd8259492a41f39c3e9af83ae4cf7c /src/main/java
parent166a205aeb4c595b40b8ffe4c7d745b13031e3b3 (diff)
Split out import generation
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java14
1 files changed, 10 insertions, 4 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 551abcb..d22562c 100644
--- a/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java
+++ b/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java
@@ -4,6 +4,7 @@ import java.util.List;
import java.util.Set;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
+import java.util.stream.Stream;
import org.zwobble.couscous.ast.AssignmentNode;
import org.zwobble.couscous.ast.ClassNode;
@@ -49,6 +50,7 @@ import static org.zwobble.couscous.backends.python.ast.PythonCallNode.pythonCall
import static org.zwobble.couscous.backends.python.ast.PythonClassNode.pythonClass;
import static org.zwobble.couscous.backends.python.ast.PythonConditionalExpressionNode.pythonConditionalExpression;
import static org.zwobble.couscous.backends.python.ast.PythonFunctionDefinitionNode.pythonFunctionDefinition;
+import static org.zwobble.couscous.backends.python.ast.PythonImportNode.pythonImport;
import static org.zwobble.couscous.backends.python.ast.PythonIntegerLiteralNode.pythonIntegerLiteral;
import static org.zwobble.couscous.backends.python.ast.PythonModuleNode.pythonModule;
import static org.zwobble.couscous.backends.python.ast.PythonReturnNode.pythonReturn;
@@ -60,9 +62,7 @@ import lombok.val;
public class PythonCodeGenerator {
public static PythonModuleNode generateCode(ClassNode classNode) {
- val imports = findImports(classNode).stream()
- .map(PythonImportNode::pythonImport)
- .iterator();
+ val imports = generateImports(classNode).iterator();
val pythonBody = classNode.getMethods()
.stream()
@@ -76,7 +76,13 @@ public class PythonCodeGenerator {
singletonIterator(pythonClass))));
}
- private static Set<String> findImports(ClassNode classNode) {
+ private static Stream<PythonImportNode> generateImports(ClassNode classNode) {
+ val classes = findReferencedClasses(classNode);
+ return classes.stream()
+ .map(name -> pythonImport(name));
+ }
+
+ private static Set<String> findReferencedClasses(ClassNode classNode) {
val imports = ImmutableSet.<String>builder();
NodeVisitors.visitAll(classNode, new NodeVisitorWithEmptyDefaults() {
@Override