Author: b...@google.com
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to