diff options
| author | Michael Williamson <mike@zwobble.org> | 2015-10-06 10:41:17 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2015-10-06 10:41:17 +0100 |
| commit | 92d6bef1c9df704a22a01a9e61653681e95ec073 (patch) | |
| tree | d0ce8f61acbd8259492a41f39c3e9af83ae4cf7c /src | |
| parent | 166a205aeb4c595b40b8ffe4c7d745b13031e3b3 (diff) | |
Split out import generation
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java | 14 |
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 |
