diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-04-01 21:52:06 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-04-01 21:52:06 +0100 |
| commit | 9c61b7adad6e96149b1326cb90381206478310c3 (patch) | |
| tree | 64d488e163e2b98d7fb0ef368420effc3a159b2f /src/main/java/org/zwobble/couscous/backends/naming/Names.java | |
| parent | ff26ed283385fbe32d08127e3ce91c23c937aa5f (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.java | 42 |
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()); + } + }); + } +} |
