src/share/classes/sun/util/locale/provider/LocaleProviderAdapter.java
Print this page
rev 6618 : imported patch 8004240
@@ -31,10 +31,11 @@
import java.text.spi.DateFormatProvider;
import java.text.spi.DateFormatSymbolsProvider;
import java.text.spi.DecimalFormatSymbolsProvider;
import java.text.spi.NumberFormatProvider;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
@@ -87,14 +88,11 @@
/**
* LocaleProviderAdapter preference list. The default list is intended
* to behave the same manner in JDK7.
*/
- private static Type[] adapterPreference = {
- Type.JRE,
- Type.SPI,
- };
+ private static final List<Type> adapterPreference;
/**
* JRE Locale Data Adapter instance
*/
private static LocaleProviderAdapter jreLocaleProviderAdapter = new JRELocaleProviderAdapter();
@@ -127,14 +125,15 @@
adapterCache = new ConcurrentHashMap<>();
static {
String order = AccessController.doPrivileged(
new sun.security.action.GetPropertyAction("java.locale.providers"));
- // Override adapterPreference with the properties one
+ List<Type> typeList = new ArrayList<>();
+
+ // Check user specified adapter preference
if (order != null && order.length() != 0) {
String[] types = order.split(",");
- List<Type> typeList = new ArrayList<>();
for (String type : types) {
try {
Type aType = Type.valueOf(type.trim().toUpperCase(Locale.ROOT));
// load adapter if necessary
@@ -151,23 +150,27 @@
// could be caused by the user specifying wrong
// provider name or format in the system property
LocaleServiceProviderPool.config(LocaleProviderAdapter.class, e.toString());
}
}
+ }
if (!typeList.isEmpty()) {
if (!typeList.contains(Type.JRE)) {
// Append FALLBACK as the last resort.
fallbackLocaleProviderAdapter = new FallbackLocaleProviderAdapter();
typeList.add(Type.FALLBACK);
}
- adapterPreference = typeList.toArray(new Type[0]);
+ } else {
+ // Default preference list
+ typeList.add(Type.JRE);
+ typeList.add(Type.SPI);
}
+
+ adapterPreference = Collections.unmodifiableList(typeList);
}
- }
-
/**
* Returns the singleton instance for each adapter type
*/
public static LocaleProviderAdapter forType(Type type) {
switch (type) {
@@ -200,11 +203,11 @@
throw new InternalError();
}
/**
* Returns the preference order of LocaleProviderAdapter.Type
*/
- public static Type[] getAdapterPreference() {
+ public static List<Type> getAdapterPreference() {
return adapterPreference;
}
/**
* Returns a LocaleProviderAdapter for the given locale service provider that