On Sat, 1 Aug 2026 03:26:19 GMT, Nir Lisker <[email protected]> wrote:
>> Refactoring of all `StringConverter`s and their tests. General notes: >> * The documentation language has been unified and `null` parameter rules >> have been documented. >> * Tests have been cleaned up in the vein of >> https://github.com/openjdk/jfx/pull/1759 and unneeded `@BeforeAll`s were >> removed. >> * Internal fields were made `private final` to guarantee immutability. >> >> Incremental commits are provided for easier reviewing: >> >> ### Parent classes >> * `StringConverter`: updated documentation >> * `BaseStringConverter`: a new internal class that implements repeated code >> from converter implementations and serves as an intermediate superclass. It >> does empty and `null` string checks that are handled uniformly, except for >> `DefaultStringConverter`, which has a different formatting mechanism. >> >> ### Primitive-related converters >> * All primitive (wrapper) converters also document their formatting and >> parsing mechanism since these are "well-established". >> >> ### Format converter >> * Checked for `null` during construction time to avoid runtime NPEs. >> * There is no test class for this converter. A followup might be desirable. >> * A followup should deprecate for removal `protected Format getFormat()` (as >> in [JDK-8314597](https://bugs.openjdk.org/browse/JDK-8314597) and >> [JDK-8260475](https://bugs.openjdk.org/browse/JDK-8260475)). >> >> ### Number and subclasses converters >> * The intermediate `locale` and `pattern` fields were removed (along with >> their tests). The class generated a new formatter from these on each call. >> This only makes sense for mutable fields where the resulting formatter can >> change, but here the formatter can be computed once on construction and >> stored. >> * The only difference between these classes is a single method for creating >> a format from a `null` pattern, which was encapsulated in the >> `getSpecializedNumberFormat` method. >> * The terminally deprecated `protected NumberFormat getNumberFormat()` was >> removed. Can be split to its own issue if preferred. In my opinion, it >> shouldn't exist even internally since testing the internal formatter doesn't >> help. The only tests here should be for to/from strings, and these are >> lacking. A followup can be filed for adding more conversion tests. >> >> ### Date/Time converters >> * Added a documentation note advising users to use the `java.time` classes >> instead of the old `Date` class. >> * As with Number converters, only the `dateFormat` field was kept, which is >> created once on construction instead of on each... > > Nir Lisker has updated the pull request incrementally with one additional > commit since the last revision: > > Correct implNote I spotted one last problem, listed inline. Once you've resolved that, update the CSR modules/javafx.base/src/main/java/javafx/util/StringConverter.java line 35: > 33: /// > 34: /// @implNote JavaFX's implementations are immutable, but might not be > thread-safe: the same converter can be reused as > 35: /// long as all access are on the same thread or are synchronized. > Implementing classes are not required to be immutable. Better. However, I see that `FormatStringConverter`, `NumberStringConverter`, and `DateTimeStringConverter` take a user-provided format object and store a reference to that object, so calling those converters "immutable" is misleading. If the caller mutates the format object after passing it to the converter, it will change the behavior of future conversion operations. So I would either list those classes as exceptions or remove the immutability claim. Also, there is a grammatical error: "all access are on the same thread" should be "access is" or "accesses are". ------------- PR Review: https://git.openjdk.org/jfx/pull/1880#pullrequestreview-4859461774 PR Review Comment: https://git.openjdk.org/jfx/pull/1880#discussion_r3716602814
