<i18n dev> RFR: 8365675: Add String Unicode Case-Folding Support [v4]

Xueming Shen sherman at openjdk.org
Mon Oct 27 08:42:19 UTC 2025


On Wed, 22 Oct 2025 20:31:19 GMT, Roger Riggs <rriggs at openjdk.org> wrote:

>> Xueming Shen has updated the pull request incrementally with one additional commit since the last revision:
>> 
>>   test case update
>
> src/java.base/share/classes/jdk/internal/lang/CaseFolding.java.template line 26:
> 
>> 24:  */
>> 25: 
>> 26: package jdk.internal.java.lang;
> 
> Please use the jdk.internal.lang package. (And adjust GensrcCharacterData.gmk).

updated

> src/java.base/share/classes/jdk/internal/lang/CaseFolding.java.template line 57:
> 
>> 55:      * @see #fold(int)
>> 56:      */
>> 57:  	public static boolean isFolded(int cp) {
> 
> The name `isFolded` can be confusing, it implies there is a mapping needed, but it is the opposite.
> I'd suggest suggest keeping only `isDefined` and perhaps rename to `hasFold` or similar.

removed. not really used. isDefined() is being used.

> src/java.base/share/classes/jdk/internal/lang/CaseFolding.java.template line 93:
> 
>> 91:         if (entry != null)
>> 92:           return entry.folding;
>> 93:         return new int[] { cp };
> 
> Creating a bunch of small arrays is very wasteful.  Single char to single char should not need an allocation.

this is not really being used by the string class, for now. removed

> src/java.base/share/classes/jdk/internal/lang/CaseFolding.java.template line 131:
> 
>> 129:      * @return a {@code String} containing the case-folded form of the input string
>> 130:      */
>> 131:     public static String fold(String s) {
> 
> Save this unused method for another PR. (and the corresponding tests)

removed to the test case as a helper method

> src/java.base/share/classes/jdk/internal/lang/CaseFolding.java.template line 280:
> 
>> 278:         }
>> 279: 
>> 280:         private void add(CaseFoldingEntry entry) {
> 
> CDS can map whole objects/data structures into the heap; consider how to make this data structure so it can be mapped and not re-computed each startup.

updated to use CDS.  still generate the hash table at the init to reduce unnecessary static memory footage.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/27628#discussion_r2464814725
PR Review Comment: https://git.openjdk.org/jdk/pull/27628#discussion_r2464804057
PR Review Comment: https://git.openjdk.org/jdk/pull/27628#discussion_r2464806436
PR Review Comment: https://git.openjdk.org/jdk/pull/27628#discussion_r2464807206
PR Review Comment: https://git.openjdk.org/jdk/pull/27628#discussion_r2464811378


More information about the i18n-dev mailing list