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# --- .../backends/csharp/CsharpPrimitiveMethods.java | 42 ++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/main/java/org/zwobble/couscous/backends/csharp/CsharpPrimitiveMethods.java (limited to 'src/main/java/org/zwobble/couscous/backends/csharp/CsharpPrimitiveMethods.java') diff --git a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpPrimitiveMethods.java b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpPrimitiveMethods.java new file mode 100644 index 0000000..b53560d --- /dev/null +++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpPrimitiveMethods.java @@ -0,0 +1,42 @@ +package org.zwobble.couscous.backends.csharp; + +import com.google.common.collect.ImmutableMap; +import org.zwobble.couscous.ast.ExpressionNode; +import org.zwobble.couscous.ast.TypeName; +import org.zwobble.couscous.backends.SourceCodeWriter; +import org.zwobble.couscous.values.ObjectValues; + +import java.util.List; +import java.util.Map; +import java.util.Optional; + +public class CsharpPrimitiveMethods { + private static final Map STATIC_INT_METHODS = + ImmutableMap.builder() + + .put("parseInt", (arguments, writer) -> { + writer.writeIdentifier("int"); + writer.writeSymbol("."); + writer.writeIdentifier("Parse"); + writer.writeSymbol("("); + writer.writeIdentifier(CsharpSerializer.serialize(arguments.get(0), "")); + writer.writeSymbol(")"); + }) + + .build(); + + private static final Map> STATIC_METHODS = + ImmutableMap.>builder() + .put(ObjectValues.BOXED_INT, STATIC_INT_METHODS) + .build(); + + public static Optional getPrimitiveStaticMethod(TypeName type, String methodName) { + return Optional.ofNullable(STATIC_METHODS.get(type)) + .flatMap(methodsForType -> Optional.ofNullable(methodsForType.get(methodName))); + } + + @FunctionalInterface + public interface PrimitiveStaticMethodGenerator { + void generate(List arguments, SourceCodeWriter writer); + } +} -- cgit v1.2.3