Avoid making long filesystem keys

Concatenating several hashes together can make a really long filename,
so instead simply hash all the items together (after all a hash function
is a compression function) without fear of collision.

Change-Id: I9221d20fe835cc1b50e82cd302c41ba48258750a
diff --git a/src/vogar/Md5Cache.java b/src/vogar/Md5Cache.java
index 6aff6c5..a1ad389 100644
--- a/src/vogar/Md5Cache.java
+++ b/src/vogar/Md5Cache.java
@@ -125,8 +125,13 @@
     /**
      * Returns a key corresponding to the MD5ed contents of the element.
      */
-    public String makeKey(String element) {
-        return keyPrefix + "-" + md5(element);
+    public String makeKey(String... elements) {
+        StringBuilder sb = new StringBuilder();
+        for (String element : elements) {
+          sb.append(element);
+          sb.append('|');
+        }
+        return keyPrefix + "-" + md5(sb.toString());
     }
 
     /**
diff --git a/src/vogar/android/JackDexTask.java b/src/vogar/android/JackDexTask.java
index e427807..0af03d6 100644
--- a/src/vogar/android/JackDexTask.java
+++ b/src/vogar/android/JackDexTask.java
@@ -77,11 +77,8 @@
             // classpathSubKey and do not cache.
 
             // cacheKey includes all the arguments that could affect the output.
-            cacheKey =
-                jackCache.makeKey(inputFile) +
-                classpathSubKey +
-                jackCache.makeKey(run.language.toString()) +
-                jackCache.makeKey(Boolean.toString(run.debugging));
+            cacheKey = jackCache.makeKey(inputFile.toString(), classpathSubKey,
+                run.language.toString(), Boolean.toString(run.debugging));
 
             if (jackCache.getFromCache(localDex, cacheKey)) {
                 run.log.verbose("JackDexTask: Obtained " + localDex + " from jackCache");