Add getJsniSignature() to JAbstractMethod as a convenience for Generator developers.

Patch by: bobv
Review by: jat

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@5595 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/core/ext/typeinfo/JAbstractMethod.java b/dev/core/src/com/google/gwt/core/ext/typeinfo/JAbstractMethod.java
index 4b11ccf..0a80f52 100644
--- a/dev/core/src/com/google/gwt/core/ext/typeinfo/JAbstractMethod.java
+++ b/dev/core/src/com/google/gwt/core/ext/typeinfo/JAbstractMethod.java
@@ -92,6 +92,13 @@
    */
   public abstract JClassType getEnclosingType();
 
+  /**
+   * Returns a string contating a JSNI reference to the method.
+   * 
+   * @return <code>@package.Class::method(Lpackage/Param;...)</code>
+   */
+  public abstract String getJsniSignature();
+
   @Deprecated
   public final String[][] getMetaData(String tagName) {
     return TypeOracle.NO_STRING_ARR_ARR;
diff --git a/dev/core/src/com/google/gwt/core/ext/typeinfo/JConstructor.java b/dev/core/src/com/google/gwt/core/ext/typeinfo/JConstructor.java
index 8d90386..5f1a3b4 100644
--- a/dev/core/src/com/google/gwt/core/ext/typeinfo/JConstructor.java
+++ b/dev/core/src/com/google/gwt/core/ext/typeinfo/JConstructor.java
@@ -23,7 +23,7 @@
  */
 public class JConstructor extends JAbstractMethod {
   private final JClassType enclosingType;
-  
+
   public JConstructor(JClassType enclosingType, String name) {
     this(enclosingType, name, null, null);
   }
@@ -47,6 +47,17 @@
     return enclosingType;
   }
 
+  public String getJsniSignature() {
+    StringBuilder sb = new StringBuilder("@");
+    sb.append(getEnclosingType().getQualifiedSourceName());
+    sb.append("::new(");
+    for (JParameter param : getParameters()) {
+      sb.append(param.getType().getJNISignature());
+    }
+    sb.append(")");
+    return sb.toString();
+  }
+
   @Override
   public String getReadableDeclaration() {
     String[] names = TypeOracle.modifierBitsToNames(getModifierBits());
diff --git a/dev/core/src/com/google/gwt/core/ext/typeinfo/JMethod.java b/dev/core/src/com/google/gwt/core/ext/typeinfo/JMethod.java
index b53c643..28d3624 100644
--- a/dev/core/src/com/google/gwt/core/ext/typeinfo/JMethod.java
+++ b/dev/core/src/com/google/gwt/core/ext/typeinfo/JMethod.java
@@ -30,7 +30,7 @@
   public JMethod(JClassType enclosingType, String name) {
     this(enclosingType, name, null, null);
   }
-  
+
   public JMethod(JClassType enclosingType, String name,
       Map<Class<? extends Annotation>, Annotation> declaredAnnotations,
       JTypeParameter[] jtypeParameters) {
@@ -50,6 +50,19 @@
     return enclosingType;
   }
 
+  public String getJsniSignature() {
+    StringBuilder sb = new StringBuilder("@");
+    sb.append(getEnclosingType().getQualifiedSourceName());
+    sb.append("::");
+    sb.append(getName());
+    sb.append("(");
+    for (JParameter param : getParameters()) {
+      sb.append(param.getType().getJNISignature());
+    }
+    sb.append(")");
+    return sb.toString();
+  }
+
   @Override
   public String getReadableDeclaration() {
     return getReadableDeclaration(getModifierBits());
diff --git a/user/src/com/google/gwt/resources/rebind/context/AbstractClientBundleGenerator.java b/user/src/com/google/gwt/resources/rebind/context/AbstractClientBundleGenerator.java
index 6d93493..d48a4ea 100644
--- a/user/src/com/google/gwt/resources/rebind/context/AbstractClientBundleGenerator.java
+++ b/user/src/com/google/gwt/resources/rebind/context/AbstractClientBundleGenerator.java
@@ -605,8 +605,8 @@
     sw.indent();
     for (List<JMethod> list : taskList.values()) {
       for (JMethod m : list) {
-        sw.println("case '" + m.getName() + "': return this.@"
-            + createdClassName + "::" + (m.getName() + "()()") + ";");
+        sw.println("case '" + m.getName() + "': return this."
+            + m.getJsniSignature() + "();");
       }
     }
     sw.outdent();