aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-01-16 16:15:51 +0000
committerMichael Williamson <mike@zwobble.org>2016-01-16 16:15:51 +0000
commitb332717af88b5b613d60ec72af820b696e7e2c7a (patch)
tree058eee425567060eb456935711140aa6e232244b /src/main/java
parente886b0ddb09f1bc247858c3ff5405651c66f0ae8 (diff)
Add support for custom constructors
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java31
1 files changed, 25 insertions, 6 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 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<FormalArgumentNode> 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<? extends Node> nodes) {
for (Node method : nodes) {
write(method);