aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java19
-rw-r--r--src/test/java/org/zwobble/couscous/tests/backends/csharp/CsharpSerializerTests.java17
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"));