summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEsteban de la Canal <estebandlc@google.com>2014-06-27 17:03:55 -0700
committerEsteban de la Canal <estebandlc@google.com>2014-06-27 17:03:55 -0700
commitffcbfd09cb452061850d70dc9e70a13da25e351c (patch)
treee3a6e10a97f9a1bafd73ca596ce6eccf6c72e764
parentc13aef8d2c30e8b501d228a16113c057423d5051 (diff)
downloadidea-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.java15
-rw-r--r--android/testSrc/com/android/tools/idea/gradle/project/AndroidGradleProjectDataTest.java9
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 {