RFR: 8356439: Rename JavaLangAccess::*NoRepl methods [v5]
Roger Riggs
rriggs at openjdk.org
Thu Aug 21 13:43:02 UTC 2025
On Thu, 21 Aug 2025 09:39:44 GMT, Volkan Yazici <vyazici at 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 replaces the `NoRepl` suffix with `NoReplacement` in method names and consistently uses `throws CCE` in method footprints.
>
> Volkan Yazici has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 13 commits:
>
> - Javadoc fix
> - Cosmetic improvements
> - Merge remote-tracking branch 'upstream/master' into jlaNoRepl
> - Remove redundant type parameters
> - Simplify added null checks
> - Avoid code duplication by sprinkling some generics magic
> - Group `String` methods by `doReplace` argument
> - Merge remote-tracking branch 'upstream/master' into jlaNoRepl
> - Replace `requireNonNull` with implicit null checks
> - Merge remote-tracking branch 'upstream/master' into jlaNoRepl
> - ... and 3 more: https://git.openjdk.org/jdk/compare/a7c0f4b8...7af0f351
src/java.base/share/classes/java/lang/String.java line 890:
> 888:
> 889: private static <E extends Exception> byte[] encodeWithEncoder(
> 890: Charset cs, byte coder, byte[] val, Class<E> characterCodingException)
The argument name `characterCodingException` reads more like an exception instance than an exception Class.
In this use, it is referring to a class, an instance of which will be thrown. It could be just `exceptionClass`.
src/java.base/share/classes/java/lang/String.java line 891:
> 889: private static <E extends Exception> byte[] encodeWithEncoder(
> 890: Charset cs, byte coder, byte[] val, Class<E> characterCodingException)
> 891: throws E {
This is a very curious construct; clever in a way but also a bit magical.
All the while enabling the caller (using null) to avoid having to declare the exception.
If there were a concise explanation, that might be useful to future maintainers.
src/java.base/share/classes/java/lang/String.java line 964:
> 962: /**
> 963: * {@return the sequence of bytes obtained by encoding the given string in
> 964: * the specified {@linkplain java.nio.charset.Charset charset}}
Omit the link, for this private use, just say `Charset`.
src/java.base/share/classes/java/lang/String.java line 1169:
> 1167:
> 1168: private static <E extends Exception> int decodeUTF8_UTF16(
> 1169: byte[] src, int sp, int sl, byte[] dst, int dp, Class <E> malformedInputException)
Ditto comment about argument `malformedInputException` as an instance vs a class of exception, an instance of which will be thrown.
src/java.base/share/classes/jdk/internal/access/JavaLangAccess.java line 349:
> 347: /**
> 348: * {@return the sequence of bytes obtained by encoding the given string in
> 349: * the specified {@linkplain java.nio.charset.Charset charset}}
(ok, not public javadoc)
But Links in the Title line of a method are discouraged since they end up in multiple places.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/26413#discussion_r2291092201
PR Review Comment: https://git.openjdk.org/jdk/pull/26413#discussion_r2291070853
PR Review Comment: https://git.openjdk.org/jdk/pull/26413#discussion_r2291083898
PR Review Comment: https://git.openjdk.org/jdk/pull/26413#discussion_r2291096063
PR Review Comment: https://git.openjdk.org/jdk/pull/26413#discussion_r2291055185
More information about the nio-dev
mailing list