Fixes regressions in @UiHandler.

Change-Id: Id929d771ed05d8a25f49d2c9256dc44ee034f7c3
Review-Link: https://gwt-review.googlesource.com/#/c/6175/
(cherry picked from commit 12a8262eb2534f79af49e2a830eb7a5b770cba87)
diff --git a/user/src/com/google/gwt/uibinder/rebind/HandlerEvaluator.java b/user/src/com/google/gwt/uibinder/rebind/HandlerEvaluator.java
index a2fd077..ecce7e6 100644
--- a/user/src/com/google/gwt/uibinder/rebind/HandlerEvaluator.java
+++ b/user/src/com/google/gwt/uibinder/rebind/HandlerEvaluator.java
@@ -223,9 +223,8 @@
     writer.newline();
     // Create the anonymous class extending the raw type to avoid errors under the new JDT
     // if the type has a wildcard.
-    writer.write("final %1$s %2$s = (%1$s) new %3$s() {",
-        handlerType.getParameterizedQualifiedSourceName(), handlerVarName,
-        handlerType.getQualifiedSourceName());
+    writer.write("final %1$s %2$s = new %1$s() {",
+        handlerType.getQualifiedSourceName(), handlerVarName);
     writer.indent();
     writer.write("public void %1$s(%2$s event) {", methods[0].getName(),
         // Use the event raw type to match the signature as we are using implementing the raw type
@@ -303,7 +302,10 @@
           continue;
         }
 
-        JType methodParam = parameters[0].getType();
+        JClassType methodParam = parameters[0].getType().isClassOrInterface();
+        if (methodParam == null) {
+          continue;
+        }
 
         if (handlerType.equals(methodParam)) {
 
@@ -330,16 +332,12 @@
          * This is done as an alternative handler method to preserve the
          * original logic.
          */
-        JParameterizedType ptype = handlerType.isParameterized();
-        if (ptype != null) {
-          // Alt 1: TableHandler<String> => TableHandler
-          if (methodParam.equals(ptype.getRawType())) {
-            alternativeHandlerMethod = method;
-          }
-
+        if (handlerType.isAssignableFrom(methodParam)) {
+          // Alt 1: TableHandler<String> => TableHandler or TableHandler<?> => TableHandler<String>
+          alternativeHandlerMethod = method;
+        } else if (handlerType.isParameterized() != null && objectType.isGenericType() != null) {
           // Alt 2: TableHandler<String> => TableHandler<T>
-          if (objectType.isGenericType() != null
-              && methodParam.getErasedType().equals(ptype.getRawType())) {
+          if (methodParam.getErasedType().equals(handlerType.isParameterized().getErasedType())) {
             // Unfortunately this is overly lenient but it was always like this
             alternativeHandlerMethod2 = method;
           }
diff --git a/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.java b/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.java
index 84f1d77..e389f98 100644
--- a/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.java
+++ b/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.java
@@ -52,6 +52,7 @@
 import com.google.gwt.user.client.ui.HasHTML;
 import com.google.gwt.user.client.ui.HorizontalPanel;
 import com.google.gwt.user.client.ui.Image;
+import com.google.gwt.user.client.ui.IntegerBox;
 import com.google.gwt.user.client.ui.Label;
 import com.google.gwt.user.client.ui.ListBox;
 import com.google.gwt.user.client.ui.MenuBar;
@@ -201,6 +202,7 @@
   @UiField(provided = true) @SuppressWarnings("rawtypes")
   Renderer doubleRenderer = DoubleRenderer.instance();
   @UiField ValueLabel<Double> myValueLabel;
+  @UiField IntegerBox myIntegerBox;
   @UiField DoubleBox myDoubleBox;
   @SuppressWarnings("rawtypes")
   @UiField ValueChangeWidget<List> myValueChangeWidget;
@@ -219,6 +221,9 @@
     this.doubleValueChangeEvent = event;
   }
 
+  @UiHandler({"myIntegerBox", "myDoubleBox"})
+  void onWildcardValueChange_Multi(ValueChangeEvent<?> event) { /* EMPTY */}
+
   @UiHandler("myValueChangeWidget")
   void onWildcardValueChange(ValueChangeEvent<?> event) { /* EMPTY */}
 
diff --git a/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.ui.xml b/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.ui.xml
index 5eea996..8ef7529 100644
--- a/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.ui.xml
+++ b/user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.ui.xml
@@ -691,6 +691,7 @@
 
   <gwt3:google.gwt.user.client.ui.ValueLabel ui:field='myValueLabel' renderer='{doubleRenderer}' />
 
+  <gwt:IntegerBox ui:field='myIntegerBox'  />
   <gwt:DoubleBox ui:field='myDoubleBox'  />
   <demo:ValueChangeWidget ui:field='myValueChangeWidget' />
   <demo:ValueChangeWidget ui:field='myValueChangeWidget_raw' />