Removed all the Request sub-types. Fixed the generator and the server code where we were relying on the sub-types.

Patch by: amitmanjhi
Review by: rjrjr
Review at http://gwt-code-reviews.appspot.com/926801


git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@8888 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/PersonEditorWorkflow.java b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/PersonEditorWorkflow.java
index 290f801..715b316 100644
--- a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/PersonEditorWorkflow.java
+++ b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/client/PersonEditorWorkflow.java
@@ -23,7 +23,6 @@
 import com.google.gwt.event.logical.shared.ValueChangeEvent;
 import com.google.gwt.event.shared.EventBus;
 import com.google.gwt.requestfactory.client.RequestFactoryEditorDriver;
-import com.google.gwt.requestfactory.shared.ProxyRequest;
 import com.google.gwt.requestfactory.shared.Receiver;
 import com.google.gwt.requestfactory.shared.Request;
 import com.google.gwt.requestfactory.shared.Violation;
@@ -146,7 +145,7 @@
 
   private void fetchAndEdit() {
     // The request is configured arbitrarily
-    ProxyRequest<PersonProxy> fetchRequest = requestFactory.find(person.stableId());
+    Request<PersonProxy> fetchRequest = requestFactory.find(person.stableId());
     // Add the paths that the EditorDelegate computes are necessary
     fetchRequest.with(editorDriver.getPaths());
 
diff --git a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/shared/DynaTableRequestFactory.java b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/shared/DynaTableRequestFactory.java
index a08e09a..f093217 100644
--- a/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/shared/DynaTableRequestFactory.java
+++ b/samples/dynatablerf/src/com/google/gwt/sample/dynatablerf/shared/DynaTableRequestFactory.java
@@ -17,7 +17,6 @@
 
 import com.google.gwt.requestfactory.shared.Instance;
 import com.google.gwt.requestfactory.shared.LoggingRequest;
-import com.google.gwt.requestfactory.shared.ProxyListRequest;
 import com.google.gwt.requestfactory.shared.Request;
 import com.google.gwt.requestfactory.shared.RequestFactory;
 import com.google.gwt.requestfactory.shared.Service;
@@ -25,6 +24,8 @@
 import com.google.gwt.sample.dynatablerf.domain.Person;
 import com.google.gwt.sample.dynatablerf.server.SchoolCalendarService;
 
+import java.util.List;
+
 /**
  * Request factory for the DynaTable sample. Instantiate via
  * {@link com.google.gwt.core.client.GWT#create}.
@@ -54,7 +55,7 @@
    */
   @Service(SchoolCalendarService.class)
   interface SchoolCalendarRequest {
-    ProxyListRequest<PersonProxy> getPeople(int startIndex, int maxCount);
+    Request<List<PersonProxy>> getPeople(int startIndex, int maxCount);
   }
 
   AddressRequest addressRequest();
diff --git a/user/src/com/google/gwt/app/place/AbstractProxyEditActivity.java b/user/src/com/google/gwt/app/place/AbstractProxyEditActivity.java
index e7912da..727ba4e 100644
--- a/user/src/com/google/gwt/app/place/AbstractProxyEditActivity.java
+++ b/user/src/com/google/gwt/app/place/AbstractProxyEditActivity.java
@@ -20,7 +20,6 @@
 import com.google.gwt.requestfactory.client.RequestFactoryEditorDriver;
 import com.google.gwt.requestfactory.shared.EntityProxy;
 import com.google.gwt.requestfactory.shared.EntityProxyId;
-import com.google.gwt.requestfactory.shared.ProxyRequest;
 import com.google.gwt.requestfactory.shared.Receiver;
 import com.google.gwt.requestfactory.shared.Request;
 import com.google.gwt.requestfactory.shared.RequestFactory;
@@ -176,7 +175,7 @@
       proxyId = getProxyId(newRecord);
       doStart(newRecord);
     } else {
-      ProxyRequest<P> findRequest = requests.find(getEntityProxyId());
+      Request<P> findRequest = requests.find(getEntityProxyId());
       findRequest.with(editorDriver.getPaths()).fire(new Receiver<P>() {
         public void onSuccess(P proxy) {
           if (display != null) {
diff --git a/user/src/com/google/gwt/app/place/AbstractProxyListActivity.java b/user/src/com/google/gwt/app/place/AbstractProxyListActivity.java
index 96f0956..14fe2fb 100644
--- a/user/src/com/google/gwt/app/place/AbstractProxyListActivity.java
+++ b/user/src/com/google/gwt/app/place/AbstractProxyListActivity.java
@@ -21,8 +21,8 @@
 import com.google.gwt.requestfactory.shared.EntityProxy;
 import com.google.gwt.requestfactory.shared.EntityProxyChange;
 import com.google.gwt.requestfactory.shared.EntityProxyId;
-import com.google.gwt.requestfactory.shared.ProxyListRequest;
 import com.google.gwt.requestfactory.shared.Receiver;
+import com.google.gwt.requestfactory.shared.Request;
 import com.google.gwt.requestfactory.shared.RequestFactory;
 import com.google.gwt.requestfactory.shared.WriteOperation;
 import com.google.gwt.user.cellview.client.AbstractHasData;
@@ -225,7 +225,7 @@
     }
   }
 
-  protected abstract ProxyListRequest<P> createRangeRequest(Range range);
+  protected abstract Request<List<P>> createRangeRequest(Range range);
 
   protected abstract void fireCountRequest(Receiver<Long> callback);
 
diff --git a/user/src/com/google/gwt/requestfactory/client/impl/AbstractJsonListRequest.java b/user/src/com/google/gwt/requestfactory/client/impl/AbstractJsonListRequest.java
index 43e604d..fb4b05c 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/AbstractJsonListRequest.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/AbstractJsonListRequest.java
@@ -18,7 +18,7 @@
 import com.google.gwt.core.client.JavaScriptObject;
 import com.google.gwt.core.client.JsArray;
 import com.google.gwt.requestfactory.shared.EntityProxy;
-import com.google.gwt.requestfactory.shared.ProxyListRequest;
+import com.google.gwt.requestfactory.shared.Request;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -38,7 +38,7 @@
  */
 public abstract class //
 AbstractJsonListRequest<T extends EntityProxy, R extends AbstractJsonListRequest<T, R>> //
-    extends AbstractRequest<List<T>, R> implements ProxyListRequest<T> {
+    extends AbstractRequest<List<T>, R> implements Request<List<T>> {
   protected final ProxySchema<?> schema;
 
   public AbstractJsonListRequest(ProxySchema<? extends T> schema,
diff --git a/user/src/com/google/gwt/requestfactory/client/impl/AbstractJsonObjectRequest.java b/user/src/com/google/gwt/requestfactory/client/impl/AbstractJsonObjectRequest.java
index 90b5412..dde8908 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/AbstractJsonObjectRequest.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/AbstractJsonObjectRequest.java
@@ -17,7 +17,7 @@
 
 import com.google.gwt.core.client.JavaScriptObject;
 import com.google.gwt.requestfactory.shared.EntityProxy;
-import com.google.gwt.requestfactory.shared.ProxyRequest;
+import com.google.gwt.requestfactory.shared.Request;
 
 /**
  * <p>
@@ -34,7 +34,7 @@
  */
 public abstract class //
     AbstractJsonObjectRequest<T extends EntityProxy, R extends AbstractJsonObjectRequest<T, R>> //
-    extends AbstractRequest<T, R> implements ProxyRequest<T> {
+    extends AbstractRequest<T, R> implements Request<T> {
 
   protected final ProxySchema<?> schema;
 
diff --git a/user/src/com/google/gwt/requestfactory/client/impl/AbstractJsonProxySetRequest.java b/user/src/com/google/gwt/requestfactory/client/impl/AbstractJsonProxySetRequest.java
index 3fa6f91..9eec661 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/AbstractJsonProxySetRequest.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/AbstractJsonProxySetRequest.java
@@ -16,7 +16,7 @@
 package com.google.gwt.requestfactory.client.impl;
 
 import com.google.gwt.requestfactory.shared.EntityProxy;
-import com.google.gwt.requestfactory.shared.ProxySetRequest;
+import com.google.gwt.requestfactory.shared.Request;
 
 import java.util.HashSet;
 import java.util.Set;
@@ -39,7 +39,7 @@
     AbstractJsonProxySetRequest<T extends EntityProxy,
     R extends AbstractJsonProxySetRequest<T, R>>
     extends AbstractJsonProxyCollectionRequest<Set<T>, T, R>
-    implements ProxySetRequest<T> {
+    implements Request<Set<T>> {
   protected final ProxySchema<?> schema;
 
   public AbstractJsonProxySetRequest(ProxySchema<? extends T> schema,
diff --git a/user/src/com/google/gwt/requestfactory/client/impl/FindRequest.java b/user/src/com/google/gwt/requestfactory/client/impl/FindRequest.java
index dace5f1..9613a3a 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/FindRequest.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/FindRequest.java
@@ -19,7 +19,7 @@
 import com.google.gwt.requestfactory.server.FindService;
 import com.google.gwt.requestfactory.shared.EntityProxy;
 import com.google.gwt.requestfactory.shared.EntityProxyId;
-import com.google.gwt.requestfactory.shared.ProxyRequest;
+import com.google.gwt.requestfactory.shared.Request;
 import com.google.gwt.requestfactory.shared.Service;
 
 /**
@@ -27,5 +27,5 @@
  */
 @Service(FindService.class)
 public interface FindRequest {
-  ProxyRequest<EntityProxy> find(EntityProxyId proxyId);
+  Request<EntityProxy> find(EntityProxyId proxyId);
 }
\ No newline at end of file
diff --git a/user/src/com/google/gwt/requestfactory/client/impl/RequestFactoryJsonImpl.java b/user/src/com/google/gwt/requestfactory/client/impl/RequestFactoryJsonImpl.java
index f6758f2..78bc614 100644
--- a/user/src/com/google/gwt/requestfactory/client/impl/RequestFactoryJsonImpl.java
+++ b/user/src/com/google/gwt/requestfactory/client/impl/RequestFactoryJsonImpl.java
@@ -19,7 +19,6 @@
 import com.google.gwt.requestfactory.client.DefaultRequestTransport;
 import com.google.gwt.requestfactory.shared.EntityProxy;
 import com.google.gwt.requestfactory.shared.EntityProxyId;
-import com.google.gwt.requestfactory.shared.ProxyRequest;
 import com.google.gwt.requestfactory.shared.Request;
 import com.google.gwt.requestfactory.shared.RequestFactory;
 import com.google.gwt.requestfactory.shared.RequestTransport;
@@ -105,7 +104,7 @@
     return createFuture(schema);
   }
 
-  public ProxyRequest<EntityProxy> find(EntityProxyId proxyId) {
+  public Request<EntityProxy> find(EntityProxyId proxyId) {
     return findRequest().find(proxyId);
   }
 
diff --git a/user/src/com/google/gwt/requestfactory/server/JsonRequestProcessor.java b/user/src/com/google/gwt/requestfactory/server/JsonRequestProcessor.java
index 3854b54..046fa02 100644
--- a/user/src/com/google/gwt/requestfactory/server/JsonRequestProcessor.java
+++ b/user/src/com/google/gwt/requestfactory/server/JsonRequestProcessor.java
@@ -830,7 +830,7 @@
     operation = getOperation(operationName);
     Class<?> domainClass = Class.forName(operation.getDomainClassName());
     Method domainMethod = domainClass.getMethod(
-        operation.getDomainMethodName(), operation.getParameterTypes());
+        operation.getDomainMethod().getName(), operation.getParameterTypes());
     if (Modifier.isStatic(domainMethod.getModifiers()) == operation.isInstance()) {
       throw new IllegalArgumentException("the " + domainMethod.getName()
           + " should " + (operation.isInstance() ? "not " : "") + "be static");
@@ -874,12 +874,12 @@
     JSONObject sideEffects = getSideEffects();
 
     if (result != null
-        && (result instanceof List<?>) != operation.isReturnTypeList()) {
-      throw new IllegalArgumentException(
-          String.format("Type mismatch, expected %s%s, but %s returns %s",
-              operation.isReturnTypeList() ? "list of " : "",
-              operation.getReturnType(), domainMethod,
-              domainMethod.getReturnType()));
+        && (result instanceof List<?>) != List.class.isAssignableFrom(operation.getDomainMethod().getReturnType())) {
+      throw new IllegalArgumentException(String.format(
+          "Type mismatch, expected %s%s, but %s returns %s",
+          List.class.isAssignableFrom(operation.getReturnType()) ? "list of "
+              : "", operation.getReturnType(), domainMethod,
+          domainMethod.getReturnType()));
     }
 
     JSONObject envelop = new JSONObject();
diff --git a/user/src/com/google/gwt/requestfactory/server/RequestDefinition.java b/user/src/com/google/gwt/requestfactory/server/RequestDefinition.java
index 0c707df..9d5223b 100644
--- a/user/src/com/google/gwt/requestfactory/server/RequestDefinition.java
+++ b/user/src/com/google/gwt/requestfactory/server/RequestDefinition.java
@@ -15,6 +15,7 @@
  */
 package com.google.gwt.requestfactory.server;
 
+import java.lang.reflect.Method;
 import java.lang.reflect.Type;
 
 /**
@@ -34,9 +35,9 @@
   String getDomainClassName();
 
   /**
-   * Returns the name of the method to be invoked on the server.
+   * Returns the method to be invoked on the server.
    */
-  String getDomainMethodName();
+  Method getDomainMethod();
 
   /**
    * Returns the parameter types of the method to be invoked on the server.
@@ -56,12 +57,6 @@
   boolean isInstance();
 
   /**
-   * Returns true if the request returns Lists of {@link #getReturnType},
-   * false for single instances.
-   */
-  boolean isReturnTypeList();
-
-  /**
    * Returns the name.
    */
   String name();
diff --git a/user/src/com/google/gwt/requestfactory/shared/ProxyListRequest.java b/user/src/com/google/gwt/requestfactory/shared/ProxyListRequest.java
deleted file mode 100644
index cc2fdcf..0000000
--- a/user/src/com/google/gwt/requestfactory/shared/ProxyListRequest.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.requestfactory.shared;
-
-import java.util.List;
-
-/**
- * <p> <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span> </p> Implemented by Request objects for service methods that return
- * lists of records.
- *
- * @param <P> The type held by the returned list
- */
-public interface ProxyListRequest<P extends EntityProxy>
-    extends Request<List<P>> {
-
-  ProxyListRequest<P> with(String... propertyRefs);
-}
diff --git a/user/src/com/google/gwt/requestfactory/shared/ProxyRequest.java b/user/src/com/google/gwt/requestfactory/shared/ProxyRequest.java
deleted file mode 100644
index e0b8e59..0000000
--- a/user/src/com/google/gwt/requestfactory/shared/ProxyRequest.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.requestfactory.shared;
-
-/**
- * <p>
- * <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span>
- * </p>
- * A Request that returns specific properties for one or more {@link EntityProxy}
- * instances.
- * 
- * @param <P> return type
- */
-public interface ProxyRequest<P extends EntityProxy> extends
-    Request<P> {
-}
diff --git a/user/src/com/google/gwt/requestfactory/shared/ProxySetRequest.java b/user/src/com/google/gwt/requestfactory/shared/ProxySetRequest.java
deleted file mode 100644
index 6def4a9..0000000
--- a/user/src/com/google/gwt/requestfactory/shared/ProxySetRequest.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2010 Google Inc.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package com.google.gwt.requestfactory.shared;
-
-import java.util.Set;
-
-/**
- * <p> <span style="color:red">Experimental API: This class is still under rapid
- * development, and is very likely to be deleted. Use it at your own risk.
- * </span> </p> Implemented by RequestObjects for service methods that return
- * a Set of records.
- *
- * @param <P> The type held by the returned Set
- */
-public interface ProxySetRequest<P extends EntityProxy>
-    extends Request<Set<P>> {
-}
diff --git a/user/src/com/google/gwt/requestfactory/shared/RequestFactory.java b/user/src/com/google/gwt/requestfactory/shared/RequestFactory.java
index 70e3540..fba7408 100644
--- a/user/src/com/google/gwt/requestfactory/shared/RequestFactory.java
+++ b/user/src/com/google/gwt/requestfactory/shared/RequestFactory.java
@@ -33,7 +33,7 @@
   /**
    * Return a request to find a fresh instance of the referenced proxy.
    */
-  <P extends EntityProxy> ProxyRequest<P> find(EntityProxyId<P> proxyId);
+  <P extends EntityProxy> Request<P> find(EntityProxyId<P> proxyId);
 
   /**
    * Returns the eventbus this factory's events are posted on, which was set via
diff --git a/user/test/com/google/gwt/requestfactory/client/FindServiceTest.java b/user/test/com/google/gwt/requestfactory/client/FindServiceTest.java
index adb0efe..52c11a8 100644
--- a/user/test/com/google/gwt/requestfactory/client/FindServiceTest.java
+++ b/user/test/com/google/gwt/requestfactory/client/FindServiceTest.java
@@ -18,7 +18,6 @@
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.event.shared.SimpleEventBus;
 import com.google.gwt.requestfactory.shared.EntityProxyId;
-import com.google.gwt.requestfactory.shared.ProxyRequest;
 import com.google.gwt.requestfactory.shared.Receiver;
 import com.google.gwt.requestfactory.shared.Request;
 import com.google.gwt.requestfactory.shared.SimpleBarProxy;
@@ -155,7 +154,7 @@
 
     EntityProxyId<SimpleBarProxy> id = req.getProxyId(historyToken);
     assertNotNull(id);
-    ProxyRequest<SimpleBarProxy> find = req.find(id);
+    Request<SimpleBarProxy> find = req.find(id);
     try {
       find.fire(new Receiver<SimpleBarProxy>() {
         @Override
diff --git a/user/test/com/google/gwt/requestfactory/server/ReflectionBasedOperationRegistryTest.java b/user/test/com/google/gwt/requestfactory/server/ReflectionBasedOperationRegistryTest.java
index 50ed56e..5cb7ceb 100644
--- a/user/test/com/google/gwt/requestfactory/server/ReflectionBasedOperationRegistryTest.java
+++ b/user/test/com/google/gwt/requestfactory/server/ReflectionBasedOperationRegistryTest.java
@@ -20,6 +20,9 @@
 
 import junit.framework.TestCase;
 
+import java.util.List;
+import java.util.Set;
+
 /**
  * Tests for
  * {@link com.google.gwt.requestfactory.server.ReflectionBasedOperationRegistry}
@@ -40,10 +43,10 @@
     assert request != null;
     assertEquals("com.google.gwt.requestfactory.server.SimpleFoo",
         request.getDomainClassName());
-    assertEquals("findAll", request.getDomainMethodName());
+    assertEquals("findAll", request.getDomainMethod().getName());
     assertEquals(SimpleFooProxy.class, request.getReturnType());
     assertEquals(0, request.getParameterTypes().length);
-    assertEquals(true, request.isReturnTypeList());
+    assertTrue(List.class.isAssignableFrom(request.getDomainMethod().getReturnType()));
   }
 
   public void testGetOperationScalarNoArgs() {
@@ -51,10 +54,10 @@
     assert request != null;
     assertEquals("com.google.gwt.requestfactory.server.SimpleFoo",
         request.getDomainClassName());
-    assertEquals("countSimpleFoo", request.getDomainMethodName());
+    assertEquals("countSimpleFoo", request.getDomainMethod().getName());
     assertEquals(Long.class, request.getReturnType());
     assertEquals(0, request.getParameterTypes().length);
-    assertEquals(false, request.isReturnTypeList());
+    assertFalse(List.class.isAssignableFrom(request.getDomainMethod().getReturnType()));
   }
 
   public void testGetOpertionScalarWithArgs() {
@@ -63,25 +66,36 @@
       assertNotNull(request);
       assertEquals("com.google.gwt.requestfactory.server.SimpleFoo",
           request.getDomainClassName());
-      assertEquals("findSimpleFooById", request.getDomainMethodName());
+      assertEquals("findSimpleFooById", request.getDomainMethod().getName());
       assertEquals(SimpleFooProxy.class, request.getReturnType());
       assertEquals(1, request.getParameterTypes().length);
       assertEquals(Long.class, request.getParameterTypes()[0]);
-      assertFalse(request.isReturnTypeList());
+      assertFalse(List.class.isAssignableFrom(request.getDomainMethod().getReturnType()));
     }
     {
       RequestDefinition request = registry.getOperation("com.google.gwt.requestfactory.shared.SimpleBarRequest::findSimpleBarById");
       assertNotNull(request);
       assertEquals("com.google.gwt.requestfactory.server.SimpleBar",
           request.getDomainClassName());
-      assertEquals("findSimpleBarById", request.getDomainMethodName());
+      assertEquals("findSimpleBarById", request.getDomainMethod().getName());
       assertEquals(SimpleBarProxy.class, request.getReturnType());
       assertEquals(1, request.getParameterTypes().length);
       assertEquals(String.class, request.getParameterTypes()[0]);
-      assertFalse(request.isReturnTypeList());
+      assertFalse(List.class.isAssignableFrom(request.getDomainMethod().getReturnType()));
     }
   }
 
+  public void testGetOperationSetNoArgs() {
+    RequestDefinition request = registry.getOperation("com.google.gwt.requestfactory.shared.SimpleBarRequest::findAsSet");
+    assert request != null;
+    assertEquals("com.google.gwt.requestfactory.server.SimpleBar",
+        request.getDomainClassName());
+    assertEquals("findAsSet", request.getDomainMethod().getName());
+    assertEquals(SimpleBarProxy.class, request.getReturnType());
+    assertEquals(0, request.getParameterTypes().length);
+    assertTrue(Set.class.isAssignableFrom(request.getDomainMethod().getReturnType()));
+  }
+
   public void testInsecureOperations() {
     try {
       // bogus class
diff --git a/user/test/com/google/gwt/requestfactory/shared/SimpleFooRequest.java b/user/test/com/google/gwt/requestfactory/shared/SimpleFooRequest.java
index c9aa77b..e4ad752 100644
--- a/user/test/com/google/gwt/requestfactory/shared/SimpleFooRequest.java
+++ b/user/test/com/google/gwt/requestfactory/shared/SimpleFooRequest.java
@@ -29,9 +29,9 @@
   @Instance
   Request<Long> countSimpleFooWithUserNameSideEffect(SimpleFooProxy proxy);
 
-  ProxyListRequest<SimpleFooProxy> findAll();
+  Request<List<SimpleFooProxy>> findAll();
 
-  ProxyRequest<SimpleFooProxy> findSimpleFooById(Long id);
+  Request<SimpleFooProxy> findSimpleFooById(Long id);
 
   Request<List<Integer>> getNumberList();
 
@@ -44,7 +44,7 @@
   Request<Void> persist(SimpleFooProxy proxy);
   
   @Instance
-  ProxyRequest<SimpleFooProxy> persistAndReturnSelf(SimpleFooProxy proxy);
+  Request<SimpleFooProxy> persistAndReturnSelf(SimpleFooProxy proxy);
 
   Request<Integer> privateMethod();
 
@@ -61,9 +61,9 @@
   
   Request<Void> reset();
 
-  ProxyListRequest<SimpleFooProxy> returnNullList();
+  Request<List<SimpleFooProxy>> returnNullList();
 
-  ProxyRequest<SimpleFooProxy> returnNullSimpleFoo();
+  Request<SimpleFooProxy> returnNullSimpleFoo();
 
   Request<String> returnNullString();
 
diff --git a/user/test/com/google/gwt/requestfactory/shared/SimpleFooStringRequest.java b/user/test/com/google/gwt/requestfactory/shared/SimpleFooStringRequest.java
index 56e7d13..0f8d324 100644
--- a/user/test/com/google/gwt/requestfactory/shared/SimpleFooStringRequest.java
+++ b/user/test/com/google/gwt/requestfactory/shared/SimpleFooStringRequest.java
@@ -15,6 +15,8 @@
  */
 package com.google.gwt.requestfactory.shared;
 
+import java.util.List;
+
 /**
  * Do nothing test interface.
  */
@@ -25,9 +27,9 @@
   @Instance
   Request<Long> countSimpleFooWithUserNameSideEffect(SimpleFooStringProxy proxy);
 
-  ProxyListRequest<SimpleFooStringProxy> findAll();
+  Request<List<SimpleFooStringProxy>> findAll();
 
-  ProxyRequest<SimpleFooStringProxy> findSimpleFooStringById(String id);
+  Request<SimpleFooStringProxy> findSimpleFooStringById(String id);
 
   Request<Integer> privateMethod();
 
@@ -35,7 +37,7 @@
   Request<Void> persist(SimpleFooStringProxy proxy);
   
   @Instance
-  ProxyRequest<SimpleFooStringProxy> persistAndReturnSelf(SimpleFooStringProxy proxy);
+  Request<SimpleFooStringProxy> persistAndReturnSelf(SimpleFooStringProxy proxy);
 
   Request<Void> reset();