From 9c61b7adad6e96149b1326cb90381206478310c3 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 1 Apr 2016 21:52:06 +0100 Subject: Move naming classes into their own package --- .../zwobble/couscous/backends/naming/Names.java | 42 ++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/main/java/org/zwobble/couscous/backends/naming/Names.java (limited to 'src/main/java/org/zwobble/couscous/backends/naming/Names.java') 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() { + @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()); + } + }); + } +} -- cgit v1.2.3