diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-04-10 20:50:37 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-04-10 20:50:37 +0100 |
| commit | 58de7ebb1744bc77f48c1f64645e3a611d1280ac (patch) | |
| tree | ca0d412cb6be27d4055e16e009f882e8bae61b88 | |
| parent | 0dde3d8022966762c090687b6945c496eb8a168c (diff) | |
Write type parameters for interface methods
| -rw-r--r-- | src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java | 19 | ||||
| -rw-r--r-- | src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java | 17 |
2 files changed, 27 insertions, 9 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 64566b4..4fab81b 100644 --- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java +++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java @@ -398,15 +398,19 @@ public class CsharpSerializer implements NodeVisitor { writer.writeKeyword("static"); writer.writeSpace(); } - writeTypeReference(method.getReturnType()); - writer.writeSpace(); - writer.writeIdentifier(method.getName()); - writeFormalTypeParameters(method.getTypeParameters()); - writeFormalArguments(method.getArguments()); + writeSignature(method); writeBlock(method.getBody().get()); }); } + private void writeSignature(MethodNode method) { + writeTypeReference(method.getReturnType()); + writer.writeSpace(); + writer.writeIdentifier(method.getName()); + writeFormalTypeParameters(method.getTypeParameters()); + writeFormalArguments(method.getArguments()); + } + private void writeFormalTypeParameters(List<FormalTypeParameterNode> typeParameters) { if (!typeParameters.isEmpty()) { writer.writeSymbol("<"); @@ -457,10 +461,7 @@ public class CsharpSerializer implements NodeVisitor { writeType(interfaceNode, "interface", () -> { interfaceNode.getMethods().forEach(method -> { writer.writeStatement(() -> { - writeTypeReference(method.getReturnType()); - writer.writeSpace(); - writer.writeIdentifier(method.getName()); - writeFormalArguments(method.getArguments()); + writeSignature(method); writer.writeSymbol(";"); }); }); 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 991ec79..d7cce40 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 @@ -492,6 +492,23 @@ public class CsharpSerializerTests { } @Test + public void interfaceWithMethodWithTypeParameters() { + MethodNode method = MethodNode.staticMethod("nothing") + .typeParameter(formalTypeParameter(Identifiers.method(Identifiers.forType("com.Example.example"), "nothing"), "T")) + .typeParameter(formalTypeParameter(Identifiers.method(Identifiers.forType("com.Example.example"), "nothing"), "U")) + .returns(ScalarType.of("void")) + .build(); + + Node node = new ClassNodeBuilder(ScalarType.of("com.example.Example")) + .method(method) + .buildInterface(); + + String output = serialize(node); + + assertEquals("namespace com.example {\n internal interface Example {\n void nothing<T, U>();\n }\n}\n", output); + } + + @Test public void enumWithSimpleValues() { Node node = declareEnum(ScalarType.of("com.example.Example"), list("ONE", "TWO")); |
