From b332717af88b5b613d60ec72af820b696e7e2c7a Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 16 Jan 2016 16:15:51 +0000 Subject: Add support for custom constructors --- .../couscous/backends/csharp/CsharpSerializer.java | 31 +++++++++++++++++----- 1 file changed, 25 insertions(+), 6 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java index 861caec..ae898f5 100644 --- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java +++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java @@ -219,18 +219,22 @@ public class CsharpSerializer implements NodeVisitor { writeTypeReference(method.getReturnType()); writer.writeSpace(); writer.writeIdentifier(method.getName()); - writer.writeSymbol("("); - writer.writeWithSeparator( - method.getArguments(), - this::write, - () -> writer.writeSymbol(", ")); - writer.writeSymbol(")"); + writeFormalArguments(method.getArguments()); writer.startBlock(); writeAll(method.getBody()); writer.endBlock(); }); } + private void writeFormalArguments(List arguments) { + writer.writeSymbol("("); + writer.writeWithSeparator( + arguments, + this::write, + () -> writer.writeSymbol(", ")); + writer.writeSymbol(")"); + } + @Override public void visit(ConstructorNode constructorNode) { throw new UnsupportedOperationException(); @@ -266,6 +270,7 @@ public class CsharpSerializer implements NodeVisitor { writer.writeIdentifier(classNode.getSimpleName()); writer.startBlock(); writeAll(classNode.getFields()); + writeConstructor(classNode, classNode.getConstructor()); writeAll(classNode.getMethods()); writer.endBlock(); }); @@ -273,6 +278,20 @@ public class CsharpSerializer implements NodeVisitor { writer.endBlock(); } + private void writeConstructor(ClassNode classNode, ConstructorNode constructor) { + if (!constructor.equals(ConstructorNode.DEFAULT)) { + writer.writeStatement(() -> { + writer.writeKeyword("internal"); + writer.writeSpace(); + writer.writeIdentifier(classNode.getSimpleName()); + writeFormalArguments(constructor.getArguments()); + writer.startBlock(); + writeAll(constructor.getBody()); + writer.endBlock(); + }); + } + } + private void writeAll(List nodes) { for (Node method : nodes) { write(method); -- cgit v1.2.3