提交 c1bec064 编写于 作者: S scolebourne

8036818: DateTimeFormatter withResolverFields() fails to accept null

Reviewed-by: chegar, rriggs
Contributed-by: scolebourne@joda.org
上级 8f288c97
...@@ -1644,12 +1644,13 @@ public final class DateTimeFormatter { ...@@ -1644,12 +1644,13 @@ public final class DateTimeFormatter {
* @return a formatter based on this formatter with the requested resolver style, not null * @return a formatter based on this formatter with the requested resolver style, not null
*/ */
public DateTimeFormatter withResolverFields(TemporalField... resolverFields) { public DateTimeFormatter withResolverFields(TemporalField... resolverFields) {
Objects.requireNonNull(resolverFields, "resolverFields"); Set<TemporalField> fields = null;
Set<TemporalField> fields = new HashSet<>(Arrays.asList(resolverFields)); if (resolverFields != null) {
fields = Collections.unmodifiableSet(new HashSet<>(Arrays.asList(resolverFields)));
}
if (Objects.equals(this.resolverFields, fields)) { if (Objects.equals(this.resolverFields, fields)) {
return this; return this;
} }
fields = Collections.unmodifiableSet(fields);
return new DateTimeFormatter(printerParser, locale, decimalStyle, resolverStyle, fields, chrono, zone); return new DateTimeFormatter(printerParser, locale, decimalStyle, resolverStyle, fields, chrono, zone);
} }
...@@ -1693,11 +1694,12 @@ public final class DateTimeFormatter { ...@@ -1693,11 +1694,12 @@ public final class DateTimeFormatter {
* @return a formatter based on this formatter with the requested resolver style, not null * @return a formatter based on this formatter with the requested resolver style, not null
*/ */
public DateTimeFormatter withResolverFields(Set<TemporalField> resolverFields) { public DateTimeFormatter withResolverFields(Set<TemporalField> resolverFields) {
Objects.requireNonNull(resolverFields, "resolverFields");
if (Objects.equals(this.resolverFields, resolverFields)) { if (Objects.equals(this.resolverFields, resolverFields)) {
return this; return this;
} }
if (resolverFields != null) {
resolverFields = Collections.unmodifiableSet(new HashSet<>(resolverFields)); resolverFields = Collections.unmodifiableSet(new HashSet<>(resolverFields));
}
return new DateTimeFormatter(printerParser, locale, decimalStyle, resolverStyle, resolverFields, chrono, zone); return new DateTimeFormatter(printerParser, locale, decimalStyle, resolverStyle, resolverFields, chrono, zone);
} }
......
...@@ -254,14 +254,20 @@ public class TCKDateTimeFormatter { ...@@ -254,14 +254,20 @@ public class TCKDateTimeFormatter {
assertEquals(parsed.isSupported(YEAR), false); // not in the list of resolverFields assertEquals(parsed.isSupported(YEAR), false); // not in the list of resolverFields
} }
@Test(expectedExceptions = NullPointerException.class) @Test
public void test_resolverFields_Array_null() throws Exception { public void test_resolverFields_Array_null() throws Exception {
DateTimeFormatter.ISO_DATE.withResolverFields((TemporalField[]) null); DateTimeFormatter f = DateTimeFormatter.ISO_DATE.withResolverFields(MONTH_OF_YEAR);
assertEquals(f.getResolverFields().size(), 1);
f = f.withResolverFields((TemporalField[]) null);
assertEquals(f.getResolverFields(), null);
} }
@Test(expectedExceptions = NullPointerException.class) @Test
public void test_resolverFields_Set_null() throws Exception { public void test_resolverFields_Set_null() throws Exception {
DateTimeFormatter.ISO_DATE.withResolverFields((Set<TemporalField>) null); DateTimeFormatter f = DateTimeFormatter.ISO_DATE.withResolverFields(MONTH_OF_YEAR);
assertEquals(f.getResolverFields().size(), 1);
f = f.withResolverFields((Set<TemporalField>) null);
assertEquals(f.getResolverFields(), null);
} }
//----------------------------------------------------------------------- //-----------------------------------------------------------------------
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册