Reviewers: bobv, rjrjr,

Description:
Issue 6504: AutoBean doesn't support enums with anonymous enum values

Please review this at http://gwt-code-reviews.appspot.com/1467802/

Affected files:
  M user/src/com/google/web/bindery/autobean/shared/ValueCodex.java
  M user/test/com/google/web/bindery/autobean/shared/AutoBeanCodexTest.java
  M user/test/com/google/web/bindery/requestfactory/shared/SimpleEnum.java


Index: user/src/com/google/web/bindery/autobean/shared/ValueCodex.java
diff --git a/user/src/com/google/web/bindery/autobean/shared/ValueCodex.java b/user/src/com/google/web/bindery/autobean/shared/ValueCodex.java index 4bcb3042665ec31c40ec8d03edf90ac63be30639..a7ffe5a59c366a3dc0892a7feeba40a939d355de 100644
--- a/user/src/com/google/web/bindery/autobean/shared/ValueCodex.java
+++ b/user/src/com/google/web/bindery/autobean/shared/ValueCodex.java
@@ -352,7 +352,7 @@ public class ValueCodex {
    * 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);
Index: user/test/com/google/web/bindery/autobean/shared/AutoBeanCodexTest.java diff --git a/user/test/com/google/web/bindery/autobean/shared/AutoBeanCodexTest.java b/user/test/com/google/web/bindery/autobean/shared/AutoBeanCodexTest.java index 13f69b3410705d23e3e8807aea86b265d09f98da..3b7574f392838d1d0833eae00f37036f3709bc27 100644 --- a/user/test/com/google/web/bindery/autobean/shared/AutoBeanCodexTest.java +++ b/user/test/com/google/web/bindery/autobean/shared/AutoBeanCodexTest.java
@@ -141,7 +141,16 @@ public class AutoBeanCodexTest extends GWTTestCase {
   }

   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 {
+      private void dummy() {
+      }
+    },
     // The eclipse formatter wants to put this annotation inline
     @PropertyName("quux")
     BAZ;
Index: user/test/com/google/web/bindery/requestfactory/shared/SimpleEnum.java diff --git a/user/test/com/google/web/bindery/requestfactory/shared/SimpleEnum.java b/user/test/com/google/web/bindery/requestfactory/shared/SimpleEnum.java index b338e5f1046eaca299b65909b77f9827361b72e7..0313679e710f68aa56a48e8325c008cd9ad01a42 100644
--- a/user/test/com/google/web/bindery/requestfactory/shared/SimpleEnum.java
+++ b/user/test/com/google/web/bindery/requestfactory/shared/SimpleEnum.java
@@ -19,5 +19,14 @@ package com.google.web.bindery.requestfactory.shared;
  * 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 {
+    private void dummy() {
+    }
+  }
 }


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

Reply via email to