Fixed a compiler bug that was preventing overrides with generic params from working.  Committing a parameterized AsyncCallback.

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@1409 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaAST.java b/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaAST.java
index 71bd9f4..7c9727c 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaAST.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaAST.java
@@ -1787,22 +1787,6 @@
       }
     }
 
-    private boolean areParametersIdentical(MethodBinding a, MethodBinding b) {
-      TypeBinding[] params1 = a.parameters;
-      TypeBinding[] params2 = b.parameters;
-      if (params1.length != params2.length) {
-        return false;
-      }
-
-      for (int i = 0; i < params1.length; ++i) {
-        if (params1[i] != params2[i]) {
-          return false;
-        }
-      }
-
-      return true;
-    }
-
     private JLocalDeclarationStatement createLocalDeclaration(SourceInfo info,
         JLocal arrayVar, JExpression value) {
       return new JLocalDeclarationStatement(program, info, new JLocalRef(
@@ -2160,14 +2144,12 @@
 
       // See if this class has any uprefs, unless this class is myself
       if (binding.declaringClass != searchThisType) {
-        MethodBinding result = searchThisType.getExactMethod(binding.selector,
-            binding.parameters, null);
-
-        if (result != null) {
-          if (areParametersIdentical(binding, result)) {
-            JMethod upRef = (JMethod) typeMap.get(result);
+        for (MethodBinding tryMethod : searchThisType.getMethods(binding.selector)) {
+          if (binding.areParameterErasuresEqual(tryMethod)) {
+            JMethod upRef = (JMethod) typeMap.get(tryMethod);
             if (!method.overrides.contains(upRef)) {
               method.overrides.add(upRef);
+              break;
             }
           }
         }
diff --git a/samples/dynatable/src/com/google/gwt/sample/dynatable/client/SchoolCalendarServiceAsync.java b/samples/dynatable/src/com/google/gwt/sample/dynatable/client/SchoolCalendarServiceAsync.java
index 1d3210d..b165117 100644
--- a/samples/dynatable/src/com/google/gwt/sample/dynatable/client/SchoolCalendarServiceAsync.java
+++ b/samples/dynatable/src/com/google/gwt/sample/dynatable/client/SchoolCalendarServiceAsync.java
@@ -19,7 +19,7 @@
 
 /**
  * The interface for the RPC server endpoint that provides school calendar
- * information for clients that will be calling aysychronously. 
+ * information for clients that will be calling asynchronously. 
  */
 public interface SchoolCalendarServiceAsync {
 
diff --git a/user/src/com/google/gwt/user/client/rpc/AsyncCallback.java b/user/src/com/google/gwt/user/client/rpc/AsyncCallback.java
index 2f05dda..ee958d6 100644
--- a/user/src/com/google/gwt/user/client/rpc/AsyncCallback.java
+++ b/user/src/com/google/gwt/user/client/rpc/AsyncCallback.java
@@ -81,8 +81,10 @@
  * </pre>
  * 
  * </p>
+ * 
+ * @param <T>
  */
-public interface AsyncCallback {
+public interface AsyncCallback<T> {
 
   /**
    * Called when an asynchronous call fails to complete normally.
@@ -108,5 +110,5 @@
    * the parameter will be the boxed version of the primitive (for example, an
    * <code>int</code> return type becomes an {@link Integer}.
    */
-  void onSuccess(Object result);
+  void onSuccess(T result);
 }