aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Norbye <tnorbye@google.com>2012-04-19 14:32:31 -0700
committerTor Norbye <tnorbye@google.com>2012-04-19 14:34:28 -0700
commitb986c2cf24a2542c220f8486cc8546312da3a9fa (patch)
tree0d8058ed2d9f67d92b14ebca3c68927668763a20
parent1f59a8c5333ad020b391dd9d6d065a7ec51164d1 (diff)
downloadsdk-b986c2cf24a2542c220f8486cc8546312da3a9fa.zip
sdk-b986c2cf24a2542c220f8486cc8546312da3a9fa.tar.gz
sdk-b986c2cf24a2542c220f8486cc8546312da3a9fa.tar.bz2
Work around initialization bugs
This bug fixes some bugs related to resource initialization. Note that these are probably not fixing the root cause, but they are making the symptoms less severe. I happened to run into a scenario where I triggered the problem (the editor came up blank, see issue http://code.google.com/p/android/issues/detail?id=21935 for example), and I verified that reopening the editor after these fixes worked. How the resource repository came to be empty to begin with is not clear. In addition to issue 21935 this workaround may also help with issue http://code.google.com/p/android/issues/detail?id=17522 Change-Id: I0166e8c58c790888d53c46ca03348a0d8edc75b0
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/ResourceManager.java9
-rw-r--r--ide_common/src/com/android/ide/common/resources/ResourceRepository.java12
2 files changed, 19 insertions, 2 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/ResourceManager.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/ResourceManager.java
index edae923..bfa942d 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/ResourceManager.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/ResourceManager.java
@@ -155,7 +155,14 @@ public final class ResourceManager {
*/
public ProjectResources getProjectResources(IProject project) {
synchronized (mMap) {
- return mMap.get(project);
+ ProjectResources resources = mMap.get(project);
+
+ if (resources == null) {
+ resources = new ProjectResources(project);
+ mMap.put(project, resources);
+ }
+
+ return resources;
}
}
diff --git a/ide_common/src/com/android/ide/common/resources/ResourceRepository.java b/ide_common/src/com/android/ide/common/resources/ResourceRepository.java
index 87d729d..3040dc0 100644
--- a/ide_common/src/com/android/ide/common/resources/ResourceRepository.java
+++ b/ide_common/src/com/android/ide/common/resources/ResourceRepository.java
@@ -355,7 +355,17 @@ public abstract class ResourceRepository {
* @return the {@link ResourceFolder} or null if it was not found.
*/
public ResourceFolder getResourceFolder(IAbstractFolder folder) {
- for (List<ResourceFolder> list : mFolderMap.values()) {
+ Collection<List<ResourceFolder>> values = mFolderMap.values();
+
+ if (values.isEmpty()) { // This shouldn't be necessary, but has been observed
+ try {
+ loadResources(folder.getParentFolder());
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ for (List<ResourceFolder> list : values) {
for (ResourceFolder resFolder : list) {
IAbstractFolder wrapper = resFolder.getFolder();
if (wrapper.equals(folder)) {