diff options
author | Alex Klyubin <klyubin@google.com> | 2012-06-22 13:14:10 -0700 |
---|---|---|
committer | Alex Klyubin <klyubin@google.com> | 2012-06-22 13:14:10 -0700 |
commit | 524c023fb37b41e06b69f1b696100dd465acb353 (patch) | |
tree | 0753dd455e7f57aec2d07ed3a13642388e33d385 | |
parent | d0cddaf12d3ec4842cd81232ac3c718730f02b20 (diff) | |
download | dexmaker-524c023fb37b41e06b69f1b696100dd465acb353.tar.gz |
Fix a bug where AppDataDirGuesser picked a non-existent cache
directory which resulted in DexMaker failing to output files there.
The fix makes AppDataDirGuesser create the application's cache
directory if necessary.
This change originated in LittleMock r9.
-rw-r--r-- | src/main/java/com/google/dexmaker/AppDataDirGuesser.java | 17 | ||||
-rw-r--r-- | src/test/java/com/google/dexmaker/AppDataDirGuesserTest.java | 4 |
2 files changed, 18 insertions, 3 deletions
diff --git a/src/main/java/com/google/dexmaker/AppDataDirGuesser.java b/src/main/java/com/google/dexmaker/AppDataDirGuesser.java index 2492ea0..3252a1c 100644 --- a/src/main/java/com/google/dexmaker/AppDataDirGuesser.java +++ b/src/main/java/com/google/dexmaker/AppDataDirGuesser.java @@ -71,14 +71,25 @@ class AppDataDirGuesser { if (dash != -1) { end = dash; } - File file = new File("/data/data/" + potential.substring(start, end) + "/cache"); - if (isWriteableDirectory(file)) { - results.add(file); + String packageName = potential.substring(start, end); + File dataDir = new File("/data/data/" + packageName); + if (isWriteableDirectory(dataDir)) { + File cacheDir = new File(dataDir, "cache"); + // The cache directory might not exist -- create if necessary + if (fileOrDirExists(cacheDir) || cacheDir.mkdir()) { + if (isWriteableDirectory(cacheDir)) { + results.add(cacheDir); + } + } } } return results.toArray(new File[results.size()]); } + boolean fileOrDirExists(File file) { + return file.exists(); + } + boolean isWriteableDirectory(File file) { return file.isDirectory() && file.canWrite(); } diff --git a/src/test/java/com/google/dexmaker/AppDataDirGuesserTest.java b/src/test/java/com/google/dexmaker/AppDataDirGuesserTest.java index 5c92f34..36ac383 100644 --- a/src/test/java/com/google/dexmaker/AppDataDirGuesserTest.java +++ b/src/test/java/com/google/dexmaker/AppDataDirGuesserTest.java @@ -80,6 +80,10 @@ public final class AppDataDirGuesserTest extends TestCase { public boolean isWriteableDirectory(File file) { return !notWriteable.contains(file.getAbsolutePath()); } + @Override + boolean fileOrDirExists(File file) { + return true; + } }; File[] results = guesser.guessPath(path); assertNotNull("Null results for " + path, results); |