Removes recently added ImageResource.isStandalone.

Instance of adding isStandalone to ImageResource (a breaking change)
introduces subtype of ImageResourcePrototype to differentiate between
standalone and bundled images.

Change-Id: Ieeec29560694c548208f15c85e2e8874df4805c1
diff --git a/user/src/com/google/gwt/resources/client/ImageResource.java b/user/src/com/google/gwt/resources/client/ImageResource.java
index f1885ed..5f72fb8 100644
--- a/user/src/com/google/gwt/resources/client/ImageResource.java
+++ b/user/src/com/google/gwt/resources/client/ImageResource.java
@@ -147,10 +147,4 @@
    * Return <code>true</code> if the image contains multiple frames.
    */
   boolean isAnimated();
-
-  /**
-   * Returns <code>true</code> if the image is standalone, <code>false</code>
-   * if it's a region of a composite image.
-   */
-  boolean isStandalone();
 }
diff --git a/user/src/com/google/gwt/resources/client/impl/ImageResourcePrototype.java b/user/src/com/google/gwt/resources/client/impl/ImageResourcePrototype.java
index ffabd21..5d93cae 100644
--- a/user/src/com/google/gwt/resources/client/impl/ImageResourcePrototype.java
+++ b/user/src/com/google/gwt/resources/client/impl/ImageResourcePrototype.java
@@ -24,9 +24,18 @@
  */
 public class ImageResourcePrototype implements ImageResource {
 
+  /**
+   * Marker class for bundled {@code ImageResourcePrototype}.
+   */
+  public static class Bundle extends ImageResourcePrototype {
+    public Bundle(String name, SafeUri url, int left, int top, int width, int height,
+        boolean animated, boolean lossy) {
+      super(name, url, left, top, width, height, animated, lossy);
+    }
+  }
+
   private final boolean animated;
   private final boolean lossy;
-  private final boolean standalone;
   private final String name;
   private final SafeUri url;
   private final int left;
@@ -38,7 +47,7 @@
    * Only called by generated code.
    */
   public ImageResourcePrototype(String name, SafeUri url, int left, int top, int width, int height,
-      boolean animated, boolean lossy, boolean standalone) {
+      boolean animated, boolean lossy) {
     this.name = name;
     this.left = left;
     this.top = top;
@@ -47,7 +56,6 @@
     this.url = url;
     this.animated = animated;
     this.lossy = lossy;
-    this.standalone = standalone;
   }
 
   /**
@@ -97,9 +105,4 @@
   public boolean isLossy() {
     return lossy;
   }
-
-  @Override
-  public boolean isStandalone() {
-    return standalone;
-  }
 }
diff --git a/user/src/com/google/gwt/resources/rg/ImageResourceGenerator.java b/user/src/com/google/gwt/resources/rg/ImageResourceGenerator.java
index 9e25e69..a5addee 100644
--- a/user/src/com/google/gwt/resources/rg/ImageResourceGenerator.java
+++ b/user/src/com/google/gwt/resources/rg/ImageResourceGenerator.java
@@ -72,8 +72,8 @@
     }
 
     @Override
-    public boolean isStandalone() {
-      return false;
+    public Class<?> getResourceType() {
+      return ImageResourcePrototype.Bundle.class;
     }
 
     public LocalizedImage addImage(TreeLogger logger, ResourceContext context,
@@ -259,7 +259,7 @@
     protected String normalContentsFieldName;
     protected String rtlContentsFieldName;
 
-    public abstract boolean isStandalone();
+    public abstract Class<?> getResourceType();
 
     public abstract ImageRect getImageRect(ImageResourceDeclaration image);
 
@@ -304,8 +304,8 @@
     }
 
     @Override
-    public boolean isStandalone() {
-      return true;
+    public Class<?> getResourceType() {
+      return ImageResourcePrototype.class;
     }
 
     @Override
@@ -476,13 +476,14 @@
       throws UnableToCompleteException {
     String name = method.getName();
 
+    ImageResourceDeclaration image = new ImageResourceDeclaration(method);
+    DisplayedImage bundle = getImage(image);
+
     SourceWriter sw = new StringSourceWriter();
-    sw.println("new " + ImageResourcePrototype.class.getName() + "(");
+    sw.println("new " + bundle.getResourceType().getCanonicalName() + "(");
     sw.indent();
     sw.println('"' + name + "\",");
 
-    ImageResourceDeclaration image = new ImageResourceDeclaration(method);
-    DisplayedImage bundle = getImage(image);
     ImageRect rect = bundle.getImageRect(image);
     if (rect == null) {
       throw new NullPointerException("No ImageRect ever computed for " + name);
@@ -500,8 +501,7 @@
           + urlExpressions[1] + " : " + urlExpressions[0] + "),");
     }
     sw.println(rect.getLeft() + ", " + rect.getTop() + ", " + rect.getWidth() + ", "
-        + rect.getHeight() + ", " + rect.isAnimated() + ", " + rect.isLossy() + ", "
-        + bundle.isStandalone());
+        + rect.getHeight() + ", " + rect.isAnimated() + ", " + rect.isLossy());
 
     sw.outdent();
     sw.print(")");
diff --git a/user/src/com/google/gwt/user/client/ui/Image.java b/user/src/com/google/gwt/user/client/ui/Image.java
index 022117e..2c75879 100644
--- a/user/src/com/google/gwt/user/client/ui/Image.java
+++ b/user/src/com/google/gwt/user/client/ui/Image.java
@@ -81,6 +81,7 @@
 import com.google.gwt.event.dom.client.TouchStartHandler;
 import com.google.gwt.event.shared.HandlerRegistration;
 import com.google.gwt.resources.client.ImageResource;
+import com.google.gwt.resources.client.impl.ImageResourcePrototype;
 import com.google.gwt.safehtml.shared.SafeUri;
 import com.google.gwt.safehtml.shared.UriUtils;
 import com.google.gwt.user.client.Event;
@@ -516,12 +517,12 @@
    * @param resource the ImageResource to be displayed
    */
   public Image(ImageResource resource) {
-    if (resource.isStandalone()) {
-      changeState(new UnclippedState(this, resource.getSafeUri(), resource.getWidth(),
-          resource.getHeight()));
-    } else {
+    if (resource instanceof ImageResourcePrototype.Bundle) {
       changeState(new ClippedState(this, resource.getSafeUri(), resource.getLeft(),
           resource.getTop(), resource.getWidth(), resource.getHeight()));
+    } else {
+      changeState(new UnclippedState(this, resource.getSafeUri(), resource.getWidth(),
+          resource.getHeight()));
     }
     setStyleName("gwt-Image");
   }
@@ -872,11 +873,11 @@
    * @param resource the ImageResource to display
    */
   public void setResource(ImageResource resource) {
-    if (resource.isStandalone()) {
-      state.setUrl(this, resource.getSafeUri(), resource.getWidth(), resource.getHeight());
-    } else {
+    if (resource instanceof ImageResourcePrototype.Bundle) {
       state.setUrlAndVisibleRect(this, resource.getSafeUri(), resource.getLeft(),
           resource.getTop(), resource.getWidth(), resource.getHeight());
+    } else {
+      state.setUrl(this, resource.getSafeUri(), resource.getWidth(), resource.getHeight());
     }
   }
 
diff --git a/user/src/com/google/gwt/user/client/ui/ImageResourceRenderer.java b/user/src/com/google/gwt/user/client/ui/ImageResourceRenderer.java
index c78a5ec..f6663b9 100644
--- a/user/src/com/google/gwt/user/client/ui/ImageResourceRenderer.java
+++ b/user/src/com/google/gwt/user/client/ui/ImageResourceRenderer.java
@@ -17,6 +17,7 @@
 
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.resources.client.ImageResource;
+import com.google.gwt.resources.client.impl.ImageResourcePrototype;
 import com.google.gwt.safehtml.client.SafeHtmlTemplates;
 import com.google.gwt.safehtml.shared.SafeHtml;
 import com.google.gwt.safehtml.shared.SafeUri;
@@ -36,10 +37,10 @@
 
   @Override
   public SafeHtml render(ImageResource image) {
-    if (image.isStandalone()) {
-      return TEMPLATE.image(image.getSafeUri(), image.getWidth(), image.getHeight());
-    } else {
+    if (image instanceof ImageResourcePrototype.Bundle) {
       return AbstractImagePrototype.create(image).getSafeHtml();
+    } else {
+      return TEMPLATE.image(image.getSafeUri(), image.getWidth(), image.getHeight());
     }
   }
 }
diff --git a/user/test/com/google/gwt/resources/client/ImageResourceTest.java b/user/test/com/google/gwt/resources/client/ImageResourceTest.java
index 225634a..14d8a8e 100644
--- a/user/test/com/google/gwt/resources/client/ImageResourceTest.java
+++ b/user/test/com/google/gwt/resources/client/ImageResourceTest.java
@@ -171,7 +171,7 @@
     // Make sure that the large, lossy image isn't bundled with the rest
     assertTrue(((ImageResourcePrototype) lossy).isLossy());
     assertTrue(!i64.getSafeUri().equals(lossy.getSafeUri()));
-    assertTrue(lossy.isStandalone());
+    assertFalse(lossy instanceof ImageResourcePrototype.Bundle);
 
     assertEquals(16, r.i16x16Vertical().getWidth());
     assertEquals(16, r.i16x16Vertical().getHeight());
@@ -200,10 +200,10 @@
     // No image packing
     assertEquals(0, a.getTop());
     assertEquals(0, a.getLeft());
-    assertTrue(a.isStandalone());
+    assertFalse(a instanceof ImageResourcePrototype.Bundle);
     assertEquals(0, b.getTop());
     assertEquals(0, b.getLeft());
-    assertTrue(b.isStandalone());
+    assertFalse(b instanceof ImageResourcePrototype.Bundle);
   }
 
   /**
@@ -220,10 +220,10 @@
     // No image packing
     assertEquals(0, a.getTop());
     assertEquals(0, a.getLeft());
-    assertTrue(a.isStandalone());
+    assertFalse(a instanceof ImageResourcePrototype.Bundle);
     assertEquals(0, b.getTop());
     assertEquals(0, b.getLeft());
-    assertTrue(b.isStandalone());
+    assertFalse(b instanceof ImageResourcePrototype.Bundle);
   }
 
   @SuppressWarnings("deprecation")
diff --git a/user/test/com/google/gwt/user/client/ui/ImageTest.java b/user/test/com/google/gwt/user/client/ui/ImageTest.java
index 4845f30..2d2c458 100644
--- a/user/test/com/google/gwt/user/client/ui/ImageTest.java
+++ b/user/test/com/google/gwt/user/client/ui/ImageTest.java
@@ -31,6 +31,7 @@
 import com.google.gwt.resources.client.ClientBundle;
 import com.google.gwt.resources.client.ImageResource;
 import com.google.gwt.resources.client.ImageResource.ImageOptions;
+import com.google.gwt.resources.client.impl.ImageResourcePrototype;
 import com.google.gwt.user.client.Timer;
 
 /**
@@ -623,8 +624,7 @@
     Bundle b = GWT.create(Bundle.class);
     Image image = new Image(b.prettyPiccy());
     assertResourceWorked(image, b.prettyPiccy());
-
-    assertFalse(b.prettyPiccy().isStandalone());
+    assertTrue(b.prettyPiccy() instanceof ImageResourcePrototype.Bundle);
     assertEquals("clipped", getCurrentImageStateName(image));
   }
 
@@ -637,7 +637,7 @@
     image.setResource(b.prettyPiccy());
     assertResourceWorked(image, b.prettyPiccy());
 
-    assertFalse(b.prettyPiccy().isStandalone());
+    assertTrue(b.prettyPiccy() instanceof ImageResourcePrototype.Bundle);
     assertEquals("clipped", getCurrentImageStateName(image));
   }
 
@@ -646,7 +646,7 @@
     Image image = new Image(b.prettyPiccyStandalone());
     assertResourceWorked(image, b.prettyPiccyStandalone());
 
-    assertTrue(b.prettyPiccyStandalone().isStandalone());
+    assertFalse(b.prettyPiccyStandalone() instanceof ImageResourcePrototype.Bundle);
     assertEquals("unclipped", getCurrentImageStateName(image));
   }
 
@@ -656,7 +656,7 @@
     image.setResource(b.prettyPiccyStandalone());
     assertResourceWorked(image, b.prettyPiccyStandalone());
 
-    assertTrue(b.prettyPiccyStandalone().isStandalone());
+    assertFalse(b.prettyPiccyStandalone() instanceof ImageResourcePrototype.Bundle);
     assertEquals("unclipped", getCurrentImageStateName(image));
   }