src/share/classes/sun/util/locale/provider/LocaleServiceProviderPool.java

Print this page
rev 7221 : imported patch 8013903

@@ -125,39 +125,20 @@
      * @param c class of the locale sensitive service
      */
     private LocaleServiceProviderPool (final Class<? extends LocaleServiceProvider> c) {
         providerClass = c;
 
-        // Add the JRE Locale Data Adapter implementation.
-        providers.putIfAbsent(LocaleProviderAdapter.Type.JRE,
-            LocaleProviderAdapter.forJRE().getLocaleServiceProvider(c));
-
-        // Add the SPI Locale Data Adapter implementation.
-        LocaleProviderAdapter lda = LocaleProviderAdapter.forType(LocaleProviderAdapter.Type.SPI);
+        for (LocaleProviderAdapter.Type type : LocaleProviderAdapter.getAdapterPreference()) {
+            LocaleProviderAdapter lda = LocaleProviderAdapter.forType(type);
+            if (lda != null) {
         LocaleServiceProvider provider = lda.getLocaleServiceProvider(c);
         if (provider != null) {
-            providers.putIfAbsent(LocaleProviderAdapter.Type.SPI, provider);
+                    providers.putIfAbsent(type, provider);
         }
-
-        // Add the CLDR Locale Data Adapter implementation, if needed.
-        lda =  LocaleProviderAdapter.forType(LocaleProviderAdapter.Type.CLDR);
-        if (lda != null) {
-            provider = lda.getLocaleServiceProvider(c);
-            if (provider != null) {
-                providers.putIfAbsent(LocaleProviderAdapter.Type.CLDR, provider);
             }
         }
-
-        // Add the Host Locale Data Adapter implementation, if needed.
-        lda =  LocaleProviderAdapter.forType(LocaleProviderAdapter.Type.HOST);
-        if (lda != null) {
-            provider = lda.getLocaleServiceProvider(c);
-            if (provider != null) {
-                providers.putIfAbsent(LocaleProviderAdapter.Type.HOST, provider);
             }
-        }
-    }
 
     static void config(Class<? extends Object> caller, String message) {
         PlatformLogger logger = PlatformLogger.getLogger(caller.getCanonicalName());
         logger.config(message);
     }

@@ -244,11 +225,12 @@
      *
      * @return true if any provider (other than JRE) is available
      */
     boolean hasProviders() {
         return providers.size() != 1 ||
-               providers.get(LocaleProviderAdapter.Type.JRE) == null;
+               (providers.get(LocaleProviderAdapter.Type.JRE) == null &&
+                providers.get(LocaleProviderAdapter.Type.FALLBACK) == null);
     }
 
     /**
      * Returns the provider's localized object for the specified
      * locale.

@@ -294,12 +276,11 @@
         }
 
         // Check whether JRE is the sole locale data provider or not,
         // and directly call it if it is.
         if (!hasProviders()) {
-            return getter.getObject(
-                (P)providers.get(LocaleProviderAdapter.Type.JRE),
+            return getter.getObject((P)providers.get(LocaleProviderAdapter.defaultLocaleProviderAdapter),
                 locale, key, params);
         }
 
         List<Locale> lookupLocales = getLookupLocales(locale);