Roberto Lublinerman has uploaded a new change for review.

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


Change subject: Avoid creating anonymous inner classes with wildcard type parameters.
......................................................................

Avoid creating anonymous inner classes with wildcard type parameters.

Under Java 7 wildcards can not be type parameters of superclasses in the extends clause nor superinterfaces in the implementing clause. Anonymous inner classes can not have wildcards
in their type parameters.


Change-Id: Ifbcd6ecec455512a7da5eb473c6bf2e9f402f0ea
---
M dev/core/src/com/google/gwt/core/ext/typeinfo/JParameterizedType.java
M dev/core/src/com/google/gwt/dev/javac/typemodel/JParameterizedType.java
M user/src/com/google/gwt/uibinder/rebind/HandlerEvaluator.java
3 files changed, 40 insertions(+), 2 deletions(-)



diff --git a/dev/core/src/com/google/gwt/core/ext/typeinfo/JParameterizedType.java b/dev/core/src/com/google/gwt/core/ext/typeinfo/JParameterizedType.java
index 3f26dec..0523c8d 100644
--- a/dev/core/src/com/google/gwt/core/ext/typeinfo/JParameterizedType.java
+++ b/dev/core/src/com/google/gwt/core/ext/typeinfo/JParameterizedType.java
@@ -32,4 +32,11 @@
   JClassType getRawType();

   JClassType[] getTypeArgs();
+
+  /**
+   * Returns whether the parametrized type has any wildcards.
+   *
+ * @return {@code true} if wildcards are present, {@code false} otherwise.
+   */
+  boolean hasWildcards();
 }
diff --git a/dev/core/src/com/google/gwt/dev/javac/typemodel/JParameterizedType.java b/dev/core/src/com/google/gwt/dev/javac/typemodel/JParameterizedType.java
index f6b98eb..6453bb9 100644
--- a/dev/core/src/com/google/gwt/dev/javac/typemodel/JParameterizedType.java +++ b/dev/core/src/com/google/gwt/dev/javac/typemodel/JParameterizedType.java
@@ -330,6 +330,25 @@
   }

   @Override
+  /**
+   * Returns whether the parametrized type has any wildcards.
+   *
+ * @return {@code true} if wildcards are present, {@code false} otherwise.
+   */
+  public boolean hasWildcards() {
+    for (JClassType parameter : getTypeArgs()) {
+      if (parameter.isWildcard() != null) {
+        return true;
+      }
+      if (parameter.isParameterized() != null &&
+          parameter.isParameterized().hasWildcards()) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  @Override
   public JGenericType isGenericType() {
     return null;
   }
diff --git a/user/src/com/google/gwt/uibinder/rebind/HandlerEvaluator.java b/user/src/com/google/gwt/uibinder/rebind/HandlerEvaluator.java
index afbecbd..af6f3f2 100644
--- a/user/src/com/google/gwt/uibinder/rebind/HandlerEvaluator.java
+++ b/user/src/com/google/gwt/uibinder/rebind/HandlerEvaluator.java
@@ -199,12 +199,24 @@
           eventType.getName());
     }

+ // Avoid wildcards when creating anonymous classes as it does not compile under Java 7,
+    // use raw types when this happens.
+    String handlerSourceName =
+ handlerType.isParameterized() != null && handlerType.isParameterized().hasWildcards() ?
+        handlerType.getQualifiedSourceName() :
+        handlerType.getParameterizedQualifiedSourceName();
+
+    String eventSourceName =
+ eventType.isParameterized() != null && eventType.isParameterized().hasWildcards() ?
+        eventType.getQualifiedSourceName() :
+        eventType.getParameterizedQualifiedSourceName();
+
     writer.newline();
     writer.write("final %1$s %2$s = new %1$s() {",
-        handlerType.getParameterizedQualifiedSourceName(), handlerVarName);
+        handlerSourceName, handlerVarName);
     writer.indent();
     writer.write("public void %1$s(%2$s event) {", methods[0].getName(),
-        eventType.getParameterizedQualifiedSourceName());
+        eventSourceName);
     writer.indent();
     writer.write("%1$s.%2$s(event);", uiOwner, boundMethod);
     writer.outdent();

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ifbcd6ecec455512a7da5eb473c6bf2e9f402f0ea
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