diff options
author | Esteban de la Canal <estebandlc@google.com> | 2014-06-27 17:03:55 -0700 |
---|---|---|
committer | Esteban de la Canal <estebandlc@google.com> | 2014-06-27 17:03:55 -0700 |
commit | ffcbfd09cb452061850d70dc9e70a13da25e351c (patch) | |
tree | e3a6e10a97f9a1bafd73ca596ce6eccf6c72e764 | |
parent | c13aef8d2c30e8b501d228a16113c057423d5051 (diff) | |
download | idea-ffcbfd09cb452061850d70dc9e70a13da25e351c.tar.gz |
Fixes case where the cache is so out of date that a module is missing.
If a module shows up in the IDE for which we don't have saved data, we perform a full sync.
Change-Id: Ia4863188d66d974d217c5ec28bdd1ceb01f6c6df
-rw-r--r-- | android/src/com/android/tools/idea/gradle/project/AndroidGradleProjectData.java | 15 | ||||
-rw-r--r-- | android/testSrc/com/android/tools/idea/gradle/project/AndroidGradleProjectDataTest.java | 9 |
2 files changed, 18 insertions, 6 deletions
diff --git a/android/src/com/android/tools/idea/gradle/project/AndroidGradleProjectData.java b/android/src/com/android/tools/idea/gradle/project/AndroidGradleProjectData.java index e160750f544..c1d1b8fc3bf 100644 --- a/android/src/com/android/tools/idea/gradle/project/AndroidGradleProjectData.java +++ b/android/src/com/android/tools/idea/gradle/project/AndroidGradleProjectData.java @@ -224,9 +224,10 @@ public class AndroidGradleProjectData implements Serializable { try { AndroidGradleProjectData data = (AndroidGradleProjectData)ois.readObject(); if (data.validate(rootDirPath)) { - data.applyTo(project); - PostProjectSetupTasksExecutor.getInstance(project).onProjectRestoreFromDisk(); - return true; + if (data.applyTo(project)) { + PostProjectSetupTasksExecutor.getInstance(project).onProjectRestoreFromDisk(); + return true; + } } } finally { @@ -414,10 +415,14 @@ public class AndroidGradleProjectData implements Serializable { * @param project the project to apply the data to. */ @VisibleForTesting - public void applyTo(Project project) { + public boolean applyTo(Project project) { final Module[] modules = ModuleManager.getInstance(project).getModules(); for (Module module : modules) { ModuleData data = myData.get(module.getName()); + // If no data is found, the cache doesn't match the project structure and we should resync. + if (data == null) { + return false; + } AndroidFacet androidFacet = AndroidFacet.getInstance(module); if (androidFacet != null && module.getModuleFile() != null) { @@ -440,6 +445,8 @@ public class AndroidGradleProjectData implements Serializable { } GradleSyncState syncState = GradleSyncState.getInstance(project); syncState.setLastGradleSyncTimestamp(myLastGradleSyncTimestamp); + + return true; } /** diff --git a/android/testSrc/com/android/tools/idea/gradle/project/AndroidGradleProjectDataTest.java b/android/testSrc/com/android/tools/idea/gradle/project/AndroidGradleProjectDataTest.java index 0a417f542f6..260cf8e1abc 100644 --- a/android/testSrc/com/android/tools/idea/gradle/project/AndroidGradleProjectDataTest.java +++ b/android/testSrc/com/android/tools/idea/gradle/project/AndroidGradleProjectDataTest.java @@ -164,7 +164,6 @@ public class AndroidGradleProjectDataTest extends AndroidGradleTestCase { Map<String, AndroidGradleProjectData.ModuleData> modules = data.getModuleData(); assertEquals(3, modules.size()); - AndroidGradleProjectData.ModuleData moduleData = modules.get(myAndroidFacet.getModule().getName()); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(outputStream); @@ -178,9 +177,15 @@ public class AndroidGradleProjectDataTest extends AndroidGradleTestCase { // Clear the sync state to make sure we set it correctly. syncState.setLastGradleSyncTimestamp(-1L); - newData.applyTo(project); + assertTrue(newData.applyTo(project)); assertEquals(previousSyncTime, syncState.getLastGradleSyncTimestamp()); + + // Test applying without a module. + String moduleName = myAndroidFacet.getModule().getName(); + Map<String, AndroidGradleProjectData.ModuleData> newModules = newData.getModuleData(); + newModules.remove(moduleName); + assertFalse(newData.applyTo(project)); } interface MyInterface { |