Encapsulate NativeArray under ArrayHelper.
PiperOrigin-RevId: 365744903
Change-Id: If13d299c03ebd6a5ffb812e39ff125fd62a4a512
diff --git a/user/super/com/google/gwt/emul/java/io/Serializable.java b/user/super/com/google/gwt/emul/java/io/Serializable.java
index 9458df5..3d3a91d 100644
--- a/user/super/com/google/gwt/emul/java/io/Serializable.java
+++ b/user/super/com/google/gwt/emul/java/io/Serializable.java
@@ -15,8 +15,8 @@
*/
package java.io;
+import javaemul.internal.ArrayHelper;
import javaemul.internal.JsUtils;
-import javaemul.internal.NativeArray;
import jsinterop.annotations.JsMethod;
/**
@@ -38,7 +38,7 @@
|| type.equals("string")
|| instance.getTypeMarker()
// Arrays are implicitly instances of Serializable (JLS 10.7).
- || NativeArray.isArray(instance);
+ || ArrayHelper.isArray(instance);
}
// CHECKSTYLE_ON: end utility methods
}
diff --git a/user/super/com/google/gwt/emul/java/lang/Cloneable.java b/user/super/com/google/gwt/emul/java/lang/Cloneable.java
index 907f569..21db90a 100644
--- a/user/super/com/google/gwt/emul/java/lang/Cloneable.java
+++ b/user/super/com/google/gwt/emul/java/lang/Cloneable.java
@@ -15,7 +15,7 @@
*/
package java.lang;
-import javaemul.internal.NativeArray;
+import javaemul.internal.ArrayHelper;
import jsinterop.annotations.JsMethod;
/**
@@ -32,7 +32,7 @@
return instance.getTypeMarker()
// Arrays are implicitly instances of Cloneable (JLS 10.7).
- || NativeArray.isArray(instance);
+ || ArrayHelper.isArray(instance);
}
// CHECKSTYLE_ON: end utility methods
}
diff --git a/user/super/com/google/gwt/emul/java/util/Arrays.java b/user/super/com/google/gwt/emul/java/util/Arrays.java
index 3ddb92a..f0fa2fa 100644
--- a/user/super/com/google/gwt/emul/java/util/Arrays.java
+++ b/user/super/com/google/gwt/emul/java/util/Arrays.java
@@ -40,8 +40,8 @@
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
import javaemul.internal.ArrayHelper;
+import javaemul.internal.ArrayHelper.CompareFunction;
import javaemul.internal.JsUtils;
-import javaemul.internal.NativeArray.CompareFunction;
import jsinterop.annotations.JsFunction;
/**
@@ -1241,7 +1241,7 @@
}
public static void sort(double[] array) {
- ArrayHelper.asNativeArray(array).sort(getDoubleComparator());
+ ArrayHelper.sort(array, getDoubleComparator());
}
public static void sort(double[] array, int fromIndex, int toIndex) {
@@ -1250,7 +1250,7 @@
}
public static void sort(float[] array) {
- ArrayHelper.asNativeArray(array).sort(getDoubleComparator());
+ ArrayHelper.sort(array, getDoubleComparator());
}
public static void sort(float[] array, int fromIndex, int toIndex) {
@@ -1268,7 +1268,7 @@
}
public static void sort(long[] array) {
- ArrayHelper.asNativeArray(array).sort(getLongComparator());
+ ArrayHelper.sort(array, getLongComparator());
}
public static void sort(long[] array, int fromIndex, int toIndex) {
@@ -1700,7 +1700,7 @@
*/
private static void nativeSort(Object array, int fromIndex, int toIndex, CompareFunction fn) {
Object temp = ArrayHelper.unsafeClone(array, fromIndex, toIndex);
- ArrayHelper.asNativeArray(temp).sort(fn);
+ ArrayHelper.sort(temp, fn);
ArrayHelper.copy(temp, 0, array, fromIndex, toIndex - fromIndex);
}
@@ -1708,7 +1708,7 @@
* Sort an entire array of number primitives of integral type.
*/
private static void nativeIntegerSort(Object array) {
- ArrayHelper.asNativeArray(array).sort(getIntComparator());
+ ArrayHelper.sort(array, getIntComparator());
}
/**
diff --git a/user/super/com/google/gwt/emul/java/util/InternalHashCodeMap.java b/user/super/com/google/gwt/emul/java/util/InternalHashCodeMap.java
index ab96835..4b9a251 100644
--- a/user/super/com/google/gwt/emul/java/util/InternalHashCodeMap.java
+++ b/user/super/com/google/gwt/emul/java/util/InternalHashCodeMap.java
@@ -21,7 +21,6 @@
import java.util.Map.Entry;
import javaemul.internal.ArrayHelper;
import javaemul.internal.JsUtils;
-import javaemul.internal.NativeArray;
/**
* A simple wrapper around JavaScriptObject to provide {@link java.util.Map}-like semantics for any
@@ -148,7 +147,7 @@
}
private Entry<K, V>[] newEntryChain() {
- return JsUtils.uncheckedCast(new NativeArray());
+ return JsUtils.uncheckedCast(new Object[0]);
}
/**
diff --git a/user/super/com/google/gwt/emul/javaemul/internal/ArrayHelper.java b/user/super/com/google/gwt/emul/javaemul/internal/ArrayHelper.java
index c388935..ed3ba73 100644
--- a/user/super/com/google/gwt/emul/javaemul/internal/ArrayHelper.java
+++ b/user/super/com/google/gwt/emul/javaemul/internal/ArrayHelper.java
@@ -15,14 +15,13 @@
*/
package javaemul.internal;
-import jsinterop.annotations.JsPackage;
+import jsinterop.annotations.JsFunction;
+import jsinterop.annotations.JsMethod;
import jsinterop.annotations.JsProperty;
import jsinterop.annotations.JsType;
-/**
- * Provides utilities to perform operations on Arrays.
- */
-public class ArrayHelper {
+/** Provides utilities to perform operations on Arrays. */
+public final class ArrayHelper {
public static final int ARRAY_PROCESS_BATCH_SIZE = 10000;
@@ -43,6 +42,9 @@
return ArrayStamper.stampJavaTypeInfo(new NativeArray(length), array);
}
+ @JsMethod(name = "Array.isArray", namespace = "<window>")
+ public static native boolean isArray(Object o);
+
public static int getLength(Object array) {
return asNativeArray(array).length;
}
@@ -85,14 +87,14 @@
int batchEnd = Math.min(batchStart + ARRAY_PROCESS_BATCH_SIZE, end);
len = batchEnd - batchStart;
Object[] spliceArgs = unsafeClone(src, batchStart, batchEnd);
- asNativeArray(spliceArgs).splice(0, 0, destOfs, overwrite ? len : 0);
+ asNativeArray(spliceArgs).splice(0, 0, (double) destOfs, (double) (overwrite ? len : 0));
getSpliceFunction().apply(destArray, spliceArgs);
batchStart = batchEnd;
destOfs += len;
}
}
- @JsType(isNative = true, name = "Function", namespace = JsPackage.GLOBAL)
+ @JsType(isNative = true, name = "Function", namespace = "<window>")
private static class NativeFunction {
public native String apply(Object thisContext, Object[] argsArray);
}
@@ -100,8 +102,35 @@
@JsProperty(name = "Array.prototype.splice", namespace = "<window>")
private static native NativeFunction getSpliceFunction();
- public static NativeArray asNativeArray(Object array) {
+ /** Compare function for sort. */
+ @JsFunction
+ public interface CompareFunction {
+ double compare(Object d1, Object d2);
+ }
+
+ public static void sort(Object array, CompareFunction fn) {
+ asNativeArray(array).sort(fn);
+ }
+
+ private static NativeArray asNativeArray(Object array) {
return JsUtils.uncheckedCast(array);
}
+
+ @JsType(isNative = true, name = "Array", namespace = "<window>")
+ private static class NativeArray {
+ int length;
+
+ NativeArray(int length) {}
+
+ native Object concat(Object arrayToAdd);
+
+ native Object[] slice(int fromIndex, int toIndex);
+
+ native void splice(int index, int deleteCount, Object... value);
+
+ native <T> void sort(CompareFunction compareFunction);
+ }
+
+ private ArrayHelper() {}
}
diff --git a/user/super/com/google/gwt/emul/javaemul/internal/NativeArray.java b/user/super/com/google/gwt/emul/javaemul/internal/NativeArray.java
deleted file mode 100644
index 792ab3c..0000000
--- a/user/super/com/google/gwt/emul/javaemul/internal/NativeArray.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2017 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-package javaemul.internal;
-
-import javaemul.internal.annotations.DoNotAutobox;
-import jsinterop.annotations.JsFunction;
-import jsinterop.annotations.JsType;
-
-/**
- * Simple class to work with native array API.
- */
-@JsType(isNative = true, name = "Array", namespace = "<window>")
-public class NativeArray {
- /**
- * Compare function for sort.
- */
- @JsFunction
- public interface CompareFunction {
- double compare(Object d1, Object d2);
- }
-
- public int length;
- public NativeArray() { }
- public NativeArray(int length) { }
- public native Object concat(Object arrayToAdd);
- public native Object[] slice(int fromIndex, int toIndex);
- public native void splice(int index, int deleteCount, @DoNotAutobox Object... value);
- public native <T> void sort(CompareFunction compareFunction);
-
- public static native boolean isArray(Object o);
-}