aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-03-31 15:28:17 +0100
committerMichael Williamson <mike@zwobble.org>2016-03-31 15:28:53 +0100
commit4a8a8993b6b959a2018f462de6fb9384ba15d8ea (patch)
tree21bce36f13deec60f7a443c62ee4bcc8a73606e2 /src
parenta69580c1771f02eaaeeda5f210f3d714e83a2c29 (diff)
Add interface for generating method names, use in C# backend
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/couscous/backends/Naming.java11
-rw-r--r--src/main/java/org/zwobble/couscous/backends/SignaturesContainFullyQualifiedNames.java10
-rw-r--r--src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java17
3 files changed, 29 insertions, 9 deletions
diff --git a/src/main/java/org/zwobble/couscous/backends/Naming.java b/src/main/java/org/zwobble/couscous/backends/Naming.java
new file mode 100644
index 0000000..1681efd
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/backends/Naming.java
@@ -0,0 +1,11 @@
+package org.zwobble.couscous.backends;
+
+import org.zwobble.couscous.ast.MethodSignature;
+
+public interface Naming {
+ static Naming signaturesContainsSimpleNames() {
+ return new SignaturesContainFullyQualifiedNames();
+ }
+
+ String methodName(MethodSignature signature);
+}
diff --git a/src/main/java/org/zwobble/couscous/backends/SignaturesContainFullyQualifiedNames.java b/src/main/java/org/zwobble/couscous/backends/SignaturesContainFullyQualifiedNames.java
new file mode 100644
index 0000000..f8b9faf
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/backends/SignaturesContainFullyQualifiedNames.java
@@ -0,0 +1,10 @@
+package org.zwobble.couscous.backends;
+
+import org.zwobble.couscous.ast.MethodSignature;
+
+public class SignaturesContainFullyQualifiedNames implements Naming {
+ @Override
+ public String methodName(MethodSignature signature) {
+ return Names.toUniqueName(signature);
+ }
+}
diff --git a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java
index 1b64293..5f00f85 100644
--- a/src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java
+++ b/src/main/java/org/zwobble/couscous/backends/csharp/CsharpCodeGenerator.java
@@ -1,9 +1,12 @@
package org.zwobble.couscous.backends.csharp;
import com.google.common.collect.ImmutableMap;
-import org.zwobble.couscous.ast.*;
+import org.zwobble.couscous.ast.ExpressionNode;
+import org.zwobble.couscous.ast.MethodCallNode;
+import org.zwobble.couscous.ast.Node;
+import org.zwobble.couscous.ast.Receiver;
import org.zwobble.couscous.ast.visitors.NodeTransformer;
-import org.zwobble.couscous.backends.Names;
+import org.zwobble.couscous.backends.Naming;
import org.zwobble.couscous.types.*;
import java.util.Map;
@@ -26,15 +29,15 @@ public class CsharpCodeGenerator {
private final NodeTransformer nodeTransformer;
public static Node generateCode(Node node, String namespace) {
- return new CsharpCodeGenerator(namespace).generateCode(node);
+ return new CsharpCodeGenerator(Naming.signaturesContainsSimpleNames(), namespace).generateCode(node);
}
- private CsharpCodeGenerator(String namespace) {
+ private CsharpCodeGenerator(Naming naming, String namespace) {
this.namespace = namespace;
nodeTransformer = NodeTransformer.builder()
.transformType(this::transformType)
.transformExpression(this::transformExpression)
- .transformMethodName(this::transformMethodName)
+ .transformMethodName(naming::methodName)
.build();
}
@@ -78,10 +81,6 @@ public class CsharpCodeGenerator {
});
}
- private String transformMethodName(MethodSignature signature) {
- return Names.toUniqueName(signature);
- }
-
private Optional<ExpressionNode> transformExpression(ExpressionNode expression) {
return tryCast(MethodCallNode.class, expression)
.flatMap(this::transformMethodCall);