mirror of
https://github.com/darlinghq/darling-openjdk.git
synced 2024-11-23 04:19:43 +00:00
8231800: Better listing of arrays
Reviewed-by: alanb, rhalade, ahgross, igerasim
This commit is contained in:
parent
11ae05f623
commit
645122a2e2
@ -178,15 +178,16 @@ public class ArrayList<E> extends AbstractList<E>
|
||||
* @throws NullPointerException if the specified collection is null
|
||||
*/
|
||||
public ArrayList(Collection<? extends E> c) {
|
||||
elementData = c.toArray();
|
||||
if ((size = elementData.length) != 0) {
|
||||
// defend against c.toArray (incorrectly) not returning Object[]
|
||||
// (see e.g. https://bugs.openjdk.java.net/browse/JDK-6260652)
|
||||
if (elementData.getClass() != Object[].class)
|
||||
elementData = Arrays.copyOf(elementData, size, Object[].class);
|
||||
Object[] a = c.toArray();
|
||||
if ((size = a.length) != 0) {
|
||||
if (c.getClass() == ArrayList.class) {
|
||||
elementData = a;
|
||||
} else {
|
||||
elementData = Arrays.copyOf(a, size, Object[].class);
|
||||
}
|
||||
} else {
|
||||
// replace with empty array.
|
||||
this.elementData = EMPTY_ELEMENTDATA;
|
||||
elementData = EMPTY_ELEMENTDATA;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -263,8 +263,7 @@ public class PriorityQueue<E> extends AbstractQueue<E>
|
||||
private void initElementsFromCollection(Collection<? extends E> c) {
|
||||
Object[] es = c.toArray();
|
||||
int len = es.length;
|
||||
// If c.toArray incorrectly doesn't return Object[], copy it.
|
||||
if (es.getClass() != Object[].class)
|
||||
if (c.getClass() != ArrayList.class)
|
||||
es = Arrays.copyOf(es, len, Object[].class);
|
||||
if (len == 1 || this.comparator != null)
|
||||
for (Object e : es)
|
||||
|
@ -179,12 +179,13 @@ public class Vector<E>
|
||||
* @since 1.2
|
||||
*/
|
||||
public Vector(Collection<? extends E> c) {
|
||||
elementData = c.toArray();
|
||||
elementCount = elementData.length;
|
||||
// defend against c.toArray (incorrectly) not returning Object[]
|
||||
// (see e.g. https://bugs.openjdk.java.net/browse/JDK-6260652)
|
||||
if (elementData.getClass() != Object[].class)
|
||||
elementData = Arrays.copyOf(elementData, elementCount, Object[].class);
|
||||
Object[] a = c.toArray();
|
||||
elementCount = a.length;
|
||||
if (c.getClass() == ArrayList.class) {
|
||||
elementData = a;
|
||||
} else {
|
||||
elementData = Arrays.copyOf(a, elementCount, Object[].class);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -36,6 +36,7 @@ package java.util.concurrent;
|
||||
|
||||
import java.lang.invoke.VarHandle;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Comparator;
|
||||
@ -139,9 +140,7 @@ public class CopyOnWriteArrayList<E>
|
||||
es = ((CopyOnWriteArrayList<?>)c).getArray();
|
||||
else {
|
||||
es = c.toArray();
|
||||
// defend against c.toArray (incorrectly) not returning Object[]
|
||||
// (see e.g. https://bugs.openjdk.java.net/browse/JDK-6260652)
|
||||
if (es.getClass() != Object[].class)
|
||||
if (c.getClass() != java.util.ArrayList.class)
|
||||
es = Arrays.copyOf(es, es.length, Object[].class);
|
||||
}
|
||||
setArray(es);
|
||||
@ -690,6 +689,9 @@ public class CopyOnWriteArrayList<E>
|
||||
*/
|
||||
public int addAllAbsent(Collection<? extends E> c) {
|
||||
Object[] cs = c.toArray();
|
||||
if (c.getClass() != ArrayList.class) {
|
||||
cs = cs.clone();
|
||||
}
|
||||
if (cs.length == 0)
|
||||
return 0;
|
||||
synchronized (lock) {
|
||||
@ -741,9 +743,10 @@ public class CopyOnWriteArrayList<E>
|
||||
Object[] es = getArray();
|
||||
int len = es.length;
|
||||
Object[] newElements;
|
||||
if (len == 0 && cs.getClass() == Object[].class)
|
||||
if (len == 0 && (c.getClass() == CopyOnWriteArrayList.class ||
|
||||
c.getClass() == ArrayList.class)) {
|
||||
newElements = cs;
|
||||
else {
|
||||
} else {
|
||||
newElements = Arrays.copyOf(es, len + cs.length);
|
||||
System.arraycopy(cs, 0, newElements, len, cs.length);
|
||||
}
|
||||
|
@ -264,8 +264,7 @@ public class PriorityBlockingQueue<E> extends AbstractQueue<E>
|
||||
}
|
||||
Object[] es = c.toArray();
|
||||
int n = es.length;
|
||||
// If c.toArray incorrectly doesn't return Object[], copy it.
|
||||
if (es.getClass() != Object[].class)
|
||||
if (c.getClass() != java.util.ArrayList.class)
|
||||
es = Arrays.copyOf(es, n, Object[].class);
|
||||
if (screen && (n == 1 || this.comparator != null)) {
|
||||
for (Object e : es)
|
||||
|
Loading…
Reference in New Issue
Block a user