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); -}