Roberto Lublinerman has uploaded a new change for review.

  https://gwt-review.googlesource.com/2450


Change subject: Allow @UIHandler annotated methods to be private.
......................................................................

Allow @UIHandler annotated methods to be private.

Even though @UIHandler annotated methods were not allowed to
be private, a bug in JDT 3.4 was dropping the private modifier from
methods that has annotations in parameters and this was causing UIHandler
to work with private methods.

The JDT bug is fixed in JDT 3.8, thus migrating to JDT 3.8 causes
breakage in many projects that unknowingly depend on the bug being present.

Change-Id: I03c7787ced5a339a74d49ec917d48edebd5dbb8f
---
M user/src/com/google/gwt/uibinder/rebind/HandlerEvaluator.java
M user/test/com/google/gwt/uibinder/test/client/HandlerDemo.java
2 files changed, 13 insertions(+), 11 deletions(-)



diff --git a/user/src/com/google/gwt/uibinder/rebind/HandlerEvaluator.java b/user/src/com/google/gwt/uibinder/rebind/HandlerEvaluator.java
index afbecbd..7420c8c 100644
--- a/user/src/com/google/gwt/uibinder/rebind/HandlerEvaluator.java
+++ b/user/src/com/google/gwt/uibinder/rebind/HandlerEvaluator.java
@@ -115,17 +115,12 @@

     // Iterate through all methods defined in the class.
     for (JMethod method : ownerClass.getUiHandlers()) {
-      // Evaluate the method.
-      String boundMethod = method.getName();
-      if (method.isPrivate()) {
-        logger.die("Method '%s' cannot be private.", boundMethod);
-      }

       // Retrieves both event and handler types.
       JParameter[] parameters = method.getParameters();
       if (parameters.length != 1) {
logger.die("Method '%s' must have a single event parameter defined.",
-            boundMethod);
+           method.getName());
       }
       JClassType eventType = parameters[0].getType().isClass();
       if (eventType == null) {
@@ -141,7 +136,7 @@
       // Cool to add the handler in the output.
       String handlerVarName = HANDLER_BASE_NAME + (++varCounter);
       writeHandler(writer, uiOwner, handlerVarName, handlerType, eventType,
-          boundMethod);
+          method);

       // Adds the handler created above.
       UiHandler annotation = method.getAnnotation(UiHandler.class);
@@ -151,7 +146,7 @@
         if (fieldWriter == null) {
           logger.die(
("Method '%s' can not be bound. You probably missed ui:field='%s' "
-                  + "in the template."), boundMethod, objectName);
+                  + "in the template."), method.getName(), objectName);
         }

         // Retrieves the "add handler" method in the object.
@@ -181,7 +176,7 @@
    */
   protected void writeHandler(IndentedWriter writer, String uiOwner,
       String handlerVarName, JClassType handlerType, JClassType eventType,
-      String boundMethod) throws UnableToCompleteException {
+      JMethod boundMethod) throws UnableToCompleteException {

     // Retrieves the single method (usually 'onSomething') related to all
     // handlers. Ex: onClick in ClickHandler, onBlur in BlurHandler ...
@@ -206,9 +201,15 @@
     writer.write("public void %1$s(%2$s event) {", methods[0].getName(),
         eventType.getParameterizedQualifiedSourceName());
     writer.indent();
-    writer.write("%1$s.%2$s(event);", uiOwner, boundMethod);
+ writer.write("_%1$s__native(%2$s, event);", methods[0].getName(), uiOwner);
     writer.outdent();
     writer.write("}");
+ writer.write("private native void _%1$s__native(Object owner, %2$s event) /*-{", + methods[0].getName(), eventType.getParameterizedQualifiedSourceName());
+    writer.indent();
+    writer.write("owner.%1$s(event);", boundMethod.getJsniSignature());
+    writer.outdent();
+    writer.write("}-*/;");
     writer.outdent();
     writer.write("};");
   }
diff --git a/user/test/com/google/gwt/uibinder/test/client/HandlerDemo.java b/user/test/com/google/gwt/uibinder/test/client/HandlerDemo.java
index 4416a5a..f0eaacf 100644
--- a/user/test/com/google/gwt/uibinder/test/client/HandlerDemo.java
+++ b/user/test/com/google/gwt/uibinder/test/client/HandlerDemo.java
@@ -65,8 +65,9 @@
     eventMessage(event);
   }

+  // private event handler should work.
   @UiHandler({"buttonClick", "labelClick"})
-  void doClick(ClickEvent event) {
+  private void doClick(ClickEvent event) {
     eventMessage(event);
   }


--
To view, visit https://gwt-review.googlesource.com/2450
To unsubscribe, visit https://gwt-review.googlesource.com/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I03c7787ced5a339a74d49ec917d48edebd5dbb8f
Gerrit-PatchSet: 1
Gerrit-Project: gwt
Gerrit-Branch: master
Gerrit-Owner: Roberto Lublinerman <[email protected]>

--
--
http://groups.google.com/group/Google-Web-Toolkit-Contributors
--- You received this message because you are subscribed to the Google Groups "Google Web Toolkit Contributors" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to