diff options
Diffstat (limited to 'src/main/java/org/zwobble/couscous/backends/python')
4 files changed, 19 insertions, 14 deletions
diff --git a/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java b/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java index d2f89ba..cc2ec06 100644 --- a/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java +++ b/src/main/java/org/zwobble/couscous/backends/python/PrimitiveMethods.java @@ -22,6 +22,7 @@ import static org.zwobble.couscous.backends.python.ast.PythonBinaryOperation.pyt import static org.zwobble.couscous.backends.python.ast.PythonCallNode.pythonCall; import static org.zwobble.couscous.backends.python.ast.PythonGetSliceNode.pythonGetSlice; import static org.zwobble.couscous.backends.python.ast.PythonVariableReferenceNode.pythonVariableReference; +import static org.zwobble.couscous.util.ExtraLists.list; public class PrimitiveMethods { private static final Map<String, PrimitiveMethodGenerator> STRING_METHODS = @@ -30,7 +31,7 @@ public class PrimitiveMethods { .put("length", (receiver, arguments) -> pythonCall( pythonVariableReference("len"), - asList(receiver))) + list(receiver))) .put("substring", (receiver, arguments) -> pythonGetSlice(receiver, arguments)) @@ -51,7 +52,7 @@ public class PrimitiveMethods { ImmutableMap.Builder<String, PrimitiveMethodGenerator> methods = ImmutableMap.builder(); methods.put("toString", (receiver, arguments) -> - pythonCall(pythonVariableReference("str"), ImmutableList.of(receiver))); + pythonCall(pythonVariableReference("str"), list(receiver))); addOperation(methods, Operator.ADD.getMethodName(), "+"); addOperation(methods, Operator.SUBTRACT.getMethodName(), "-"); @@ -60,11 +61,11 @@ public class PrimitiveMethods { methods.put(Operator.DIVIDE.getMethodName(), (receiver, arguments) -> pythonCall( internalReference("_div_round_to_zero"), - asList(receiver, arguments.get(0)))); + list(receiver, arguments.get(0)))); methods.put(Operator.MOD.getMethodName(), (receiver, arguments) -> pythonCall( internalReference("_mod_round_to_zero"), - asList(receiver, arguments.get(0)))); + list(receiver, arguments.get(0)))); addOperation(methods, Operator.EQUALS.getMethodName(), "=="); addOperation(methods, Operator.NOT_EQUALS.getMethodName(), "!="); diff --git a/src/main/java/org/zwobble/couscous/backends/python/PythonBackend.java b/src/main/java/org/zwobble/couscous/backends/python/PythonBackend.java index f30beed..de36ed6 100644 --- a/src/main/java/org/zwobble/couscous/backends/python/PythonBackend.java +++ b/src/main/java/org/zwobble/couscous/backends/python/PythonBackend.java @@ -8,6 +8,7 @@ import java.nio.file.Path; import java.util.List; import java.util.stream.Stream; +import com.google.common.collect.ImmutableList; import org.zwobble.couscous.Backend; import org.zwobble.couscous.ast.ClassNode; @@ -16,9 +17,10 @@ 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; +import static org.zwobble.couscous.util.ExtraLists.list; public class PythonBackend implements Backend { - private static final List<String> RUNTIME_FILES = asList( + private static final List<String> RUNTIME_FILES = ImmutableList.of( "java.lang.Object", "java.lang.Boolean", "java.lang.Integer", @@ -63,7 +65,7 @@ public class PythonBackend implements Backend { Path path = destinationPathForModule(name); Files.createDirectories(path.getParent()); createPythonPackages(path.getParent()); - Files.write(path, asList(contents)); + Files.write(path, list(contents)); } private void createPythonPackages(Path packagePath) throws IOException { 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 104854c..96fc544 100644 --- a/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java +++ b/src/main/java/org/zwobble/couscous/backends/python/PythonCodeGenerator.java @@ -40,6 +40,7 @@ import static org.zwobble.couscous.backends.python.ast.PythonReturnNode.pythonRe import static org.zwobble.couscous.backends.python.ast.PythonStringLiteralNode.pythonStringLiteral; import static org.zwobble.couscous.backends.python.ast.PythonVariableReferenceNode.pythonVariableReference; import static org.zwobble.couscous.backends.python.ast.PythonWhileNode.pythonWhile; +import static org.zwobble.couscous.util.ExtraLists.list; public class PythonCodeGenerator { public static PythonModuleNode generateCode(ClassNode classNode) { @@ -47,7 +48,7 @@ public class PythonCodeGenerator { PythonImportNode internalsImport = pythonImport( importPathToRoot(classNode), - asList(pythonImportAlias("_couscous"))); + list(pythonImportAlias("_couscous"))); PythonFunctionDefinitionNode constructor = generateConstructor(classNode.getConstructor()); @@ -58,7 +59,7 @@ public class PythonCodeGenerator { PythonClassNode pythonClass = pythonClass( classNode.getSimpleName(), - ImmutableList.copyOf(Iterables.concat(asList(constructor), pythonMethods))); + ImmutableList.copyOf(Iterables.concat(list(constructor), pythonMethods))); return pythonModule(ImmutableList.copyOf(Iterators.concat( singletonIterator(pythonClass), @@ -70,7 +71,7 @@ public class PythonCodeGenerator { Set<TypeName> classes = findReferencedClasses(classNode); return classes.stream() .filter(name -> !name.equals(InternalCouscousValue.REF)) - .map(name -> pythonImport(importPathToRoot(classNode) + name.getQualifiedName(), asList(pythonImportAlias(name.getSimpleName())))); + .map(name -> pythonImport(importPathToRoot(classNode) + name.getQualifiedName(), list(pythonImportAlias(name.getSimpleName())))); } private static String importPathToRoot(ClassNode classNode) { @@ -131,7 +132,7 @@ public class PythonCodeGenerator { private static PythonFunctionDefinitionNode generateConstructor(ConstructorNode constructor) { Iterable<String> explicitArgumentNames = transform(constructor.getArguments(), argument -> argument.getName()); - Iterable<String> argumentNames = Iterables.concat(asList("self"), explicitArgumentNames); + Iterable<String> argumentNames = Iterables.concat(list("self"), explicitArgumentNames); List<PythonStatementNode> pythonBody = constructor.getBody().stream().map(PythonCodeGenerator::generateStatement).collect(Collectors.toList()); return pythonFunctionDefinition("__init__", ImmutableList.copyOf(argumentNames), new PythonBlock(pythonBody)); } @@ -139,7 +140,7 @@ public class PythonCodeGenerator { private static PythonFunctionDefinitionNode generateFunction(MethodNode method) { Iterable<String> explicitArgumentNames = transform(method.getArguments(), argument -> argument.getName()); Iterable<String> argumentNames = Iterables.concat( - method.isStatic() ? Collections.<String>emptyList() : asList("self"), + method.isStatic() ? Collections.<String>emptyList() : list("self"), explicitArgumentNames); List<PythonStatementNode> pythonBody = generateStatements(method.getBody()); return pythonFunctionDefinition(toName(method.signature()), ImmutableList.copyOf(argumentNames), new PythonBlock(pythonBody)); @@ -270,7 +271,7 @@ public class PythonCodeGenerator { PythonExpressionNode value = generateExpression(typeCoercion.getExpression()); if (isIntegerBox(typeCoercion)) { // TODO: replace with direct access to java.lang.Integer - return internalMethod("boxInt", asList(value)); + return internalMethod("boxInt", list(value)); } else if (isIntegerUnbox(typeCoercion)) { return pythonAttributeAccess(value, "_value"); } else { @@ -297,7 +298,7 @@ public class PythonCodeGenerator { public static String toName(MethodSignature signature) { return Joiner.on("__").join(Iterables.concat( - ImmutableList.of(signature.getName()), + list(signature.getName()), transform(signature.getArguments(), argument -> argument.getQualifiedName().replace('.', '_')))); } diff --git a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonBlock.java b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonBlock.java index 8bc7132..b1889a7 100644 --- a/src/main/java/org/zwobble/couscous/backends/python/ast/PythonBlock.java +++ b/src/main/java/org/zwobble/couscous/backends/python/ast/PythonBlock.java @@ -6,13 +6,14 @@ import java.util.List; import com.google.common.collect.ImmutableList; import static java.util.Arrays.asList; +import static org.zwobble.couscous.util.ExtraLists.list; public class PythonBlock implements Iterable<PythonStatementNode> { private final List<PythonStatementNode> statements; public PythonBlock(List<? extends PythonStatementNode> statements) { if (statements.isEmpty()) { - this.statements = asList(PythonPassNode.PASS); + this.statements = list(PythonPassNode.PASS); } else { this.statements = ImmutableList.copyOf(statements); } |
