On Fri, 20 Jan 2023 20:20:32 GMT, Sergey Bylokhov <s...@openjdk.org> wrote:

>> I tried to clean up the documentation in the `java.awt.color` package and 
>> specify how the `null` parameters are handled here and there. But it looks 
>> like the `ICC_profile` class is too specific so I would like to discuss it 
>> separately.
>> 
>> The ICC_Profile has these methods:
>>  * `getInstance(int)`      - always throws specified 
>> `IllegalArgumentException` on the wrong constant
>>  * `getInstance(byte[])` - always throws specified 
>> `IllegalArgumentException` on `null`
>>  * `getInstance(String fileName)` - always throws unspecified 
>> `NullPointerException` on `null`
>>  * `getInstance(InputStream)`      - thrown unspecified 
>> `NullPointerException` before 
>> [JDK-8227816](https://github.com/openjdk/jdk/commit/af20c6b9c4a3a21c1e2c7f56721e1077e7d8f388)
>>  and now throws specified but misleading `IOException: Stream closed` 
>> exception on `null`
>> 
>> So we have 3 methods that can get null as a parameter and each throw a 
>> different exception.
>> 
>> Note that all of the specs for the methods above have this part:
>> 
>>> @throws IllegalArgumentException If the stream does not contain valid ICC 
>>> Profile data
>> 
>> So I have an idea to change `getInstance(String)` and 
>> `getInstance(InputStream)` to throw `IllegalArgumentException`  even if I 
>> personally prefer NPE to be thrown.
>> 
>> From another point of view the `ICC_Profile` profile has other methods:
>>  * `write(String fileName)` - always throws unspecified 
>> `NullPointerException` on `null`
>>  * `write(OutputStream) `  - always throws unspecified 
>> `NullPointerException` on `null`
>> 
>> I am not sure we can throw `IllegalArgumentException` from the `write` 
>> methods, so the specification for `getInstance(String)` and 
>> `getInstance(InputStream)` could be updated to throw NPE on null same as 
>> related `write`.
>> 
>> Thoughts?
>
> Sergey Bylokhov has updated the pull request incrementally with two 
> additional commits since the last revision:
> 
>  - Unify pairs for filenames and streams
>  - Revert "8299333: Unify used exceptions by all variants of 
> ICC_Profile.getInstance(null)"
>    
>    This reverts commit db5cfdc280c00e38949469f9bc6fcb3d06a12716.

I finally got around to reviewing the CSR. You can now finalize it.

src/java.desktop/share/classes/java/awt/color/ICC_Profile.java line 869:

> 867:      */
> 868:     public static ICC_Profile getInstance(String fileName) throws 
> IOException {
> 869:         if (fileName == null) {

The reasons given for IOException seems more appropriate since a null file 
cannot be opened but I'm sure you  don't think that is the right exception 
either
I think it might be best to update the spec along with this change to be clear.

src/java.desktop/share/classes/java/awt/color/ICC_Profile.java line 902:

> 900:      */
> 901:     public static ICC_Profile getInstance(InputStream s) throws 
> IOException {
> 902:         if (s == null) {

Same comment here. We should make it clear in the spec.

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

Marked as reviewed by prr (Reviewer).

PR: https://git.openjdk.org/jdk/pull/11784

Reply via email to