RFR: JDK-8193877- DateTimeFormatterBuilder throws ClassCastException when using padding

Roger Riggs roger.riggs at Oracle.com
Wed Apr 18 18:34:39 UTC 2018


Hi Pallavi,

The fix here seems to make padding to a fixed width incompatible with 
adjacent value parsing.
That's not intuitive, since adjacent value parsing is intended to allow 
more flexible parsing
of a combination leading fixed-width fields and subsequent variable 
length fields.
The specification of the behavior of padding vs adjacent value parsing 
should be investigated
and clarified if necessary.

The implementation would be better expressed as checking whether the 
active PrinterParser
*is* a NumberPrinterParser as a precondition for entering the adjacent 
parsing mode block
(and the necessary cast).
And otherwise, fall into the existing code in which the new Parser 
becomes the new active parser.

The tests should be included in the existing test classes for padding, 
and be written using
the direct DateTimeFormatterBuilder methods (padNext(), instead of the 
patterns) since the patterns
are just a front end for the builder methods.
See test/java/time/format/TestPadPrinterDecorator.java

TestDateTimeFormatter.java:

line 96: please keep the static imports for testng together

Line 662: The odd formatting and incorrect indentation should no longer 
be a problem
because the indentation will not need to change.

Regards, Roger


On 4/18/18 8:41 AM, Pallavi Sonal wrote:
> Hi,
>
> Please review the changes to the following issue:
>
> Bug :https://bugs.openjdk.java.net/browse/JDK-8193877  
>
>   
>
> The proposed fix is located at:
>
> Webrev :http://cr.openjdk.java.net/~rpatil/8193877/webrev.00/
>
>   
>
> When padding is used in a pattern where there are unpadded values adjacent to padded ones (like "pdQ") , the previous PrinterParser (used for parsing 'd' in the example ) is fetched to use its settings for parsing the next value('Q' in the example). But , in cases like this , it is a PadPrinterDecoratorParser instead of an assumed NumberPrinterParser and a ClassCastException is thrown.
>
> The fix has been done to check such cases where the previous parserprinter is PadPrinterDecoratorParser and use the new NumberPrinterParser instead for parsing the next value.
>
>   
>
> All the tier1 and tier2 Mach 5 tests have passed.
>
>   
>
> Thanks,
>
> Pallavi Sonal
>
>   



More information about the core-libs-dev mailing list