aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/backends/csharp/CsharpPrimitiveMethods.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/zwobble/couscous/backends/csharp/CsharpPrimitiveMethods.java')
-rw-r--r--src/main/java/org/zwobble/couscous/backends/csharp/CsharpPrimitiveMethods.java42
1 files changed, 42 insertions, 0 deletions
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<String, PrimitiveStaticMethodGenerator> STATIC_INT_METHODS =
+ ImmutableMap.<String, PrimitiveStaticMethodGenerator>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<TypeName, Map<String, PrimitiveStaticMethodGenerator>> STATIC_METHODS =
+ ImmutableMap.<TypeName, Map<String, PrimitiveStaticMethodGenerator>>builder()
+ .put(ObjectValues.BOXED_INT, STATIC_INT_METHODS)
+ .build();
+
+ public static Optional<PrimitiveStaticMethodGenerator> 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<ExpressionNode> arguments, SourceCodeWriter writer);
+ }
+}