From 338dd5b6c91af9cc4d4e1a123662a8f39f8df2e3 Mon Sep 17 00:00:00 2001 From: Shubham Ajmera Date: Tue, 29 Mar 2016 15:25:21 +0100 Subject: [PATCH 1/2] Port OpenJDK8 changes in java.util.Map & add tests. The CL add tests for map default methods added in Java 8 - getOrDefault, putIfAbsent, remove(K, V), replace(K, V, V), replace(K, V), forEach, replaceAll, compute, computeIfAbsent, computeIfPresent, putIfAbsent, merge. Methods have been made synchronzed in Hashtable. They are using the default map methods instead of taking the upstream changes. Replace(K, V, V) in LinkedHashMap has been overridden as it doesn't record access when the replace method doesn't make any replacement. Bug: 27426743 (cherry-picked from commit 6206c9f2e70d7b63d8a306a46534c21e4f8fe6f7) Change-Id: Ie27ea5bd42ddbfa751b89f9eacfb290a3d69f4bb --- api/current.txt | 11 ++++++++++- api/system-current.txt | 11 ++++++++++- api/test-current.txt | 11 ++++++++++- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/api/current.txt b/api/current.txt index a9bb90f3e8add..513ff1a4430b0 100644 --- a/api/current.txt +++ b/api/current.txt @@ -57950,6 +57950,7 @@ package java.util { method public java.lang.Object clone(); method public java.util.Set> entrySet(); method public void forEach(java.util.function.BiConsumer); + method public boolean replace(K, V, V); } public class HashSet extends java.util.AbstractSet implements java.lang.Cloneable java.io.Serializable java.util.Set { @@ -57970,6 +57971,9 @@ package java.util { ctor public Hashtable(java.util.Map); method public synchronized void clear(); method public synchronized java.lang.Object clone(); + method public synchronized V compute(K, java.util.function.BiFunction); + method public synchronized V computeIfAbsent(K, java.util.function.Function); + method public synchronized V computeIfPresent(K, java.util.function.BiFunction); method public synchronized boolean contains(java.lang.Object); method public synchronized boolean containsKey(java.lang.Object); method public boolean containsValue(java.lang.Object); @@ -57977,13 +57981,19 @@ package java.util { method public java.util.Set> entrySet(); method public synchronized void forEach(java.util.function.BiConsumer); method public synchronized V get(java.lang.Object); + method public synchronized V getOrDefault(java.lang.Object, V); method public synchronized boolean isEmpty(); method public java.util.Set keySet(); method public synchronized java.util.Enumeration keys(); + method public synchronized V merge(K, V, java.util.function.BiFunction); method public synchronized V put(K, V); method public synchronized void putAll(java.util.Map); + method public synchronized V putIfAbsent(K, V); method protected void rehash(); method public synchronized V remove(java.lang.Object); + method public synchronized boolean remove(java.lang.Object, java.lang.Object); + method public synchronized boolean replace(K, V, V); + method public synchronized V replace(K, V); method public synchronized int size(); method public java.util.Collection values(); } @@ -66416,4 +66426,3 @@ package org.xmlpull.v1.sax2 { } } - diff --git a/api/system-current.txt b/api/system-current.txt index a9324d9968378..0b5f0bb9b8d0e 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -61013,6 +61013,7 @@ package java.util { method public java.lang.Object clone(); method public java.util.Set> entrySet(); method public void forEach(java.util.function.BiConsumer); + method public boolean replace(K, V, V); } public class HashSet extends java.util.AbstractSet implements java.lang.Cloneable java.io.Serializable java.util.Set { @@ -61033,6 +61034,9 @@ package java.util { ctor public Hashtable(java.util.Map); method public synchronized void clear(); method public synchronized java.lang.Object clone(); + method public synchronized V compute(K, java.util.function.BiFunction); + method public synchronized V computeIfAbsent(K, java.util.function.Function); + method public synchronized V computeIfPresent(K, java.util.function.BiFunction); method public synchronized boolean contains(java.lang.Object); method public synchronized boolean containsKey(java.lang.Object); method public boolean containsValue(java.lang.Object); @@ -61040,13 +61044,19 @@ package java.util { method public java.util.Set> entrySet(); method public synchronized void forEach(java.util.function.BiConsumer); method public synchronized V get(java.lang.Object); + method public synchronized V getOrDefault(java.lang.Object, V); method public synchronized boolean isEmpty(); method public java.util.Set keySet(); method public synchronized java.util.Enumeration keys(); + method public synchronized V merge(K, V, java.util.function.BiFunction); method public synchronized V put(K, V); method public synchronized void putAll(java.util.Map); + method public synchronized V putIfAbsent(K, V); method protected void rehash(); method public synchronized V remove(java.lang.Object); + method public synchronized boolean remove(java.lang.Object, java.lang.Object); + method public synchronized boolean replace(K, V, V); + method public synchronized V replace(K, V); method public synchronized int size(); method public java.util.Collection values(); } @@ -69479,4 +69489,3 @@ package org.xmlpull.v1.sax2 { } } - diff --git a/api/test-current.txt b/api/test-current.txt index f774c43f645da..67e38da4ee721 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -58024,6 +58024,7 @@ package java.util { method public java.lang.Object clone(); method public java.util.Set> entrySet(); method public void forEach(java.util.function.BiConsumer); + method public boolean replace(K, V, V); } public class HashSet extends java.util.AbstractSet implements java.lang.Cloneable java.io.Serializable java.util.Set { @@ -58044,6 +58045,9 @@ package java.util { ctor public Hashtable(java.util.Map); method public synchronized void clear(); method public synchronized java.lang.Object clone(); + method public synchronized V compute(K, java.util.function.BiFunction); + method public synchronized V computeIfAbsent(K, java.util.function.Function); + method public synchronized V computeIfPresent(K, java.util.function.BiFunction); method public synchronized boolean contains(java.lang.Object); method public synchronized boolean containsKey(java.lang.Object); method public boolean containsValue(java.lang.Object); @@ -58051,13 +58055,19 @@ package java.util { method public java.util.Set> entrySet(); method public synchronized void forEach(java.util.function.BiConsumer); method public synchronized V get(java.lang.Object); + method public synchronized V getOrDefault(java.lang.Object, V); method public synchronized boolean isEmpty(); method public java.util.Set keySet(); method public synchronized java.util.Enumeration keys(); + method public synchronized V merge(K, V, java.util.function.BiFunction); method public synchronized V put(K, V); method public synchronized void putAll(java.util.Map); + method public synchronized V putIfAbsent(K, V); method protected void rehash(); method public synchronized V remove(java.lang.Object); + method public synchronized boolean remove(java.lang.Object, java.lang.Object); + method public synchronized boolean replace(K, V, V); + method public synchronized V replace(K, V); method public synchronized int size(); method public java.util.Collection values(); } @@ -66490,4 +66500,3 @@ package org.xmlpull.v1.sax2 { } } - From 444a51d1c905462801b64d15c4195ca2eb5c9944 Mon Sep 17 00:00:00 2001 From: Shubham Ajmera Date: Tue, 29 Mar 2016 15:50:38 +0100 Subject: [PATCH 2/2] Add OpenJDK 8 java.util.List Default Methods and corresponding tests. Added replaceAll and sort methods from the upstream except for the CopyOnWriteArrayList. Added forEach method along with the above two methods in CopyOnWriteArrayList. Bug: 27693350 Bug: 27540008 (cherry-picked from commit 6206c9f2e70d7b63d8a306a46534c21e4f8fe6f7) Change-Id: I9efbd66b65c06b50fc20f63d477c25a05a8fae02 --- api/current.txt | 6 ++++++ api/system-current.txt | 6 ++++++ api/test-current.txt | 6 ++++++ 3 files changed, 18 insertions(+) diff --git a/api/current.txt b/api/current.txt index 513ff1a4430b0..300b94dfa0f5c 100644 --- a/api/current.txt +++ b/api/current.txt @@ -57317,6 +57317,7 @@ package java.util { method public void forEach(java.util.function.Consumer); method public E get(int); method public boolean removeIf(java.util.function.Predicate); + method public void replaceAll(java.util.function.UnaryOperator); method public int size(); method public void sort(java.util.Comparator); method public java.util.Spliterator spliterator(); @@ -58138,9 +58139,11 @@ package java.util { method public abstract boolean remove(java.lang.Object); method public abstract E remove(int); method public abstract boolean removeAll(java.util.Collection); + method public default void replaceAll(java.util.function.UnaryOperator); method public abstract boolean retainAll(java.util.Collection); method public abstract E set(int, E); method public abstract int size(); + method public default void sort(java.util.Comparator); method public abstract java.util.List subList(int, int); method public abstract java.lang.Object[] toArray(); method public abstract T[] toArray(T[]); @@ -59055,9 +59058,11 @@ package java.util { method public synchronized boolean removeElement(java.lang.Object); method public synchronized void removeElementAt(int); method public synchronized boolean removeIf(java.util.function.Predicate); + method public synchronized void replaceAll(java.util.function.UnaryOperator); method public synchronized void setElementAt(E, int); method public synchronized void setSize(int); method public synchronized int size(); + method public synchronized void sort(java.util.Comparator); method public java.util.Spliterator spliterator(); method public synchronized void trimToSize(); field protected int capacityIncrement; @@ -59523,6 +59528,7 @@ package java.util.concurrent { method public java.lang.Object clone(); method public boolean contains(java.lang.Object); method public boolean containsAll(java.util.Collection); + method public void forEach(java.util.function.Consumer); method public E get(int); method public int indexOf(E, int); method public int indexOf(java.lang.Object); diff --git a/api/system-current.txt b/api/system-current.txt index 0b5f0bb9b8d0e..c759ab21ee66d 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -60380,6 +60380,7 @@ package java.util { method public void forEach(java.util.function.Consumer); method public E get(int); method public boolean removeIf(java.util.function.Predicate); + method public void replaceAll(java.util.function.UnaryOperator); method public int size(); method public void sort(java.util.Comparator); method public java.util.Spliterator spliterator(); @@ -61201,9 +61202,11 @@ package java.util { method public abstract boolean remove(java.lang.Object); method public abstract E remove(int); method public abstract boolean removeAll(java.util.Collection); + method public default void replaceAll(java.util.function.UnaryOperator); method public abstract boolean retainAll(java.util.Collection); method public abstract E set(int, E); method public abstract int size(); + method public default void sort(java.util.Comparator); method public abstract java.util.List subList(int, int); method public abstract java.lang.Object[] toArray(); method public abstract T[] toArray(T[]); @@ -62118,9 +62121,11 @@ package java.util { method public synchronized boolean removeElement(java.lang.Object); method public synchronized void removeElementAt(int); method public synchronized boolean removeIf(java.util.function.Predicate); + method public synchronized void replaceAll(java.util.function.UnaryOperator); method public synchronized void setElementAt(E, int); method public synchronized void setSize(int); method public synchronized int size(); + method public synchronized void sort(java.util.Comparator); method public java.util.Spliterator spliterator(); method public synchronized void trimToSize(); field protected int capacityIncrement; @@ -62586,6 +62591,7 @@ package java.util.concurrent { method public java.lang.Object clone(); method public boolean contains(java.lang.Object); method public boolean containsAll(java.util.Collection); + method public void forEach(java.util.function.Consumer); method public E get(int); method public int indexOf(E, int); method public int indexOf(java.lang.Object); diff --git a/api/test-current.txt b/api/test-current.txt index 67e38da4ee721..b2aca850fba0d 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -57391,6 +57391,7 @@ package java.util { method public void forEach(java.util.function.Consumer); method public E get(int); method public boolean removeIf(java.util.function.Predicate); + method public void replaceAll(java.util.function.UnaryOperator); method public int size(); method public void sort(java.util.Comparator); method public java.util.Spliterator spliterator(); @@ -58212,9 +58213,11 @@ package java.util { method public abstract boolean remove(java.lang.Object); method public abstract E remove(int); method public abstract boolean removeAll(java.util.Collection); + method public default void replaceAll(java.util.function.UnaryOperator); method public abstract boolean retainAll(java.util.Collection); method public abstract E set(int, E); method public abstract int size(); + method public default void sort(java.util.Comparator); method public abstract java.util.List subList(int, int); method public abstract java.lang.Object[] toArray(); method public abstract T[] toArray(T[]); @@ -59129,9 +59132,11 @@ package java.util { method public synchronized boolean removeElement(java.lang.Object); method public synchronized void removeElementAt(int); method public synchronized boolean removeIf(java.util.function.Predicate); + method public synchronized void replaceAll(java.util.function.UnaryOperator); method public synchronized void setElementAt(E, int); method public synchronized void setSize(int); method public synchronized int size(); + method public synchronized void sort(java.util.Comparator); method public java.util.Spliterator spliterator(); method public synchronized void trimToSize(); field protected int capacityIncrement; @@ -59597,6 +59602,7 @@ package java.util.concurrent { method public java.lang.Object clone(); method public boolean contains(java.lang.Object); method public boolean containsAll(java.util.Collection); + method public void forEach(java.util.function.Consumer); method public E get(int); method public int indexOf(E, int); method public int indexOf(java.lang.Object);