Skip to content

Commit

Permalink
Remove workaround for an ancient Android toArray bug.
Browse files Browse the repository at this point in the history
I can't seem to access the Android issue report anymore, but there are details in [this Harmony issue](https://issues.apache.org/jira/browse/HARMONY-6681).

The Android codebase was fixed in 2012, which gives it more than enough [time to make it into Lollipop](https://en.wikipedia.org/wiki/Android_version_history), which is the minimum version that we now test with.

RELNOTES=n/a
PiperOrigin-RevId: 634956139
  • Loading branch information
cpovirk authored and Google Java Core Libraries committed May 18, 2024
1 parent f0c7099 commit 4ed4972
Show file tree
Hide file tree
Showing 4 changed files with 4 additions and 146 deletions.
35 changes: 0 additions & 35 deletions android/guava/src/com/google/common/cache/LocalCache.java
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@
import com.google.common.collect.AbstractSequentialIterator;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterators;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.google.common.primitives.Ints;
Expand All @@ -67,7 +66,6 @@
import java.util.AbstractMap;
import java.util.AbstractQueue;
import java.util.AbstractSet;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;
Expand Down Expand Up @@ -4438,26 +4436,6 @@ public boolean isEmpty() {
public void clear() {
LocalCache.this.clear();
}

// super.toArray() may misbehave if size() is inaccurate, at least on old versions of Android.
// https://code.google.com/p/android/issues/detail?id=36519 / http://r.android.com/47508

@Override
public Object[] toArray() {
return toArrayList(this).toArray();
}

@Override
public <E> E[] toArray(E[] a) {
return toArrayList(this).toArray(a);
}
}

private static <E> ArrayList<E> toArrayList(Collection<E> c) {
// Avoid calling ArrayList(Collection), which may call back into toArray.
ArrayList<E> result = new ArrayList<>(c.size());
Iterators.addAll(result, c.iterator());
return result;
}

final class KeySet extends AbstractCacheSet<K> {
Expand Down Expand Up @@ -4503,19 +4481,6 @@ public Iterator<V> iterator() {
public boolean contains(Object o) {
return LocalCache.this.containsValue(o);
}

// super.toArray() may misbehave if size() is inaccurate, at least on old versions of Android.
// https://code.google.com/p/android/issues/detail?id=36519 / http://r.android.com/47508

@Override
public Object[] toArray() {
return toArrayList(this).toArray();
}

@Override
public <E> E[] toArray(E[] a) {
return toArrayList(this).toArray(a);
}
}

final class EntrySet extends AbstractCacheSet<Entry<K, V>> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@
import java.util.AbstractCollection;
import java.util.AbstractMap;
import java.util.AbstractSet;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;
Expand Down Expand Up @@ -2729,7 +2728,7 @@ public Entry<K, V> next() {
}

@WeakOuter
final class KeySet extends SafeToArraySet<K> {
final class KeySet extends AbstractSet<K> {

@Override
public Iterator<K> iterator() {
Expand Down Expand Up @@ -2789,23 +2788,10 @@ public boolean contains(Object o) {
public void clear() {
MapMakerInternalMap.this.clear();
}

// super.toArray() may misbehave if size() is inaccurate, at least on old versions of Android.
// https://code.google.com/p/android/issues/detail?id=36519 / http://r.android.com/47508

@Override
public Object[] toArray() {
return toArrayList(this).toArray();
}

@Override
public <T> T[] toArray(T[] a) {
return toArrayList(this).toArray(a);
}
}

@WeakOuter
final class EntrySet extends SafeToArraySet<Entry<K, V>> {
final class EntrySet extends AbstractSet<Entry<K, V>> {

@Override
public Iterator<Entry<K, V>> iterator() {
Expand Down Expand Up @@ -2853,28 +2839,6 @@ public void clear() {
}
}

private abstract static class SafeToArraySet<E> extends AbstractSet<E> {
// super.toArray() may misbehave if size() is inaccurate, at least on old versions of Android.
// https://code.google.com/p/android/issues/detail?id=36519 / http://r.android.com/47508

@Override
public Object[] toArray() {
return toArrayList(this).toArray();
}

@Override
public <T> T[] toArray(T[] a) {
return toArrayList(this).toArray(a);
}
}

private static <E> ArrayList<E> toArrayList(Collection<E> c) {
// Avoid calling ArrayList(Collection), which may call back into toArray.
ArrayList<E> result = new ArrayList<>(c.size());
Iterators.addAll(result, c.iterator());
return result;
}

// Serialization Support

private static final long serialVersionUID = 5;
Expand Down
35 changes: 0 additions & 35 deletions guava/src/com/google/common/cache/LocalCache.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@
import com.google.common.collect.AbstractSequentialIterator;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterators;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.google.common.primitives.Ints;
Expand All @@ -66,7 +65,6 @@
import java.util.AbstractMap;
import java.util.AbstractQueue;
import java.util.AbstractSet;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;
Expand Down Expand Up @@ -4592,26 +4590,6 @@ public boolean isEmpty() {
public void clear() {
LocalCache.this.clear();
}

// super.toArray() may misbehave if size() is inaccurate, at least on old versions of Android.
// https://code.google.com/p/android/issues/detail?id=36519 / http://r.android.com/47508

@Override
public Object[] toArray() {
return toArrayList(this).toArray();
}

@Override
public <E> E[] toArray(E[] a) {
return toArrayList(this).toArray(a);
}
}

private static <E> ArrayList<E> toArrayList(Collection<E> c) {
// Avoid calling ArrayList(Collection), which may call back into toArray.
ArrayList<E> result = new ArrayList<>(c.size());
Iterators.addAll(result, c.iterator());
return result;
}

boolean removeIf(BiPredicate<? super K, ? super V> filter) {
Expand Down Expand Up @@ -4680,19 +4658,6 @@ public boolean removeIf(Predicate<? super V> filter) {
public boolean contains(Object o) {
return LocalCache.this.containsValue(o);
}

// super.toArray() may misbehave if size() is inaccurate, at least on old versions of Android.
// https://code.google.com/p/android/issues/detail?id=36519 / http://r.android.com/47508

@Override
public Object[] toArray() {
return toArrayList(this).toArray();
}

@Override
public <E> E[] toArray(E[] a) {
return toArrayList(this).toArray(a);
}
}

final class EntrySet extends AbstractCacheSet<Entry<K, V>> {
Expand Down
40 changes: 2 additions & 38 deletions guava/src/com/google/common/collect/MapMakerInternalMap.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@
import java.util.AbstractCollection;
import java.util.AbstractMap;
import java.util.AbstractSet;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;
Expand Down Expand Up @@ -2729,7 +2728,7 @@ public Entry<K, V> next() {
}

@WeakOuter
final class KeySet extends SafeToArraySet<K> {
final class KeySet extends AbstractSet<K> {

@Override
public Iterator<K> iterator() {
Expand Down Expand Up @@ -2789,23 +2788,10 @@ public boolean contains(Object o) {
public void clear() {
MapMakerInternalMap.this.clear();
}

// super.toArray() may misbehave if size() is inaccurate, at least on old versions of Android.
// https://code.google.com/p/android/issues/detail?id=36519 / http://r.android.com/47508

@Override
public Object[] toArray() {
return toArrayList(this).toArray();
}

@Override
public <T> T[] toArray(T[] a) {
return toArrayList(this).toArray(a);
}
}

@WeakOuter
final class EntrySet extends SafeToArraySet<Entry<K, V>> {
final class EntrySet extends AbstractSet<Entry<K, V>> {

@Override
public Iterator<Entry<K, V>> iterator() {
Expand Down Expand Up @@ -2853,28 +2839,6 @@ public void clear() {
}
}

private abstract static class SafeToArraySet<E> extends AbstractSet<E> {
// super.toArray() may misbehave if size() is inaccurate, at least on old versions of Android.
// https://code.google.com/p/android/issues/detail?id=36519 / http://r.android.com/47508

@Override
public Object[] toArray() {
return toArrayList(this).toArray();
}

@Override
public <T> T[] toArray(T[] a) {
return toArrayList(this).toArray(a);
}
}

private static <E> ArrayList<E> toArrayList(Collection<E> c) {
// Avoid calling ArrayList(Collection), which may call back into toArray.
ArrayList<E> result = new ArrayList<>(c.size());
Iterators.addAll(result, c.iterator());
return result;
}

// Serialization Support

private static final long serialVersionUID = 5;
Expand Down

0 comments on commit 4ed4972

Please sign in to comment.