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 | |
| parent | ff26ed283385fbe32d08127e3ce91c23c937aa5f (diff) | |
Move naming classes into their own package
Diffstat (limited to 'src/main/java/org/zwobble/couscous/backends/naming')
4 files changed, 77 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()); + } + }); + } +} diff --git a/src/main/java/org/zwobble/couscous/backends/naming/Naming.java b/src/main/java/org/zwobble/couscous/backends/naming/Naming.java new file mode 100644 index 0000000..d63fd52 --- /dev/null +++ b/src/main/java/org/zwobble/couscous/backends/naming/Naming.java @@ -0,0 +1,15 @@ +package org.zwobble.couscous.backends.naming; + +import org.zwobble.couscous.ast.MethodSignature; + +public interface Naming { + static Naming signaturesContainSimpleNames() { + return new SignaturesContainSimpleNames(); + } + + static Naming noMangling() { + return new NoMangling(); + } + + String methodName(MethodSignature signature); +} diff --git a/src/main/java/org/zwobble/couscous/backends/naming/NoMangling.java b/src/main/java/org/zwobble/couscous/backends/naming/NoMangling.java new file mode 100644 index 0000000..7a45334 --- /dev/null +++ b/src/main/java/org/zwobble/couscous/backends/naming/NoMangling.java @@ -0,0 +1,10 @@ +package org.zwobble.couscous.backends.naming; + +import org.zwobble.couscous.ast.MethodSignature; + +public class NoMangling implements Naming { + @Override + public String methodName(MethodSignature signature) { + return signature.getName(); + } +} diff --git a/src/main/java/org/zwobble/couscous/backends/naming/SignaturesContainSimpleNames.java b/src/main/java/org/zwobble/couscous/backends/naming/SignaturesContainSimpleNames.java new file mode 100644 index 0000000..9f2a96d --- /dev/null +++ b/src/main/java/org/zwobble/couscous/backends/naming/SignaturesContainSimpleNames.java @@ -0,0 +1,10 @@ +package org.zwobble.couscous.backends.naming; + +import org.zwobble.couscous.ast.MethodSignature; + +public class SignaturesContainSimpleNames implements Naming { + @Override + public String methodName(MethodSignature signature) { + return Names.toUniqueName(signature); + } +} |
