Simplify ArrayList.removeIf.
Change-Id: I9cb244537a128d5c06cbda6fd9ddb53b6372cfd0
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 6cca168..aba65df 100644
--- a/user/super/com/google/gwt/emul/java/util/ArrayList.java
+++ b/user/super/com/google/gwt/emul/java/util/ArrayList.java
@@ -206,21 +206,25 @@
@Override
public boolean removeIf(Predicate<? super E> filter) {
checkNotNull(filter);
- int length = array.length;
- if (length == 0) {
- return false;
- }
- E[] newArray = ArrayHelper.createFrom(array, length);
- int i = 0;
- for (E e : array) {
- if (!filter.test(e)) {
- newArray[i++] = e;
+
+ E[] newArray = null;
+ int newIndex = 0;
+ for (int index = 0; index < array.length; ++index) {
+ E e = array[index];
+
+ if (filter.test(e)) {
+ if (newArray == null) {
+ newArray = ArrayHelper.clone(array, 0, index);
+ newIndex = index;
+ }
+ } else if (newArray != null) {
+ newArray[newIndex++] = e;
}
}
- if (i == length) {
+
+ if (newArray == null) {
return false;
}
- ArrayHelper.setLength(newArray, i);
array = newArray;
return true;
}