Make Native[].class literals be transformed into JSO[].class.

Change-Id: Ibbb3b42597998512166aa2f5078fa30fa7e33e80
diff --git a/dev/core/src/com/google/gwt/dev/jjs/impl/ImplementClassLiteralsAsFields.java b/dev/core/src/com/google/gwt/dev/jjs/impl/ImplementClassLiteralsAsFields.java
index 4a51dbd..eabb035 100644
--- a/dev/core/src/com/google/gwt/dev/jjs/impl/ImplementClassLiteralsAsFields.java
+++ b/dev/core/src/com/google/gwt/dev/jjs/impl/ImplementClassLiteralsAsFields.java
@@ -210,7 +210,7 @@
     @Override
     public void endVisit(JClassLiteral x, Context ctx) {
       JType type = x.getRefType();
-      if (type instanceof JArrayType && !type.isJsNative()) {
+      if (type instanceof JArrayType) {
         // Replace array class literals by an expression to obtain the class literal from the
         // leaf type of the array.
         JArrayType arrayType = (JArrayType) type;
@@ -218,8 +218,9 @@
             new JClassLiteral(x.getSourceInfo(), arrayType.getLeafType());
         resolveClassLiteral(leafTypeClassLiteral);
 
+        int dims = type.isJsNative() ? 1 : arrayType.getDims();
         JExpression arrayClassLiteralExpression = program.createArrayClassLiteralExpression(
-            x.getSourceInfo(), leafTypeClassLiteral, arrayType.getDims());
+            x.getSourceInfo(), leafTypeClassLiteral, dims);
         ctx.replaceMe(arrayClassLiteralExpression);
       } else {
         // Just resolve the class literal.
@@ -456,7 +457,8 @@
    * </pre>
    */
   private JField resolveClassLiteralField(JType type) {
-    type = type.isJsNative() ? program.getJavaScriptObject() : program.normalizeJsoType(type);
+    type = type.isJsNative()
+        ? program.getJavaScriptObject() : program.normalizeJsoType(type);
     JField field = classLiteralFields.get(type);
     if (field == null) {
       // Create the allocation expression FIRST since this may be recursive on
diff --git a/user/test/com/google/gwt/core/interop/NativeJsTypeTest.java b/user/test/com/google/gwt/core/interop/NativeJsTypeTest.java
index 26b4110..2ccdcec 100644
--- a/user/test/com/google/gwt/core/interop/NativeJsTypeTest.java
+++ b/user/test/com/google/gwt/core/interop/NativeJsTypeTest.java
@@ -26,7 +26,7 @@
 import jsinterop.annotations.JsType;
 
 /**
- * Tests JsType functionality.
+ * Tests native JsType functionality.
  */
 @SuppressWarnings("cast")
 public class NativeJsTypeTest extends GWTTestCase {
@@ -66,10 +66,11 @@
   public void testClassLiterals() {
     assertEquals(JavaScriptObject.class, MyNativeJsType.class);
     assertEquals(JavaScriptObject.class, MyNativeJsTypeInterface.class);
-    assertEquals(JavaScriptObject.class, MyNativeJsType[].class);
-    assertEquals(JavaScriptObject.class, MyNativeJsTypeInterface[].class);
-    assertEquals(JavaScriptObject.class, MyNativeJsType[][].class);
-    assertEquals(JavaScriptObject.class, MyNativeJsTypeInterface[][].class);
+    assertEquals(JavaScriptObject[].class, MyNativeJsType[].class);
+    assertEquals(JavaScriptObject[].class, MyNativeJsTypeInterface[].class);
+    assertEquals(JavaScriptObject[].class, MyNativeJsType[][].class);
+    assertEquals(JavaScriptObject[].class, MyNativeJsTypeInterface[][].class);
+    assertEquals(JavaScriptObject[].class, JavaScriptObject.createArray().getClass());
   }
 
   public void testGetClass() {