On Thu, 20 Feb 2025 21:29:34 GMT, Alexey Ivanov <aiva...@openjdk.org> wrote:

>> Although it is not a checked exception, the fact that 
>> IllegalArgumentException is already documented on this method is considered 
>> to outweigh any benefit of a new Exception type such as 
>> IllegalStateException. And IllegalArgumentException is not that far off from 
>> existing usage.
>> Existing usage includes the case that "the specified data is not appropriate 
>> to be set in this profile".
>
>> > Although, there's no time where such a modification will be allowed
>> 
>> Exactly, it will throw exception every time a built-In profile is passed 
>> unlike IllegalStateException which is thrown only during an inappropriate 
>> time for instance when you are trying to add an element to the queue when it 
>> is already full. Plus setData() already throws IAE for other invalid 
>> argument cases.
> 
> I see no contradiction here. Inappropriate time is a vague definition. For 
> built-in object, it is always inappropriate time to call `setData`.
> 
> `IllegalArgumentException` implies that the argument is invalid, and if I 
> change the argument, the call will succeed — but the call will never succeed 
> for a built-in profile *because **the state of the object** doesn't allow it*.
> 
> This is why `IllegalStateException` is more appropriate.
> 
>> Although it is not a checked exception, the fact that 
>> IllegalArgumentException is already documented on this method is considered 
>> to outweigh any benefit of a new Exception type such as 
>> IllegalStateException.
> 
> I do not agree here. The exception type should convey the reason it's thrown, 
> otherwise there wouldn't be so many types of exceptions.
> 
> And two `@throws` with the same type aren't allowed in javadoc, which means 
> you have to add the new reason to throw `IllegalArgumentException` into the 
> existing one.

Let's consider a scenario.

If I call `setData` with `tagSignature` and `tagData` which cannot be 
interpreted correctly, I get `IllegalArgumentException`, which is reasonable — 
I passed invalid arguments.

Then if I call `setData` with valid values for `tagSignature` and `tagData`, 
the call succeeds even with a built-in color profile. After this fix, this call 
would fail with `IllegalArgumentException` but I know that the arguments are 
**valid** because the call succeeded previously. And however I change the 
arguments, the call will never succeed.

Throwing `IllegalStateException` will convey the updated behaviour in a cleaner 
way: it is *the state* of the object that makes the call to fail, not the 
arguments.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/23606#discussion_r1964372049

Reply via email to