From 44e4b877baea47c0465e1029bdbedc848381999f Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Mon, 5 Oct 2015 19:24:53 +0100 Subject: Remove duplication in writing with separator --- .../couscous/backends/python/PythonSerializer.java | 46 ++++++++++++---------- .../couscous/backends/python/PythonWriter.java | 6 +-- 2 files changed, 27 insertions(+), 25 deletions(-) (limited to 'src/main/java/org/zwobble/couscous/backends/python') 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 abab1bf..0bd71f7 100644 --- a/src/main/java/org/zwobble/couscous/backends/python/PythonSerializer.java +++ b/src/main/java/org/zwobble/couscous/backends/python/PythonSerializer.java @@ -1,5 +1,8 @@ package org.zwobble.couscous.backends.python; +import java.util.List; +import java.util.function.Consumer; + import org.zwobble.couscous.backends.python.ast.PythonAssignmentNode; import org.zwobble.couscous.backends.python.ast.PythonAttributeAccessNode; import org.zwobble.couscous.backends.python.ast.PythonBlock; @@ -18,6 +21,7 @@ import org.zwobble.couscous.backends.python.ast.PythonReturnNode; import org.zwobble.couscous.backends.python.ast.PythonStringLiteralNode; import org.zwobble.couscous.backends.python.ast.PythonVariableReferenceNode; import org.zwobble.couscous.backends.python.ast.visitors.PythonNodeVisitor; +import org.zwobble.couscous.util.Action; import static com.google.common.collect.Iterables.skip; @@ -85,14 +89,10 @@ public class PythonSerializer implements PythonNodeVisitor { public void visit(PythonCallNode call) { writeParenthesised(call.getCallee()); writer.writeSymbol("("); - if (!call.getArguments().isEmpty()) { - write(call.getArguments().get(0)); - for (val argumentName : skip(call.getArguments(), 1)) { - writer.writeSymbol(","); - writer.writeSpace(); - write(argumentName); - } - } + writeWithSeparator(call.getArguments(), this::write, () -> { + writer.writeSymbol(","); + writer.writeSpace(); + }); writer.writeSymbol(")"); } @@ -100,14 +100,9 @@ public class PythonSerializer implements PythonNodeVisitor { public void visit(PythonGetSliceNode getSlice) { writeParenthesised(getSlice.getReceiver()); writer.writeSymbol("["); - // TODO: remove this duplication - if (!getSlice.getArguments().isEmpty()) { - write(getSlice.getArguments().get(0)); - for (val argumentName : skip(getSlice.getArguments(), 1)) { - writer.writeSymbol(":"); - write(argumentName); - } - } + writeWithSeparator(getSlice.getArguments(), this::write, () -> { + writer.writeSymbol(":"); + }); writer.writeSymbol("]"); } @@ -172,16 +167,25 @@ public class PythonSerializer implements PythonNodeVisitor { } private void writeArgumentNames(PythonFunctionDefinitionNode functionDefinition) { - if (!functionDefinition.getArgumentNames().isEmpty()) { - writer.writeIdentifier(functionDefinition.getArgumentNames().get(0)); - for (val argumentName : skip(functionDefinition.getArgumentNames(), 1)) { + writeWithSeparator( + functionDefinition.getArgumentNames(), + writer::writeIdentifier, + () -> { writer.writeSymbol(","); writer.writeSpace(); - writer.writeIdentifier(argumentName); + }); + } + + private void writeWithSeparator(List values, Consumer writeValue, Action separator) { + if (!values.isEmpty()) { + writeValue.accept(values.get(0)); + for (val value : skip(values, 1)) { + separator.run(); + writeValue.accept(value); } } } - + @Override public void visit(PythonModuleNode module) { for (val statement : module.getStatements()) { diff --git a/src/main/java/org/zwobble/couscous/backends/python/PythonWriter.java b/src/main/java/org/zwobble/couscous/backends/python/PythonWriter.java index 781db71..da7445c 100644 --- a/src/main/java/org/zwobble/couscous/backends/python/PythonWriter.java +++ b/src/main/java/org/zwobble/couscous/backends/python/PythonWriter.java @@ -1,5 +1,7 @@ package org.zwobble.couscous.backends.python; +import org.zwobble.couscous.util.Action; + import com.google.common.base.Strings; public class PythonWriter { @@ -62,8 +64,4 @@ public class PythonWriter { builder.append("\n"); } } - - interface Action { - void run(); - } } -- cgit v1.2.3