RFR: JDK-6801704: ChoiceFormat::applyPattern inconsistency for invalid patterns

Justin Lu jlu at openjdk.org
Wed Feb 14 22:34:13 UTC 2024


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

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

Commit messages:
 - more conservative wording
 - init

Changes: https://git.openjdk.org/jdk/pull/17856/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=17856&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-6801704
  Stats: 11 lines in 1 file changed: 11 ins; 0 del; 0 mod
  Patch: https://git.openjdk.org/jdk/pull/17856.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/17856/head:pull/17856

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


More information about the core-libs-dev mailing list