From 013265afb2432181de05a109fd8fe7823d8f3d69 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 16 Jan 2016 17:07:45 +0000 Subject: Add hacktastic support for primitive static methods in C# --- .../couscous/backends/csharp/CsharpSerializer.java | 30 +++++++++++++++++++--- 1 file changed, 26 insertions(+), 4 deletions(-) (limited to 'src/main/java/org/zwobble/couscous/backends/csharp/CsharpSerializer.java') 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() { + @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 -- cgit v1.2.3