RFR: 8364007: Add no-argument codePointCount method to CharSequence and String [v14]

Chen Liang liach at openjdk.org
Thu Jan 29 23:20:12 UTC 2026


On Thu, 29 Jan 2026 22:21:41 GMT, Chen Liang <liach at openjdk.org> wrote:

>> Tatsunori Uchino has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 20 commits:
>> 
>>  - Merge remote-tracking branch 'origin/master' into codepoint-count
>>  - Fix comments
>>  - Don't use removed `Character::codePointCount` overload
>>  - Update year in copyright
>>  - Fix double empty lines
>>  - Remove `Character.codePointCount()`
>>  - Replace "unpaired surrogates" with "isolated surrogate code units"
>>    
>>    https://www.unicode.org/versions/Unicode17.0.0/core-spec/chapter-3/#G1654
>>    https://www.unicode.org/charts/PDF/UDC00.pdf
>>  - Remove `Character.codePointCount` overload
>>  - Rename parameter names from `a` to `seq`
>>    
>>    `chars` is too confusing with `char`
>>  - Improve JavaDoc
>>    
>>    Co-authored-by: Chen Liang <liach at openjdk.org>
>>  - ... and 10 more: https://git.openjdk.org/jdk/compare/681e4ec8...198b3188
>
> src/java.base/share/classes/java/lang/AbstractStringBuilder.java line 542:
> 
>> 540:             return count;
>> 541:         }
>> 542:         return StringUTF16.codePointCount(value, 0, count);
> 
> Suggestion:
> 
>         return StringUTF16.codePointCountSB(value, 0, count);
> 
> In buggy user program that use StringBuilder from more than one threads, we can have `value.length < count`, so we must perform this call checked.
> 
> I think we need a new entry for this method in `test/jdk/java/lang/StringBuilder/StressSBTest.java` too.

This should be sufficient for StressSBTest:

diff --git a/test/jdk/java/lang/StringBuilder/StressSBTest.java b/test/jdk/java/lang/StringBuilder/StressSBTest.java
index a5dc6672f07..6219851ee3b 100644
--- a/test/jdk/java/lang/StringBuilder/StressSBTest.java
+++ b/test/jdk/java/lang/StringBuilder/StressSBTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2025, 2026, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -279,6 +279,7 @@ private boolean invokeByMethodNameAndType(String name, MethodType mt, StringBuil
                 case "charAt(StringBuilder,int)char" -> sb.charAt(5);
                 case "codePointAt(StringBuilder,int)int" -> sb.codePointAt(4);
                 case "codePointBefore(StringBuilder,int)int" -> sb.codePointBefore(3);
+                case "codePointCount(StringBuilder)int" -> sb.codePointCount();
                 case "codePointCount(StringBuilder,int,int)int" -> sb.codePointCount(3, 9);
                 case "offsetByCodePoints(StringBuilder,int,int)int" -> sb.offsetByCodePoints(3, 7);
                 case "lastIndexOf(StringBuilder,String,int)int" -> sb.lastIndexOf("A", 45);

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

PR Review Comment: https://git.openjdk.org/jdk/pull/26461#discussion_r2743920523


More information about the core-libs-dev mailing list