Support anonymous enum types in AutoBean ValueCodex.
Issue 6504.
http://gwt-code-reviews.appspot.com/1467802/
Patch by: t.broyer
Review by: bobv
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@10359 8db76d5a-ed1c-0410-87a9-c151d255dfc7
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 4bcb304..a08a57d 100644
--- a/user/src/com/google/web/bindery/autobean/shared/ValueCodex.java
+++ b/user/src/com/google/web/bindery/autobean/shared/ValueCodex.java
@@ -124,6 +124,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);
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 13f69b3..bc10735 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,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;
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 b338e5f..cfbc18f 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,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() {
+ }
+ }
}