On Wed, 8 Jul 2026 18:25:54 GMT, Justin Lu <[email protected]> wrote:
>> This PR corrects the special case handling in `Locale.Builder.setLocale`.
>> The current handling always assumes a `Locale` matching the `ja/JP/JP` and
>> `th/TH/TH` special cases will contain the correct compatibility extensions.
>> A user can remove the extension or create a Locale in the form of the
>> special case without the correct compatibility extension.
>>
>> For example, the current implementation does the following,
>>
>>> jshell> loc = new Builder().setLocale(Locale.of("ja", "JP",
>>> "JP").stripExtensions()).build()
>>> loc ==> ja_JP
>>>
>>> jshell> loc = new
>>> Builder().setLocale(Locale.forLanguageTag("ja-JP-u-ca-foobar-x-lvariant-JP")).build()
>>> loc ==> ja_JP_#u-ca-foobar
>>
>> That is, it silently discards the ill-formed JP variant.
>>
>> With assertions on, this instead becomes a `NullPointerException` when the
>> extensions are not present, or an `AssertionError` when the extension has
>> the wrong value.
>>
>> For the example above, one would expect an `IllFormedLocaleException` to be
>> thrown, since without a correct compatibility extension, JP is merely an
>> invalid variant and `setLocale(Locale)` throws on ill-formed fields.
>>
>> The changes in this PR ensure that these cases throw as expected.
>>
>> ---------
>> - [x] I confirm that I make this contribution in accordance with the
>> [OpenJDK Interim AI Policy](https://openjdk.org/legal/ai).
>
> Justin Lu has updated the pull request incrementally with one additional
> commit since the last revision:
>
> Address other areas + narrow matching to exact matches only
src/java.base/share/classes/java/util/ResourceBundle.java line 2845:
> 2843: boolean isNorwegianNynorsk = false;
> 2844: if (language.equals("no")) {
> 2845: if (region.equals("NO") && variant.equals("NY") &&
> script.isEmpty()) {
Note that there is no check for empty extensions because `ResourceBundle` by
design already ignores extensions and operates on the `BaseLocale` only.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/31728#discussion_r3546360466