diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-01-16 15:59:34 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-01-16 15:59:34 +0000 |
| commit | bf5edcdb86ea8a659e35662902c6f98f9b457c9b (patch) | |
| tree | bb89d9a1697aa824af11b299a526c0189348470c /src | |
| parent | 16a0f4c3ef8fdb8cb25c07e7238f17fc9d3e18fa (diff) | |
Add this and field reference serialization to C# backend
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java | 24 | ||||
| -rw-r--r-- | src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java | 18 |
2 files changed, 35 insertions, 7 deletions
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 e66d114..fd7f953 100644 --- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java +++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java @@ -88,7 +88,7 @@ public class CsharpSerializer implements NodeVisitor { @Override public void visit(ThisReferenceNode reference) { - throw new UnsupportedOperationException(); + writer.writeKeyword("this"); } @Override @@ -231,7 +231,14 @@ public class CsharpSerializer implements NodeVisitor { @Override public void visit(FieldDeclarationNode declaration) { - throw new UnsupportedOperationException(); + writer.writeStatement(() -> { + writer.writeKeyword("internal"); + writer.writeSpace(); + writeTypeReference(declaration.getType()); + writer.writeSpace(); + writer.writeIdentifier(declaration.getName()); + writer.writeSymbol(";"); + }); } @Override @@ -251,17 +258,20 @@ public class CsharpSerializer implements NodeVisitor { writer.writeSpace(); writer.writeIdentifier(classNode.getSimpleName()); writer.startBlock(); - - for (MethodNode method : classNode.getMethods()) { - write(method); - } - + writeAll(classNode.getFields()); + writeAll(classNode.getMethods()); writer.endBlock(); }); writer.endBlock(); } + private void writeAll(List<? extends Node> nodes) { + for (Node method : nodes) { + write(method); + } + } + private void writeTypeReference(TypeName value) { // TODO: process the nodes before serialization if (PRIMITIVES.containsKey(value)) { 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 95696c7..8c3162b 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 @@ -14,6 +14,7 @@ import static org.zwobble.couscous.ast.MethodCallNode.methodCall; import static org.zwobble.couscous.ast.MethodCallNode.staticMethodCall; import static org.zwobble.couscous.ast.ReturnNode.returns; import static org.zwobble.couscous.ast.TernaryConditionalNode.ternaryConditional; +import static org.zwobble.couscous.ast.ThisReferenceNode.thisReference; import static org.zwobble.couscous.ast.VariableDeclaration.var; import static org.zwobble.couscous.ast.VariableReferenceNode.reference; import static org.zwobble.couscous.util.ExtraLists.list; @@ -53,6 +54,12 @@ public class CsharpSerializerTests { } @Test + public void thisReferenceUsesThisKeyword() { + String output = serialize(thisReference(TypeName.of("X"))); + assertEquals("this", output); + } + + @Test public void ternaryConditionalWritesConditionAndBranches() { String output = serialize(ternaryConditional(literal(true), literal(1), literal(2))); assertEquals("true ? 1 : 2", output); @@ -173,6 +180,17 @@ public class CsharpSerializerTests { assertEquals("namespace Couscous.com.example {\n internal class Example {\n }\n}\n", output); } + @Test + public void classWithFields() { + ClassNode classNode = ClassNode.builder("com.example.Example") + .field("x", TypeName.of("X")) + .build(); + + String output = serialize(classNode); + + assertEquals("namespace Couscous.com.example {\n internal class Example {\n internal Couscous.X x;\n }\n}\n", output); + } + private String serialize(Node node) { return CsharpSerializer.serialize(node, "Couscous"); } |
