From 1d80de2bb51d053bf072c991e5c8788a3e64403b Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Mon, 29 Aug 2016 15:44:57 +0100 Subject: Write arrays as native C# arrays --- .../backends/csharp/CsharpCodeGenerator.java | 1 + .../couscous/backends/csharp/CsharpSerializer.java | 20 ++++++++++++++------ .../tests/backends/csharp/CsharpSerializerTests.java | 6 ++++++ 3 files changed, 21 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java index 2245782..3fccce9 100644 --- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java +++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java @@ -25,6 +25,7 @@ public class CsharpCodeGenerator { .put(Types.BOXED_BOOLEAN, ScalarType.of("bool")) .put(Types.CLASS, ScalarType.of("System.Type")) .put(Types.VOID, ScalarType.of("void")) + .put(Types.ARRAY, Types.ARRAY) .build(); private final String 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 3e21f1b..4ddeb7c 100644 --- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java +++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java @@ -20,6 +20,7 @@ import java.util.function.Function; import static java.util.Arrays.asList; import static org.zwobble.couscous.util.ExtraIterables.lazyFilter; +import static org.zwobble.couscous.util.ExtraIterables.only; import static org.zwobble.couscous.util.ExtraLists.list; import static org.zwobble.couscous.util.ExtraSets.set; @@ -686,12 +687,19 @@ public class CsharpSerializer { @Override public Void visit(ParameterizedType type) { - writeTypeReference(type.getRawType()); - writer.writeSymbol("<"); - writer.writeCommaSeparated( - type.getParameters(), - parameter -> writeTypeReference(parameter)); - writer.writeSymbol(">"); + if (type.getRawType().equals(Types.ARRAY)) { + writeTypeReference(only(type.getParameters())); + writer.writeSymbol("["); + writer.writeSymbol("]"); + } else { + writeTypeReference(type.getRawType()); + writer.writeSymbol("<"); + writer.writeCommaSeparated( + type.getParameters(), + parameter -> writeTypeReference(parameter)); + writer.writeSymbol(">"); + } + return null; } 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 e5ddb02..636b214 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 @@ -600,6 +600,12 @@ public class CsharpSerializerTests { assertEquals("namespace com.example {\n internal enum Example {\n ONE, TWO\n }\n}\n", output); } + @Test + public void arrayTypeUsesSquareBrackets() { + String output = serialize(formalArg(var(TestIds.ANY_ID, "x", Types.array(ScalarType.of("string"))))); + assertEquals("string[] x", output); + } + private String serialize(Node node) { return CsharpSerializer.serialize(node); } -- cgit v1.2.3