On Tue, 29 Jul 2025 13:25:14 GMT, Roger Riggs <rri...@openjdk.org> wrote:

>> `NoRepl`-suffixed `String` methods denote methods that do not replace 
>> invalid characters, but throw `CharacterCodingException` on encounter. This 
>> behavior cannot easily be derived from the method footprints, has been a 
>> source of confusion for maintainers, and is not uniformly adopted, e.g., 
>> `newStringUTF8NoRepl()` and `getBytesUTF8NoRepl()` does *not* throw `CCE`. 
>> This PR removes `NoRepl` suffix from method names and consistently uses 
>> `throws CCE` in method footprints. (b4845109e18 passes `tier1,2`.)
>
> If CCE should have a constructor with a message, it can be added if you have 
> a clear idea how it would be used.

Motivated by @RogerRiggs inquiries, and @AlanBateman's below remark,

> Another high level comment from a first read is that it feels like there are 
> two forms needed. One form is REPLACE action and doesn't throw. The other is 
> REPORT action and throws CharacterCodingException.

grouped `String` methods by `doReplace` argument in 1fb8582e3f9. There are 
several `String` methods of the following form:

    private static byte[] encode8859_1(..., boolean doReplace) {
        // ...
        if (!doReplace) {
            throwUnmappable(sp);
        }
        // ...
     }

We want to make `doReplace = false` case visible in the function footprint, and 
this resulted in:

    private static byte[] encode8859_1(..., boolean doReplace) throws CCE { ... 
}

Though this propagates the checked `CCE` even for `doReplace = true`. To avoid 
this, I've grouped methods by `doReplace` argument into two:

    private static byte[] encode8859_1(...) { ... }
    private static byte[] encode8859_1NoReplacement(...) throws CCE { ... }

As a result,

1. `doReplace = true` call-sites invoke `encode8859_1()`, replacement *will* 
occur, and there is no checked `CCE` thrown
2. `doReplace = false` call-sites invoke `encode8859_1NoReplacement()`, 
replacement will *not* occur, and `CCE` needs to be handled

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

PR Comment: https://git.openjdk.org/jdk/pull/26413#issuecomment-3167985180

Reply via email to