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();