Update client bundle result caching to track absent resources

Review at http://gwt-code-reviews.appspot.com/1466804


git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@10382 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/resources/ext/ResourceGeneratorUtil.java b/user/src/com/google/gwt/resources/ext/ResourceGeneratorUtil.java
index b66fe59..3d3442a 100644
--- a/user/src/com/google/gwt/resources/ext/ResourceGeneratorUtil.java
+++ b/user/src/com/google/gwt/resources/ext/ResourceGeneratorUtil.java
@@ -517,7 +517,7 @@
   /**
    * Get default list of resource Locators, in the default order.
    * 
-   * @param context
+   * @param genContext
    * @return an ordered array of Locator[]
    */
   private static Locator[] getDefaultLocators(GeneratorContext genContext) {
@@ -533,7 +533,7 @@
    * Get the current locale string.
    * 
    * @param logger
-   * @param context
+   * @param genContext
    * @return the current locale
    */
   private static String getLocale(TreeLogger logger, GeneratorContext genContext) {
@@ -614,7 +614,7 @@
       String resourceName, String locale) {
 
     URL toReturn = tryFindResource(locator, resourceName, locale);
-    if (toReturn != null && context != null) {
+    if (context != null) {
       ClientBundleRequirements reqs = context.getRequirements();
       if (reqs != null) {
         reqs.addResolvedResource(resourceName, toReturn);
diff --git a/user/src/com/google/gwt/resources/rebind/context/AbstractClientBundleGenerator.java b/user/src/com/google/gwt/resources/rebind/context/AbstractClientBundleGenerator.java
index c12ac45..489c3c5 100644
--- a/user/src/com/google/gwt/resources/rebind/context/AbstractClientBundleGenerator.java
+++ b/user/src/com/google/gwt/resources/rebind/context/AbstractClientBundleGenerator.java
@@ -335,7 +335,7 @@
     boolean useCache = false;
     if (checkPropertyCacheability(logger, generatorContext)
         && checkSourceTypeCacheability(logger, generatorContext)
-        && checkDependentResourceCacheability(logger, generatorContext, null)) {
+        && checkDependentResourceCacheability(logger, generatorContext)) {
       useCache = true;
     }
     
@@ -586,7 +586,7 @@
    * Check dependent resources for cacheability.
    */
   private boolean checkDependentResourceCacheability(TreeLogger logger,
-      GeneratorContextExt genContext, ResourceContext resourceContext) {
+      GeneratorContextExt genContext) {
 
     CachedRebindResult lastRebindResult = genContext.getCachedGeneratorResult();
 
@@ -608,9 +608,17 @@
     for (Entry<String, URL> entry : cachedResolvedResources.entrySet()) {
       String resourceName = entry.getKey();
       URL resolvedUrl = entry.getValue();
-      URL currentUrl = ResourceGeneratorUtil.tryFindResource(logger, genContext,
-          resourceContext, resourceName);
-      if (currentUrl == null || resolvedUrl == null
+      URL currentUrl =
+          ResourceGeneratorUtil.tryFindResource(logger, genContext, null, resourceName);
+
+      if (resolvedUrl == null) {
+        if (currentUrl == null) {
+          continue;
+        } else {
+          logger.log(TreeLogger.TRACE, "Found newly available dependent resource: " + resourceName);
+          return false;
+        }
+      } else if (currentUrl == null
           || !resolvedUrl.toExternalForm().equals(currentUrl.toExternalForm())) {
         logger.log(TreeLogger.TRACE,
             "Found dependent resource that has moved or no longer exists: " + resourceName);