Reviewers: rjrjr, bobv,

Description:
Issue 6059: ClassCastException in AbstractRequestContext.isChanged if
you create()d a ValueProxy

http://code.google.com/p/google-web-toolkit/issues/detail?id=6059

Use BaseProxyCategory.stableId() instead of a cast to EntityProxy, so it
works with ValueProxy as well.

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

Affected files:
M user/src/com/google/gwt/requestfactory/shared/impl/AbstractRequestContext.java
  M user/test/com/google/gwt/requestfactory/client/RequestFactoryTest.java


Index: user/src/com/google/gwt/requestfactory/shared/impl/AbstractRequestContext.java diff --git a/user/src/com/google/gwt/requestfactory/shared/impl/AbstractRequestContext.java b/user/src/com/google/gwt/requestfactory/shared/impl/AbstractRequestContext.java index 7e899675fa249ff786bcdd887ffb508e8ee5dc35..35498e96a9082561ae39607352da52559f6f7b49 100644 --- a/user/src/com/google/gwt/requestfactory/shared/impl/AbstractRequestContext.java +++ b/user/src/com/google/gwt/requestfactory/shared/impl/AbstractRequestContext.java @@ -504,11 +504,11 @@ public class AbstractRequestContext implements RequestContext, * simple flag-check because of the possibility of "unmaking" a change, per
      * the JavaDoc.
      */
-    for (AutoBean<?> bean : editedProxies.values()) {
+    for (AutoBean<? extends BaseProxy> bean : editedProxies.values()) {
       AutoBean<?> previous = bean.getTag(Constants.PARENT_OBJECT);
       if (previous == null) {
         // Compare to empty object
- Class<?> proxyClass = ((EntityProxy) bean.as()).stableId().getProxyClass();
+        Class<?> proxyClass = stableId(bean).getProxyClass();
previous = getRequestFactory().getAutoBeanFactory().create(proxyClass);
       }
       if (!AutoBeanUtils.diff(previous, bean).isEmpty()) {
Index: user/test/com/google/gwt/requestfactory/client/RequestFactoryTest.java diff --git a/user/test/com/google/gwt/requestfactory/client/RequestFactoryTest.java b/user/test/com/google/gwt/requestfactory/client/RequestFactoryTest.java index b7a0c09cca38cb008dac761f73bbbde5d5ee84e5..b43e4ae14a6b10ef7c56ce29a5b7153959a7fe28 100644
--- a/user/test/com/google/gwt/requestfactory/client/RequestFactoryTest.java
+++ b/user/test/com/google/gwt/requestfactory/client/RequestFactoryTest.java
@@ -271,6 +271,22 @@ public class RequestFactoryTest extends RequestFactoryTestBase {
     assertFalse(context.isChanged());
   }

+  public void testChangedCreateValueProxy() {
+    SimpleFooRequest context = simpleFooRequest();
+
+    // Creates don't cause a change
+    SimpleValueProxy foo = context.create(SimpleValueProxy.class);
+    assertFalse(context.isChanged());
+
+    // Change
+    foo.setString("foo");
+    assertTrue(context.isChanged());
+
+    // Undo the change
+    foo.setString(null);
+    assertFalse(context.isChanged());
+  }
+
   public void testChangedEdit() {
     delayTestFinish(DELAY_TEST_FINISH);
     simpleFooRequest().findSimpleFooById(1L).fire(


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

Reply via email to