summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNarayan Kamath <narayan@google.com>2014-08-14 09:48:43 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2014-08-13 23:17:40 +0000
commit0dcfa1d088f114eb92a96b09eebf6172428ea6b5 (patch)
treeb7a48c08db3983968ab16b7b872553787a59dd5d
parenteaed9b618b3d0b40d6d9a453f4cf8c6bf812f077 (diff)
parent148de94b69ad9ed98ebb1adf0e8eb1b1e9e33e1f (diff)
downloadlibcore-0dcfa1d088f114eb92a96b09eebf6172428ea6b5.zip
libcore-0dcfa1d088f114eb92a96b09eebf6172428ea6b5.tar.gz
libcore-0dcfa1d088f114eb92a96b09eebf6172428ea6b5.tar.bz2
Merge "Allow Calendar.getInstance to be called with a null Locale."
-rw-r--r--luni/src/main/java/java/text/DateFormat.java10
-rw-r--r--luni/src/main/java/java/text/NumberFormat.java15
-rw-r--r--luni/src/main/java/java/util/Calendar.java1
-rw-r--r--luni/src/main/java/java/util/Currency.java6
-rw-r--r--luni/src/main/java/libcore/icu/LocaleData.java4
-rw-r--r--luni/src/test/java/libcore/java/text/NumberFormatTest.java27
-rw-r--r--luni/src/test/java/libcore/java/text/SimpleDateFormatTest.java17
-rw-r--r--luni/src/test/java/libcore/java/util/CalendarTest.java17
-rw-r--r--luni/src/test/java/libcore/java/util/CurrencyTest.java8
9 files changed, 105 insertions, 0 deletions
diff --git a/luni/src/main/java/java/text/DateFormat.java b/luni/src/main/java/java/text/DateFormat.java
index 64784b7..3055843 100644
--- a/luni/src/main/java/java/text/DateFormat.java
+++ b/luni/src/main/java/java/text/DateFormat.java
@@ -388,6 +388,9 @@ public abstract class DateFormat extends Format {
*/
public static final DateFormat getDateInstance(int style, Locale locale) {
checkDateStyle(style);
+ if (locale == null) {
+ throw new NullPointerException("locale == null");
+ }
return new SimpleDateFormat(LocaleData.get(locale).getDateFormat(style), locale);
}
@@ -440,6 +443,9 @@ public abstract class DateFormat extends Format {
public static final DateFormat getDateTimeInstance(int dateStyle, int timeStyle, Locale locale) {
checkTimeStyle(timeStyle);
checkDateStyle(dateStyle);
+ if (locale == null) {
+ throw new NullPointerException("locale == null");
+ }
LocaleData localeData = LocaleData.get(locale);
String pattern = localeData.getDateFormat(dateStyle) + " " + localeData.getTimeFormat(timeStyle);
return new SimpleDateFormat(pattern, locale);
@@ -514,6 +520,10 @@ public abstract class DateFormat extends Format {
*/
public static final DateFormat getTimeInstance(int style, Locale locale) {
checkTimeStyle(style);
+ if (locale == null) {
+ throw new NullPointerException("locale == null");
+ }
+
return new SimpleDateFormat(LocaleData.get(locale).getTimeFormat(style), locale);
}
diff --git a/luni/src/main/java/java/text/NumberFormat.java b/luni/src/main/java/java/text/NumberFormat.java
index 5879191..a1f10d4 100644
--- a/luni/src/main/java/java/text/NumberFormat.java
+++ b/luni/src/main/java/java/text/NumberFormat.java
@@ -353,6 +353,10 @@ public abstract class NumberFormat extends Format {
* @return a {@code NumberFormat} for handling currency values.
*/
public static NumberFormat getCurrencyInstance(Locale locale) {
+ if (locale == null) {
+ throw new NullPointerException("locale == null");
+ }
+
return getInstance(LocaleData.get(locale).currencyPattern, locale);
}
@@ -376,6 +380,10 @@ public abstract class NumberFormat extends Format {
* @return a {@code NumberFormat} for handling integers.
*/
public static NumberFormat getIntegerInstance(Locale locale) {
+ if (locale == null) {
+ throw new NullPointerException("locale == null");
+ }
+
NumberFormat result = getInstance(LocaleData.get(locale).integerPattern, locale);
result.setParseIntegerOnly(true);
return result;
@@ -469,6 +477,9 @@ public abstract class NumberFormat extends Format {
* @return a {@code NumberFormat} for handling {@code Number} objects.
*/
public static NumberFormat getNumberInstance(Locale locale) {
+ if (locale == null) {
+ throw new NullPointerException("locale == null");
+ }
return getInstance(LocaleData.get(locale).numberPattern, locale);
}
@@ -496,6 +507,10 @@ public abstract class NumberFormat extends Format {
* treated as 5,300%, which is rarely what you intended.
*/
public static NumberFormat getPercentInstance(Locale locale) {
+ if (locale == null) {
+ throw new NullPointerException("locale == null");
+ }
+
return getInstance(LocaleData.get(locale).percentPattern, locale);
}
diff --git a/luni/src/main/java/java/util/Calendar.java b/luni/src/main/java/java/util/Calendar.java
index e15641f..fc4cef6 100644
--- a/luni/src/main/java/java/util/Calendar.java
+++ b/luni/src/main/java/java/util/Calendar.java
@@ -727,6 +727,7 @@ public abstract class Calendar implements Serializable, Cloneable, Comparable<Ca
*/
protected Calendar(TimeZone timezone, Locale locale) {
this(timezone);
+ locale = LocaleData.mapInvalidAndNullLocales(locale);
LocaleData localeData = LocaleData.get(locale);
setFirstDayOfWeek(localeData.firstDayOfWeek.intValue());
setMinimalDaysInFirstWeek(localeData.minimalDaysInFirstWeek.intValue());
diff --git a/luni/src/main/java/java/util/Currency.java b/luni/src/main/java/java/util/Currency.java
index 8cfb68f..f43ddae 100644
--- a/luni/src/main/java/java/util/Currency.java
+++ b/luni/src/main/java/java/util/Currency.java
@@ -65,6 +65,9 @@ public final class Currency implements Serializable {
*/
public static Currency getInstance(Locale locale) {
synchronized (localesToCurrencies) {
+ if (locale == null) {
+ throw new NullPointerException("locale == null");
+ }
Currency currency = localesToCurrencies.get(locale);
if (currency != null) {
return currency;
@@ -146,6 +149,9 @@ public final class Currency implements Serializable {
* <p>If there is no locale-specific currency symbol, the ISO 4217 currency code is returned.
*/
public String getSymbol(Locale locale) {
+ if (locale == null) {
+ throw new NullPointerException("locale == null");
+ }
// Check the locale first, in case the locale has the same currency.
LocaleData localeData = LocaleData.get(locale);
if (localeData.internationalCurrencySymbol.equals(currencyCode)) {
diff --git a/luni/src/main/java/libcore/icu/LocaleData.java b/luni/src/main/java/libcore/icu/LocaleData.java
index ec05b53..6f59257 100644
--- a/luni/src/main/java/libcore/icu/LocaleData.java
+++ b/luni/src/main/java/libcore/icu/LocaleData.java
@@ -128,6 +128,10 @@ public final class LocaleData {
* Returns a shared LocaleData for the given locale.
*/
public static LocaleData get(Locale locale) {
+ if (locale == null) {
+ throw new NullPointerException("locale == null");
+ }
+
final String languageTag = locale.toLanguageTag();
synchronized (localeDataCache) {
LocaleData localeData = localeDataCache.get(languageTag);
diff --git a/luni/src/test/java/libcore/java/text/NumberFormatTest.java b/luni/src/test/java/libcore/java/text/NumberFormatTest.java
index 5862a6c..4ff063b 100644
--- a/luni/src/test/java/libcore/java/text/NumberFormatTest.java
+++ b/luni/src/test/java/libcore/java/text/NumberFormatTest.java
@@ -99,4 +99,31 @@ public class NumberFormatTest extends junit.framework.TestCase {
} catch (NullPointerException expected) {
}
}
+
+ public void test_nullLocales() {
+ try {
+ NumberFormat.getInstance(null);
+ fail();
+ } catch (NullPointerException expected) {}
+
+ try {
+ NumberFormat.getIntegerInstance(null);
+ fail();
+ } catch (NullPointerException expected) {}
+
+ try {
+ NumberFormat.getCurrencyInstance(null);
+ fail();
+ } catch (NullPointerException expected) {}
+
+ try {
+ NumberFormat.getPercentInstance(null);
+ fail();
+ } catch (NullPointerException expected) {}
+
+ try {
+ NumberFormat.getNumberInstance(null);
+ fail();
+ } catch (NullPointerException expected) {}
+ }
}
diff --git a/luni/src/test/java/libcore/java/text/SimpleDateFormatTest.java b/luni/src/test/java/libcore/java/text/SimpleDateFormatTest.java
index bc21739..d65aa0e 100644
--- a/luni/src/test/java/libcore/java/text/SimpleDateFormatTest.java
+++ b/luni/src/test/java/libcore/java/text/SimpleDateFormatTest.java
@@ -350,4 +350,21 @@ public class SimpleDateFormatTest extends junit.framework.TestCase {
assertEquals(1376927400000L, sdf.parse("19. Aug 2013 8:50").getTime());
assertEquals(1376927400000L, sdf.parse("19. Aug. 2013 8:50").getTime());
}
+
+ public void test_nullLocales() {
+ try {
+ SimpleDateFormat.getDateInstance(DateFormat.SHORT, null);
+ fail();
+ } catch (NullPointerException expected) {}
+
+ try {
+ SimpleDateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, null);
+ fail();
+ } catch (NullPointerException expected) {}
+
+ try {
+ SimpleDateFormat.getTimeInstance(DateFormat.SHORT, null);
+ fail();
+ } catch (NullPointerException expected) {}
+ }
}
diff --git a/luni/src/test/java/libcore/java/util/CalendarTest.java b/luni/src/test/java/libcore/java/util/CalendarTest.java
index b0ba4dd..b2f6b94 100644
--- a/luni/src/test/java/libcore/java/util/CalendarTest.java
+++ b/luni/src/test/java/libcore/java/util/CalendarTest.java
@@ -238,4 +238,21 @@ public class CalendarTest extends junit.framework.TestCase {
cal.set(Calendar.HOUR_OF_DAY, 1);
assertEquals(32400000, cal.getTimeInMillis());
}
+
+ // http://b/16938922.
+ //
+ // TODO: This is for backwards compatibility only. Seems like a better idea to throw
+ // here. We should add a targetSdkVersion based check and throw for each of these
+ // cases.
+ public void test_nullLocale() {
+ assertEquals(
+ Calendar.getInstance(Locale.getDefault()),
+ Calendar.getInstance((Locale) null));
+ assertEquals(
+ Calendar.getInstance(TimeZone.getDefault(), Locale.getDefault()),
+ Calendar.getInstance(TimeZone.getDefault(), null));
+ assertEquals(
+ new GregorianCalendar(Locale.getDefault()),
+ new GregorianCalendar((Locale) null));
+ }
}
diff --git a/luni/src/test/java/libcore/java/util/CurrencyTest.java b/luni/src/test/java/libcore/java/util/CurrencyTest.java
index 61a22fd..cf2a1b6 100644
--- a/luni/src/test/java/libcore/java/util/CurrencyTest.java
+++ b/luni/src/test/java/libcore/java/util/CurrencyTest.java
@@ -79,4 +79,12 @@ public class CurrencyTest extends junit.framework.TestCase {
assertEquals("€", Currency.getInstance(pt_PT).getSymbol(pt_BR));
assertEquals("€", Currency.getInstance(pt_PT).getSymbol(pt_PT));
}
+
+ public void test_nullLocales() {
+ Currency currency = Currency.getInstance(Locale.getDefault());
+ try {
+ currency.getSymbol(null);
+ fail();
+ } catch (NullPointerException expected) {}
+ }
}