Please review this PR which handles an edge case pattern bug with ChoiceFormat.
var d = new ChoiceFormat("0#foo|1#bar|baz|") // creates cFmt equivalent to
"0.0#foo|1.0#bar|1.0#"
d.format(1) // unexpectedly returns ""
Not only does this lead to faulty formatting results, but breaks the
ChoiceFormat class invariant of duplicate limits.
It would have been preferable if either an exception was thrown when the
ChoiceFormat was initially created, or the ChoiceFormat formatting 1 returned a
value of "bar".
For comparison,
var d = new ChoiceFormat("0#foo|1#bar|baz") // creates cFmt equivalent to
"0.0#foo|1.0#bar"
d.format(1) // returns "bar"
After this change, the first code snippet now returns "bar" when formatting 1
and discards the "baz" as the second code snippet does.
This PR includes a lot of cleanup to the applyPattern implementation, the
specific fix for this bug is addressed with the following, on line 305,
if (seg != Segment.FORMAT) {
// Discard incorrect portion and finish building cFmt
break;
}
This prevents a limit/format entry from being built when the current parsing
mode has not yet processed the limit and relation. The previous implementation
would build an additional limit/format of 1 with an empty string. The `break`
allows for the discarding of the incorrect portion and continuing.
Alternatively an exception could have been thrown. For consistency with the
second code snippet, the former was picked.
https://github.com/openjdk/jdk/pull/17856 may be of interest, which is a
semi-related specification fix.
-------------
Commit messages:
- add additional longer test case
- shorten relational symbol in format comment
- preserve final modifier for next/previousDouble
- reduce visibility of Segment enum
- init
Changes: https://git.openjdk.org/jdk/pull/17883/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=17883&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8325898
Stats: 187 lines in 2 files changed: 74 ins; 55 del; 58 mod
Patch: https://git.openjdk.org/jdk/pull/17883.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/17883/head:pull/17883
PR: https://git.openjdk.org/jdk/pull/17883