<i18n dev> RFR: JDK-6801704: ChoiceFormat::applyPattern inconsistency for invalid patterns [v2]

Naoto Sato naoto at openjdk.org
Fri Feb 16 22:44:55 UTC 2024


On Fri, 16 Feb 2024 21:53:26 GMT, Justin Lu <jlu at openjdk.org> wrote:

>> Please review this PR and [CSR](https://bugs.openjdk.org/browse/JDK-8317756) which defines the behavior for creating ChoiceFormats with incorrect patterns. The wording is added to both the ChoiceFormat constructor and ChoiceFormat::applyPattern method.
>> 
>> While ideally the inconsistent behavior itself could be fixed, this behavior has been long-standing for 20+ years and the benefit of consistent error handling does not outweigh the risk of breaking applications that may be relying on the "expected" incorrect behavior.
>> 
>> Examples of the range of behavior, (all examples violate the pattern syntax defined in the class description)
>> 
>> 
>> // no limit -> throws an expected IllegalArgumentException
>> var a = new ChoiceFormat("#foo");
>> // no limit or relation in the last subPattern -> discards the incorrect portion, 'baz' and continues
>> var b = new ChoiceFormat("0#foo|1#bar|baz"); 
>> b.format(2); // returns 'bar'
>> // no relation or limit -> discards the incorrect portion, 'foo' and continues
>> var c = new ChoiceFormat("foo");
>> c.format(1); // throws AIOOBE
>
> Justin Lu has updated the pull request incrementally with one additional commit since the last revision:
> 
>   replace spec tag with note

src/java.base/share/classes/java/text/ChoiceFormat.java line 235:

> 233:      *
> 234:      * @implNote Given an incorrect pattern, this implementation may either
> 235:      * throw an exception or succeed and discard the incorrect

An explanation for the exception may be helpful, either enumerating possible exceptions or simply a `RuntimeException`.

src/java.base/share/classes/java/text/ChoiceFormat.java line 237:

> 235:      * throw an exception or succeed and discard the incorrect
> 236:      * portion. Discarding the incorrect portion may result in a ChoiceFormat
> 237:      * with empty {@code limits} and {@code choices}.

`formats` instead of `choices`? A `choice` means a `limit`+`format` to me.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/17856#discussion_r1493046166
PR Review Comment: https://git.openjdk.org/jdk/pull/17856#discussion_r1493048629


More information about the i18n-dev mailing list