summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEsteban de la Canal <estebandlc@google.com>2014-06-30 16:57:28 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2014-06-30 16:57:28 +0000
commit28542d6cd005ba872ace1ffcedbf92625139a20a (patch)
tree39fe96c0cb44f1c426b8c8a7ab011f4b3cfa43f2
parenta839624b0bd813c69477b5a4e2609cef291baf6d (diff)
parentd3cd00427f466118a994ace0a15b24b9df8f9515 (diff)
downloadidea-28542d6cd005ba872ace1ffcedbf92625139a20a.tar.gz
am d3cd0042: Merge "Fixes case where the cache is so out of date that a module is missing." into idea133 automerge: 85a1a7f
* commit 'd3cd00427f466118a994ace0a15b24b9df8f9515': Fixes case where the cache is so out of date that a module is missing.
-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 {