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