On Wed, 12 Jun 2024 17:06:25 GMT, Justin Lu <j...@openjdk.org> wrote:

>> Please review this PR and [CSR](https://bugs.openjdk.org/browse/JDK-8333920) 
>> which corrects a bug where NumberFormat cannot successfully parse values in 
>> integer only mode, when the format expects a suffix.
>> 
>> For example,
>> 
>> // a format that expects a currency suffix
>> var fmt = NumberFormat.getCurrencyInstance(Locale.FRANCE);
>> fmt.setParseIntegerOnly(true);
>> failFmt.parse("5,00 €"); // throws ParseException when you would have 
>> expected 5 returned
>> 
>> 
>> When parsing in integer only mode, instead of breaking upon a decimal symbol 
>> encounter, we should store the index but continue to fully parse so that we 
>> can verify the entire string and increment our position to search for and 
>> match the suffix. Upon a successful suffix match, we can then set 
>> `ParsePosition.index` back to the stored decimal index.
>> 
>> It should be noted that CompactNumberFormat did previously have code that 
>> would traverse the rest of the String, to allow matching of the suffix. The 
>> difference is that NumberFormat returns the index upon decimal symbol 
>> encounter, while CompactNumberFormat was implemented to return the index 
>> reflected by the entire string traversal. Such differences cannot be 
>> standardized due to behavioral compatibility concerns.
>> 
>> Thus while parsing in integer only, CNF sets index to the 
>> `Position.fullPos()`, while DF sets index to the `Position.intPos()`.
>
> Justin Lu has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   specification improvements

Looks good overall. Some minor nits follow.

src/java.base/share/classes/java/text/DecimalFormat.java line 2446:

> 2444:     // To track the full parse index as well as the integer portion
> 2445:     record Position(int intPos, int fullPos) {}
> 2446: 

The record name may be more descriptive. Also I would expect more description 
here, such as what it is and those params are.

src/java.base/share/classes/java/text/DecimalFormat.java line 2461:

> 2459:      * @return returns the position of the first unparseable character 
> or
> 2460:      *         -1 in case of no valid number parsed
> 2461:      */

Needs modification accommodating `Position`.

test/jdk/java/text/Format/NumberFormat/StrictParseTest.java line 320:

> 318:     }
> 319: 
> 320:     // Overloaded method used for integer only parsing, where the 
> expected

Is this method for `integer only` only?

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

PR Review: https://git.openjdk.org/jdk/pull/19664#pullrequestreview-2114129703
PR Review Comment: https://git.openjdk.org/jdk/pull/19664#discussion_r1637021751
PR Review Comment: https://git.openjdk.org/jdk/pull/19664#discussion_r1637024103
PR Review Comment: https://git.openjdk.org/jdk/pull/19664#discussion_r1637040736

Reply via email to