diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-02-28 14:01:30 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-02-28 14:16:06 +0000 |
| commit | 7d7da6b53bc79e24aa1a3ae9fe476181b3814c27 (patch) | |
| tree | ab6d47aaf1a71be6e738100bff3fea031a0c3cf2 /src/main/java/org | |
| parent | d8abd198a39e7c5ba6df1b04359288d833913cf8 (diff) | |
Extract writeType
Diffstat (limited to 'src/main/java/org')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java | 41 |
1 files changed, 16 insertions, 25 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 81c5b78..c8b4254 100644 --- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java +++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java @@ -3,6 +3,7 @@ package org.zwobble.couscous.backends.csharp; import org.zwobble.couscous.ast.*; import org.zwobble.couscous.ast.visitors.NodeVisitor; import org.zwobble.couscous.backends.SourceCodeWriter; +import org.zwobble.couscous.util.Action; import org.zwobble.couscous.values.PrimitiveValueVisitor; import org.zwobble.couscous.values.UnitValue; @@ -301,45 +302,35 @@ public class CsharpSerializer implements NodeVisitor { @Override public void visit(ClassNode classNode) { - writer.writeStatement(() -> { - writer.writeKeyword("namespace"); - writer.writeSpace(); - writer.writeIdentifier(classNode.getName().getPackage().get()); - writer.startBlock(); - writer.writeStatement(() -> { - writer.writeKeyword("internal"); - writer.writeSpace(); - writer.writeKeyword("class"); - writer.writeSpace(); - writer.writeIdentifier(classNode.getSimpleName()); - writer.startBlock(); - writeAll(classNode.getFields()); - writeStaticConstructor(classNode); - writeConstructor(classNode, classNode.getConstructor()); - writeAll(classNode.getMethods()); - writer.endBlock(); - }); - - writer.endBlock(); + writeType(classNode, "class", () -> { + writeAll(classNode.getFields()); + writeStaticConstructor(classNode); + writeConstructor(classNode, classNode.getConstructor()); + writeAll(classNode.getMethods()); }); } @Override public void visit(InterfaceNode interfaceNode) { - // TODO: factor out duplication with visit(ClassNode) + writeType(interfaceNode, "interface", () -> { + writeAll(interfaceNode.getMethods()); + }); + } + + private void writeType(TypeNode node, String keyword, Action writeBody) { writer.writeStatement(() -> { writer.writeKeyword("namespace"); writer.writeSpace(); - writer.writeIdentifier(interfaceNode.getName().getPackage().get()); + writer.writeIdentifier(node.getName().getPackage().get()); writer.startBlock(); writer.writeStatement(() -> { writer.writeKeyword("internal"); writer.writeSpace(); - writer.writeKeyword("interface"); + writer.writeKeyword(keyword); writer.writeSpace(); - writer.writeIdentifier(interfaceNode.getName().getSimpleName()); + writer.writeIdentifier(node.getName().getSimpleName()); writer.startBlock(); - writeAll(interfaceNode.getMethods()); + writeBody.run(); writer.endBlock(); }); |
