aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/backends
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-02-28 14:14:47 +0000
committerMichael Williamson <mike@zwobble.org>2016-02-28 14:16:16 +0000
commit74c98ef82b94abe7fe7548766471b8e43c149504 (patch)
tree075d6b370677cdba9946e1dcafada6fd2367e5ef /src/main/java/org/zwobble/couscous/backends
parent28a122e74fa8f76da97625d1581e69afee835b7c (diff)
C#: Write super types
Diffstat (limited to 'src/main/java/org/zwobble/couscous/backends')
-rw-r--r--src/main/java/org/zwobble/couscous/backends/SourceCodeWriter.java15
-rw-r--r--src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java16
2 files changed, 23 insertions, 8 deletions
diff --git a/src/main/java/org/zwobble/couscous/backends/SourceCodeWriter.java b/src/main/java/org/zwobble/couscous/backends/SourceCodeWriter.java
index 301bb61..3908f72 100644
--- a/src/main/java/org/zwobble/couscous/backends/SourceCodeWriter.java
+++ b/src/main/java/org/zwobble/couscous/backends/SourceCodeWriter.java
@@ -3,11 +3,9 @@ package org.zwobble.couscous.backends;
import com.google.common.base.Strings;
import org.zwobble.couscous.util.Action;
-import java.util.List;
+import java.util.Iterator;
import java.util.function.Consumer;
-import static com.google.common.collect.Iterables.skip;
-
public class SourceCodeWriter {
public interface WriterAction {
void run(SourceCodeWriter writer);
@@ -95,12 +93,13 @@ public class SourceCodeWriter {
action.run(this);
}
- public <T> void writeWithSeparator(List<T> values, Consumer<T> writeValue, Action separator) {
- if (!values.isEmpty()) {
- writeValue.accept(values.get(0));
- for (T value : skip(values, 1)) {
+ public <T> void writeWithSeparator(Iterable<T> values, Consumer<T> writeValue, Action separator) {
+ Iterator<T> iterator = values.iterator();
+ if (iterator.hasNext()) {
+ writeValue.accept(iterator.next());
+ while(iterator.hasNext()) {
separator.run();
- writeValue.accept(value);
+ writeValue.accept(iterator.next());
}
}
}
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 8a92a51..a3479fa 100644
--- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java
+++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java
@@ -337,6 +337,7 @@ public class CsharpSerializer implements NodeVisitor {
writer.writeKeyword(keyword);
writer.writeSpace();
writer.writeIdentifier(node.getName().getSimpleName());
+ writeSuperTypes(node);
writer.startBlock();
writeBody.run();
writer.endBlock();
@@ -346,6 +347,21 @@ public class CsharpSerializer implements NodeVisitor {
});
}
+ private void writeSuperTypes(TypeNode node) {
+ if (!node.getSuperTypes().isEmpty()) {
+ writer.writeSpace();
+ writer.writeSymbol(":");
+ writer.writeSpace();
+ writer.writeWithSeparator(
+ node.getSuperTypes(),
+ this::writeTypeReference,
+ () -> {
+ writer.writeSymbol(",");
+ writer.writeSpace();
+ });
+ }
+ }
+
private void writeStaticConstructor(ClassNode classNode) {
if (!classNode.getStaticConstructor().isEmpty()) {
writer.writeStatement(() -> {