diff options
3 files changed, 35 insertions, 8 deletions
diff --git a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpBackend.java b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpBackend.java index d69edf6..3b69341 100644 --- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpBackend.java +++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpBackend.java @@ -6,7 +6,6 @@ import com.google.common.io.Resources; import org.zwobble.couscous.Backend; import org.zwobble.couscous.ast.ClassNode; import org.zwobble.couscous.ast.MethodNode; -import org.zwobble.couscous.ast.ReturnNode; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -62,10 +61,6 @@ public class CsharpBackend implements Backend { } private String compileMethod(MethodNode method) { - ReturnNode returnNode = (ReturnNode) method.getBody().get(0); - return - "public static dynamic " + method.getName() + "() {" + - CsharpSerializer.serialize(returnNode, namespace) + - "}"; + return CsharpSerializer.serialize(method, namespace); } } 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 31a7b23..8f7e137 100644 --- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java +++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java @@ -155,8 +155,24 @@ public class CsharpSerializer implements NodeVisitor { } @Override - public void visit(MethodNode methodNode) { - throw new UnsupportedOperationException(); + public void visit(MethodNode method) { + writer.writeKeyword("internal"); + writer.writeSpace(); + writer.writeKeyword("static"); + writer.writeSpace(); + writer.writeKeyword("dynamic"); + writer.writeSpace(); + writer.writeIdentifier(method.getName()); + writer.writeSymbol("("); + writer.writeSymbol(")"); + writer.writeSpace(); + writer.writeSymbol("{"); + for (StatementNode statement : method.getBody()) { + writer.writeSymbol("\n "); + write(statement); + } + writer.writeSymbol("\n"); + writer.writeSymbol("}"); } @Override diff --git a/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java b/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java index 9425d55..51f4386 100644 --- a/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java +++ b/src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java @@ -1,6 +1,7 @@ package org.zwobble.couscous.tests.backends.csharp; import org.junit.Test; +import org.zwobble.couscous.ast.MethodNode; import org.zwobble.couscous.ast.Node; import org.zwobble.couscous.ast.TypeName; import org.zwobble.couscous.backends.csharp.CsharpSerializer; @@ -43,6 +44,21 @@ public class CsharpSerializerTests { assertEquals("return true;", output); } + @Test + public void methodHasDynamicReturnType() { + String output = serialize(MethodNode.staticMethod("nothing").build()); + assertEquals("internal static dynamic nothing() {\n}", output); + } + + @Test + public void methodHasSerializedBody() { + MethodNode method = MethodNode.staticMethod("nothing") + .statement(returns(literal(true))) + .build(); + String output = serialize(method); + assertEquals("internal static dynamic nothing() {\n return true;\n}", output); + } + private String serialize(Node node) { return CsharpSerializer.serialize(node, "Couscous"); } |
