OSDN Git Service

Dynamically generated resources id were not used in id resolution.
authorXavier Ducrohet <xav@android.com>
Mon, 4 Apr 2011 20:39:54 +0000 (13:39 -0700)
committerXavier Ducrohet <xav@android.com>
Mon, 4 Apr 2011 20:39:54 +0000 (13:39 -0700)
Dynamic IDs are generated when requesting an int value from a
(type,name) pair where type==ResourceType.ID and the name doesn't
reference any existing ID (This is possible when IDs are declared inline
and the layout file has not been saved, for instance, so the R class
has not been regenerated yet).

There is a reverse method querying for a (type,name) pair based on
an integer. This methods was not looking for generated id and would
return null instead of the name associated with the generated ID.

Change-Id: I0bc4bc76a5157d56d06c5f4538c4fcc38f1bded7

eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/ProjectResources.java

index 7598da1..5b4bf38 100644 (file)
@@ -69,6 +69,7 @@ public class ProjectResources extends ResourceRepository {
      * layout files that are not saved yet).
      */
     private final Map<String, Integer> mDynamicIds = new HashMap<String, Integer>();
+    private final Map<Integer, String> mRevDynamicIds = new HashMap<Integer, String>();
     private int mDynamicSeed = DYNAMIC_ID_SEED_START;
 
     private final IProject mProject;
@@ -178,11 +179,19 @@ public class ProjectResources extends ResourceRepository {
      * @return a {@link Pair} of 2 strings { name, type } or null if the id could not be resolved
      */
     public Pair<ResourceType, String> resolveResourceId(int id) {
+        Pair<ResourceType, String> result = null;
         if (mResIdValueToNameMap != null) {
-            return mResIdValueToNameMap.get(id);
+            result = mResIdValueToNameMap.get(id);
         }
 
-        return null;
+        if (result == null) {
+            String name = mRevDynamicIds.get(id);
+            if (name != null) {
+                result = Pair.of(ResourceType.ID, name);
+            }
+        }
+
+        return result;
     }
 
     /**
@@ -233,6 +242,7 @@ public class ProjectResources extends ResourceRepository {
     public void resetDynamicIds() {
         synchronized (mDynamicIds) {
             mDynamicIds.clear();
+            mRevDynamicIds.clear();
             mDynamicSeed = DYNAMIC_ID_SEED_START;
         }
     }
@@ -257,6 +267,7 @@ public class ProjectResources extends ResourceRepository {
             if (value == null) {
                 value = new Integer(++mDynamicSeed);
                 mDynamicIds.put(name, value);
+                mRevDynamicIds.put(value, name);
             }
 
             return value;