aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/backends/naming/Names.java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-04-01 21:52:06 +0100
committerMichael Williamson <mike@zwobble.org>2016-04-01 21:52:06 +0100
commit9c61b7adad6e96149b1326cb90381206478310c3 (patch)
tree64d488e163e2b98d7fb0ef368420effc3a159b2f /src/main/java/org/zwobble/couscous/backends/naming/Names.java
parentff26ed283385fbe32d08127e3ce91c23c937aa5f (diff)
Move naming classes into their own package
Diffstat (limited to 'src/main/java/org/zwobble/couscous/backends/naming/Names.java')
-rw-r--r--src/main/java/org/zwobble/couscous/backends/naming/Names.java42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/main/java/org/zwobble/couscous/backends/naming/Names.java b/src/main/java/org/zwobble/couscous/backends/naming/Names.java
new file mode 100644
index 0000000..a547742
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/backends/naming/Names.java
@@ -0,0 +1,42 @@
+package org.zwobble.couscous.backends.naming;
+
+import com.google.common.base.Joiner;
+import com.google.common.collect.Iterables;
+import org.zwobble.couscous.ast.MethodSignature;
+import org.zwobble.couscous.types.*;
+
+import static com.google.common.collect.Iterables.transform;
+import static org.zwobble.couscous.util.ExtraLists.list;
+
+public class Names {
+ public static String toUniqueName(MethodSignature signature) {
+ return Joiner.on("__").join(Iterables.concat(
+ list(signature.getName()),
+ transform(signature.getArguments(), Names::typeToString),
+ list(typeToString(signature.getReturnType()))));
+ }
+
+ private static String typeToString(Type argument) {
+ return argument.accept(new Type.Visitor<String>() {
+ @Override
+ public String visit(ScalarType type) {
+ return type.getSimpleName();
+ }
+
+ @Override
+ public String visit(TypeParameter parameter) {
+ return typeToString(parameter.getDeclaringType()) + "_" + parameter.getName();
+ }
+
+ @Override
+ public String visit(ParameterizedType type) {
+ return typeToString(type.getRawType());
+ }
+
+ @Override
+ public String visit(BoundTypeParameter type) {
+ return typeToString(type.getParameter());
+ }
+ });
+ }
+}