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