Make the push operation explicit in ArrayList.

This will enable super-sourcing the behavior in J2WASM.

PiperOrigin-RevId: 368155440
Change-Id: I872d334102fc4cecdf6975bac1da83452f2f70fc
diff --git a/user/super/com/google/gwt/emul/java/util/ArrayList.java b/user/super/com/google/gwt/emul/java/util/ArrayList.java
index aba65df..0180427 100644
--- a/user/super/com/google/gwt/emul/java/util/ArrayList.java
+++ b/user/super/com/google/gwt/emul/java/util/ArrayList.java
@@ -27,7 +27,6 @@
 import java.util.function.Consumer;
 import java.util.function.Predicate;
 import java.util.function.UnaryOperator;
-
 import javaemul.internal.ArrayHelper;
 
 /**
@@ -78,7 +77,7 @@
 
   @Override
   public boolean add(E o) {
-    array[array.length] = o;
+    ArrayHelper.push(array, o);
     return true;
   }
 
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 ed3ba73..8f40c34 100644
--- a/user/super/com/google/gwt/emul/javaemul/internal/ArrayHelper.java
+++ b/user/super/com/google/gwt/emul/javaemul/internal/ArrayHelper.java
@@ -53,15 +53,19 @@
     asNativeArray(array).length = length;
   }
 
-  public static void removeFrom(Object array, int index, int deleteCount) {
+  public static void push(Object[] array, Object o) {
+    asNativeArray(array).push(o);
+  }
+
+  public static void removeFrom(Object[] array, int index, int deleteCount) {
     asNativeArray(array).splice(index, deleteCount);
   }
 
-  public static void insertTo(Object array, int index, Object value) {
+  public static void insertTo(Object[] array, int index, Object value) {
     asNativeArray(array).splice(index, 0, value);
   }
 
-  public static void insertTo(Object array, int index, Object[] values) {
+  public static void insertTo(Object[] array, int index, Object[] values) {
     copy(values, 0, array, index, values.length, false);
   }
 
@@ -122,7 +126,7 @@
 
     NativeArray(int length) {}
 
-    native Object concat(Object arrayToAdd);
+    native void push(Object item);
 
     native Object[] slice(int fromIndex, int toIndex);