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