Skip to content

Commit 1d6cafd

Browse files
author
Justin Lu
committed
8369452: Locale.Builder.setLanguageTag(String) does not clear on empty or null String
Reviewed-by: naoto
1 parent 9b1633d commit 1d6cafd

File tree

2 files changed

+27
-5
lines changed

2 files changed

+27
-5
lines changed

src/java.base/share/classes/java/util/Locale.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2726,9 +2726,13 @@ public Builder setLocale(Locale locale) {
27262726
* @see Locale#forLanguageTag(String)
27272727
*/
27282728
public Builder setLanguageTag(String languageTag) {
2729-
LanguageTag tag = LanguageTag.parse(
2730-
languageTag, new ParsePosition(0), false);
2731-
localeBuilder.setLanguageTag(tag);
2729+
if (LocaleUtils.isEmpty(languageTag)) {
2730+
localeBuilder.clear();
2731+
} else {
2732+
LanguageTag tag = LanguageTag.parse(
2733+
languageTag, new ParsePosition(0), false);
2734+
localeBuilder.setLanguageTag(tag);
2735+
}
27322736
return this;
27332737
}
27342738

test/jdk/java/util/Locale/LocaleEnhanceTest.java

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2010, 2024, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2010, 2025, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -42,13 +42,17 @@
4242
import java.util.Set;
4343

4444
import org.junit.jupiter.api.Test;
45+
import org.junit.jupiter.params.ParameterizedTest;
46+
import org.junit.jupiter.params.provider.EmptySource;
47+
import org.junit.jupiter.params.provider.NullSource;
4548

49+
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
4650
import static org.junit.jupiter.api.Assertions.fail;
4751

4852
/**
4953
* @test
5054
* @bug 6875847 6992272 7002320 7015500 7023613 7032820 7033504 7004603
51-
* 7044019 8008577 8176853 8255086 8263202 8287868 8174269
55+
* 7044019 8008577 8176853 8255086 8263202 8287868 8174269 8369452
5256
* @summary test API changes to Locale
5357
* @modules jdk.localedata
5458
* @compile LocaleEnhanceTest.java
@@ -763,6 +767,20 @@ public void testBuilderSetLanguageTag() {
763767
new BuilderILE() { public void call() { b.setLanguageTag("und-u-nu-thai-NU-chinese-xx-1234"); }};
764768
}
765769

770+
// Test the values that should clear the builder
771+
@ParameterizedTest
772+
@NullSource
773+
@EmptySource
774+
public void testBuilderSetLanguageTagClear(String tag) {
775+
var empty = new Builder();
776+
var bldr = new Builder();
777+
bldr.setLanguageTag("en-US");
778+
assertDoesNotThrow(() -> bldr.setLanguageTag(tag));
779+
assertEquals("Setting a %s language tag did not clear the builder"
780+
.formatted(tag == null ? "null" : "empty"),
781+
empty.build(), bldr.build());
782+
}
783+
766784
@Test
767785
public void testBuilderSetLanguage() {
768786
// language is normalized to lower case

0 commit comments

Comments
 (0)