aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java')
-rw-r--r--src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java30
1 files changed, 26 insertions, 4 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 6dc7c34..275ae13 100644
--- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java
+++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java
@@ -117,10 +117,32 @@ public class CsharpSerializer implements NodeVisitor {
@Override
public void visit(MethodCallNode methodCall) {
- write(methodCall.getReceiver());
- writer.writeSymbol(".");
- writer.writeIdentifier(methodCall.getMethodName());
- writeArguments(methodCall.getArguments());
+ if (!writePrimitiveMethod(methodCall)) {
+ write(methodCall.getReceiver());
+ writer.writeSymbol(".");
+ writer.writeIdentifier(methodCall.getMethodName());
+ writeArguments(methodCall.getArguments());
+ }
+ }
+
+ private boolean writePrimitiveMethod(MethodCallNode methodCall) {
+ return methodCall.getReceiver().accept(new Receiver.Mapper<Boolean>() {
+ @Override
+ public Boolean visit(ExpressionNode receiver) {
+ return false;
+ }
+
+ @Override
+ public Boolean visit(TypeName receiver) {
+ // TODO: transform AST before serialisation instead of exposing write to CsharpPrimitiveMethods
+ return CsharpPrimitiveMethods.getPrimitiveStaticMethod(receiver, methodCall.getMethodName())
+ .map(generator -> {
+ generator.generate(methodCall.getArguments(), writer);
+ return true;
+ })
+ .orElse(false);
+ }
+ });
}
@Override