On Wed, 26 Jul 2023 16:03:31 GMT, John Jiang <jji...@openjdk.org> wrote:

> > it says "It is cloned to prevent subsequent modification."
> > Now, if the set passed in is unmodifiable, that is no longer true.
> 
> My understanding: The parameter `protectionParams` is cloned as 
> `this.protectionParams`, and `this.protectionParams` should be prevented from 
> subsequent modification.

The latter part is true (prevented from subsequent modification) but, unless I 
am mistaken, the former (making a clone/copy) is not. For example, before your 
change, this assert would pass:


Map m = Collections.unmodifiableMap(map);
DomainLoadStoreParameters params = new DomainLoadStoreParameters(uri, m);
assert m != params.getProtectionParams();


After your change, I think it fails (can you check?). Even though the 
protection in both cases should be adequate, it is a subtle behavior change 
that I don't think the current specification covers.

> 
> `Map::copyOf` looks meet this requirement, no matter the parameter 
> `protectionParams` is modifiable or not.
> 
> > It also will now throw NPE if any of the keys or values are null, whereas 
> > before it did not,
> > and the specification does not specify that in the @throws clause.
> 
> Yes, this is a problem. I don't want to change any behavior.

As mentioned, I don't think this change is critical unless you have a stronger 
case.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/15008#discussion_r1275244650

Reply via email to