Author: [email protected]
Date: Tue Mar 31 19:20:10 2009
New Revision: 5142
Modified:
trunk/dev/core/src/com/google/gwt/dev/shell/CompilingClassLoader.java
trunk/user/test/com/google/gwt/dev/jjs/test/SingleJsoImplTest.java
Log:
Fix a bug where array return types could not be used with SingleJsoImpl
methods.
Reported by: pmuetschard
Patch by: bobv
Review by: jat, scottb
Modified:
trunk/dev/core/src/com/google/gwt/dev/shell/CompilingClassLoader.java
==============================================================================
--- trunk/dev/core/src/com/google/gwt/dev/shell/CompilingClassLoader.java
(original)
+++ trunk/dev/core/src/com/google/gwt/dev/shell/CompilingClassLoader.java
Tue Mar 31 19:20:10 2009
@@ -19,6 +19,7 @@
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.core.ext.UnableToCompleteException;
import com.google.gwt.core.ext.TreeLogger.Type;
+import com.google.gwt.core.ext.typeinfo.JArrayType;
import com.google.gwt.core.ext.typeinfo.JClassType;
import com.google.gwt.core.ext.typeinfo.JMethod;
import com.google.gwt.core.ext.typeinfo.JParameter;
@@ -1001,12 +1002,16 @@
}
private String getBinaryOrPrimitiveName(JType type) {
+ JArrayType asArray = type.isArray();
JClassType asClass = type.isClassOrInterface();
JPrimitiveType asPrimitive = type.isPrimitive();
if (asClass != null) {
return getBinaryName(asClass);
} else if (asPrimitive != null) {
return asPrimitive.getQualifiedSourceName();
+ } else if (asArray != null) {
+ JType componentType = asArray.getComponentType();
+ return getBinaryOrPrimitiveName(componentType) + "[]";
} else {
throw new InternalCompilerException("Cannot create binary name for "
+ type.getQualifiedSourceName());
Modified: trunk/user/test/com/google/gwt/dev/jjs/test/SingleJsoImplTest.java
==============================================================================
--- trunk/user/test/com/google/gwt/dev/jjs/test/SingleJsoImplTest.java
(original)
+++ trunk/user/test/com/google/gwt/dev/jjs/test/SingleJsoImplTest.java Tue
Mar 31 19:20:10 2009
@@ -106,6 +106,56 @@
}
}
+ static class JavaUsesArrays implements UsesArrays {
+ public void acceptInt3Array(int[][][] arr) {
+ assertTrue(arr.length == 3);
+ }
+
+ public void acceptIntArray(int[] arr) {
+ assertTrue(arr.length == 1);
+ }
+
+ public void acceptObject3Array(Object[][][] arr) {
+ assertTrue(arr.length == 3);
+ }
+
+ public void acceptObjectArray(Object[] arr) {
+ assertTrue(arr.length == 1);
+ }
+
+ public void acceptString3Array(String[][][] arr) {
+ assertTrue(arr.length == 3);
+ }
+
+ public void acceptStringArray(String[] arr) {
+ assertTrue(arr.length == 1);
+ }
+
+ public int[][][] returnInt3Array() {
+ return new int[3][2][1];
+ }
+
+ public int[] returnIntArray() {
+ return new int[1];
+ }
+
+ public Object[][][] returnObject3Array() {
+ return new Object[3][2][1];
+ }
+
+ public Object[] returnObjectArray() {
+ return new Object[1];
+ }
+
+ public String[][][] returnString3Array() {
+ return new String[3][2][1];
+ }
+
+ public String[] returnStringArray() {
+ return new String[1];
+ }
+ }
+
static class JsoAdder extends JavaScriptObject implements Adder {
protected JsoAdder() {
}
@@ -223,6 +273,60 @@
}
}
+ static final class JsoUsesArrays extends JavaScriptObject implements
+ UsesArrays {
+ protected JsoUsesArrays() {
+ }
+
+ public void acceptInt3Array(int[][][] arr) {
+ assertTrue(arr.length == 3);
+ }
+
+ public void acceptIntArray(int[] arr) {
+ assertTrue(arr.length == 1);
+ }
+
+ public void acceptObject3Array(Object[][][] arr) {
+ assertTrue(arr.length == 3);
+ }
+
+ public void acceptObjectArray(Object[] arr) {
+ assertTrue(arr.length == 1);
+ }
+
+ public void acceptString3Array(String[][][] arr) {
+ assertTrue(arr.length == 3);
+ }
+
+ public void acceptStringArray(String[] arr) {
+ assertTrue(arr.length == 1);
+ }
+
+ public int[][][] returnInt3Array() {
+ return new int[3][2][1];
+ }
+
+ public int[] returnIntArray() {
+ return new int[1];
+ }
+
+ public Object[][][] returnObject3Array() {
+ return new Object[3][2][1];
+ }
+
+ public Object[] returnObjectArray() {
+ return new Object[1];
+ }
+
+ public String[][][] returnString3Array() {
+ return new String[3][2][1];
+ }
+
+ public String[] returnStringArray() {
+ return new String[1];
+ }
+ }
+
/**
* Ensure that SingleJsoImpl interfaces can be extended and implemented
by
* regular Java types.
@@ -273,6 +377,35 @@
interface Tag {
}
+ /**
+ * Ensure that arrays are valid return and parameter types.
+ */
+ interface UsesArrays {
+ void acceptInt3Array(int[][][] arr);
+
+ void acceptIntArray(int[] arr);
+
+ void acceptObject3Array(Object[][][] arr);
+
+ void acceptObjectArray(Object[] arr);
+
+ void acceptString3Array(String[][][] arr);
+
+ void acceptStringArray(String[] arr);
+
+ int[][][] returnInt3Array();
+
+ int[] returnIntArray();
+
+ Object[][][] returnObject3Array();
+
+ Object[] returnObjectArray();
+
+ String[][][] returnString3Array();
+
+ String[] returnStringArray();
+ }
+
private static native JsoAdder makeAdder(int offset) /*-{
return {offset:offset};
}-*/;
@@ -299,6 +432,24 @@
InnerType i = (InnerType) JavaScriptObject.createObject();
assertEquals(5, a.call(i, 5).get());
assertEquals(5, i.get());
+ }
+
+ public void testCallsWithArrays() {
+ UsesArrays a = JavaScriptObject.createObject().<JsoUsesArrays> cast();
+ a.acceptIntArray(a.returnIntArray());
+ a.acceptInt3Array(a.returnInt3Array());
+ a.acceptStringArray(a.returnStringArray());
+ a.acceptString3Array(a.returnString3Array());
+ a.acceptObjectArray(a.returnStringArray());
+ a.acceptObject3Array(a.returnString3Array());
+
+ a = new JavaUsesArrays();
+ a.acceptIntArray(a.returnIntArray());
+ a.acceptInt3Array(a.returnInt3Array());
+ a.acceptStringArray(a.returnStringArray());
+ a.acceptString3Array(a.returnString3Array());
+ a.acceptObjectArray(a.returnStringArray());
+ a.acceptObject3Array(a.returnString3Array());
}
public void testDualCase() {
--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---