Revision: 10359
Author:   gwt.mirror...@gmail.com
Date:     Tue Jun 21 10:47:41 2011
Log:      Support anonymous enum types in AutoBean ValueCodex.
Issue 6504.
http://gwt-code-reviews.appspot.com/1467802/
Patch by: t.broyer
Review by: bobv

http://code.google.com/p/google-web-toolkit/source/detail?r=10359

Modified:
 /trunk/user/src/com/google/web/bindery/autobean/shared/ValueCodex.java
/trunk/user/test/com/google/web/bindery/autobean/shared/AutoBeanCodexTest.java /trunk/user/test/com/google/web/bindery/requestfactory/shared/SimpleEnum.java

=======================================
--- /trunk/user/src/com/google/web/bindery/autobean/shared/ValueCodex.java Mon Apr 18 02:42:06 2011 +++ /trunk/user/src/com/google/web/bindery/autobean/shared/ValueCodex.java Tue Jun 21 10:47:41 2011
@@ -123,6 +123,11 @@
       }
     },
     ENUM(Enum.class) {
+      @Override
+      public boolean canUpcast(Object value) {
+        return value instanceof Enum;
+      }
+
       @Override
       public Enum<?> decode(Class<?> clazz, Splittable value) {
         return (Enum<?>) clazz.getEnumConstants()[(int) value.asNumber()];
@@ -352,7 +357,7 @@
    * May return <code>null</code>.
    */
   private static <T> Type findType(Class<T> clazz) {
-    if (clazz.isEnum()) {
+ if (clazz.isEnum() || (clazz.getSuperclass() != null && clazz.getSuperclass().isEnum())) {
       return Type.ENUM;
     }
     return TYPES_BY_CLASS.get(clazz);
=======================================
--- /trunk/user/test/com/google/web/bindery/autobean/shared/AutoBeanCodexTest.java Mon Apr 18 02:42:06 2011 +++ /trunk/user/test/com/google/web/bindery/autobean/shared/AutoBeanCodexTest.java Tue Jun 21 10:47:41 2011
@@ -141,7 +141,17 @@
   }

   enum MyEnum {
-    FOO, BAR,
+    FOO,
+    /**
+     * Contains a method that cannot even be called, but is enough to make
+     * MyEnum.BAR.getClass().isEnum()==false, because BAR's class is now an
+     * anonymous subclass of MyEnum.
+     */
+    BAR {
+      @SuppressWarnings("unused")
+      private void dummy() {
+      }
+    },
     // The eclipse formatter wants to put this annotation inline
     @PropertyName("quux")
     BAZ;
=======================================
--- /trunk/user/test/com/google/web/bindery/requestfactory/shared/SimpleEnum.java Tue Apr 5 10:47:39 2011 +++ /trunk/user/test/com/google/web/bindery/requestfactory/shared/SimpleEnum.java Tue Jun 21 10:47:41 2011
@@ -19,5 +19,15 @@
  * Test enum class.
  */
 public enum SimpleEnum {
-  FOO, BAR
-}
+  FOO,
+  /**
+   * Contains a method that cannot even be called, but is enough to make
+ * SimpleEnum.BAR.getClass().isEnum()==false, because BAR's class is now an
+   * anonymous subclass of MyEnum.
+   */
+  BAR {
+    @SuppressWarnings("unused")
+    private void dummy() {
+    }
+  }
+}

--
http://groups.google.com/group/Google-Web-Toolkit-Contributors

Reply via email to