Mercurial > hg > release > icedtea7-forest-2.6 > jdk
changeset 9949:09edbf07c17c
8231800: Better listing of arrays
Reviewed-by: mbalao
author | andrew |
---|---|
date | Sun, 12 Jul 2020 23:11:42 +0100 |
parents | 501a8850e941 |
children | 0abf40ecd9c5 |
files | src/share/classes/java/util/ArrayList.java src/share/classes/java/util/PriorityQueue.java src/share/classes/java/util/Vector.java src/share/classes/java/util/concurrent/CopyOnWriteArrayList.java src/share/classes/java/util/concurrent/PriorityBlockingQueue.java |
diffstat | 5 files changed, 21 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/classes/java/util/ArrayList.java Mon Mar 02 19:11:29 2020 -0800 +++ b/src/share/classes/java/util/ArrayList.java Sun Jul 12 23:11:42 2020 +0100 @@ -163,11 +163,13 @@ * @throws NullPointerException if the specified collection is null */ public ArrayList(Collection<? extends E> c) { - elementData = c.toArray(); - size = elementData.length; - // c.toArray might (incorrectly) not return Object[] (see 6260652) - if (elementData.getClass() != Object[].class) - elementData = Arrays.copyOf(elementData, size, Object[].class); + Object[] a = c.toArray(); + size = a.length; + if (c.getClass() == ArrayList.class) { + elementData = a; + } else { + elementData = Arrays.copyOf(a, size, Object[].class); + } } /**
--- a/src/share/classes/java/util/PriorityQueue.java Mon Mar 02 19:11:29 2020 -0800 +++ b/src/share/classes/java/util/PriorityQueue.java Sun Jul 12 23:11:42 2020 +0100 @@ -240,8 +240,7 @@ private void initElementsFromCollection(Collection<? extends E> c) { Object[] a = c.toArray(); - // If c.toArray incorrectly doesn't return Object[], copy it. - if (a.getClass() != Object[].class) + if (c.getClass() != ArrayList.class) a = Arrays.copyOf(a, a.length, Object[].class); int len = a.length; if (len == 1 || this.comparator != null)
--- a/src/share/classes/java/util/Vector.java Mon Mar 02 19:11:29 2020 -0800 +++ b/src/share/classes/java/util/Vector.java Sun Jul 12 23:11:42 2020 +0100 @@ -168,11 +168,13 @@ * @since 1.2 */ public Vector(Collection<? extends E> c) { - elementData = c.toArray(); - elementCount = elementData.length; - // c.toArray might (incorrectly) not return Object[] (see 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); + } } /**
--- a/src/share/classes/java/util/concurrent/CopyOnWriteArrayList.java Mon Mar 02 19:11:29 2020 -0800 +++ b/src/share/classes/java/util/concurrent/CopyOnWriteArrayList.java Sun Jul 12 23:11:42 2020 +0100 @@ -118,9 +118,8 @@ */ public CopyOnWriteArrayList(Collection<? extends E> c) { Object[] elements = c.toArray(); - // c.toArray might (incorrectly) not return Object[] (see 6260652) - if (elements.getClass() != Object[].class) - elements = Arrays.copyOf(elements, elements.length, Object[].class); + if (c.getClass() != java.util.ArrayList.class) + elements = Arrays.copyOf(elements, elements.length, Object[].class); setArray(elements); } @@ -721,6 +720,9 @@ */ 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; Object[] uniq = new Object[cs.length];
--- a/src/share/classes/java/util/concurrent/PriorityBlockingQueue.java Mon Mar 02 19:11:29 2020 -0800 +++ b/src/share/classes/java/util/concurrent/PriorityBlockingQueue.java Sun Jul 12 23:11:42 2020 +0100 @@ -253,8 +253,7 @@ } Object[] a = c.toArray(); int n = a.length; - // If c.toArray incorrectly doesn't return Object[], copy it. - if (a.getClass() != Object[].class) + if (c.getClass() != java.util.ArrayList.class) a = Arrays.copyOf(a, n, Object[].class); if (screen && (n == 1 || this.comparator != null)) { for (int i = 0; i < n; ++i)