On Tue, 16 Feb 2021 21:57:43 GMT, Ian Graves <igra...@openjdk.org> wrote:

> Modify the `unmodifiable*` methods in `java.util.Collections` to be 
> idempotent. That is, when given an immutable collection from 
> `java.util.ImmutableCollections` or `java.util.Collections`, these methods 
> will return the reference instead of creating a new immutable collection that 
> wraps the existing one.

Changes requested by redestad (Reviewer).

src/java.base/share/classes/java/util/Collections.java line 1130:

> 1128:     public static <T> Set<T> unmodifiableSet(Set<? extends T> s) {
> 1129:         if(s.getClass() == UnmodifiableSet.class ||
> 1130:            s.getClass() == ImmutableCollections.Set12.class ||

These might be problematic: `ImmutableCollections.Set*` differs in behavior 
subtly from `UnmodifiableSet`, e.g., `set.contains(null)` will throw an NPE. 
I'd limit the check and optimization to `UnmodifiableSet` here

src/java.base/share/classes/java/util/Collections.java line 1315:

> 1313:     public static <T> List<T> unmodifiableList(List<? extends T> list) {
> 1314:         if (list.getClass() == UnmodifiableList.class || 
> list.getClass() == UnmodifiableRandomAccessList.class ||
> 1315:             list.getClass() == ImmutableCollections.List12.class ||

Similar issue here

src/java.base/share/classes/java/util/Collections.java line 1473:

> 1471:     public static <K,V> Map<K,V> unmodifiableMap(Map<? extends K, ? 
> extends V> m) {
> 1472:         if(m.getClass() == UnmodifiableMap.class ||
> 1473:            m.getClass() == ImmutableCollections.Map1.class ||

And here.

-------------

PR: https://git.openjdk.java.net/jdk/pull/2596

Reply via email to