jdk/src/share/classes/sun/util/locale/provider/LocaleProviderAdapter.java
changeset 17944 bbd67fc49daa
parent 16481 8e30386cc014
child 23010 6dadb192ad81
equal deleted inserted replaced
17943:a8293d390273 17944:bbd67fc49daa
   118      * in for the root locale.
   118      * in for the root locale.
   119      */
   119      */
   120     private static LocaleProviderAdapter fallbackLocaleProviderAdapter = null;
   120     private static LocaleProviderAdapter fallbackLocaleProviderAdapter = null;
   121 
   121 
   122     /**
   122     /**
       
   123      * Default fallback adapter type, which should return something meaningful in any case.
       
   124      * This is either JRE or FALLBACK.
       
   125      */
       
   126     static LocaleProviderAdapter.Type defaultLocaleProviderAdapter = null;
       
   127 
       
   128     /**
   123      * Adapter lookup cache.
   129      * Adapter lookup cache.
   124      */
   130      */
   125     private static ConcurrentMap<Class<? extends LocaleServiceProvider>, ConcurrentMap<Locale, LocaleProviderAdapter>>
   131     private static ConcurrentMap<Class<? extends LocaleServiceProvider>, ConcurrentMap<Locale, LocaleProviderAdapter>>
   126         adapterCache = new ConcurrentHashMap<>();
   132         adapterCache = new ConcurrentHashMap<>();
   127 
   133 
   138                     Type aType = Type.valueOf(type.trim().toUpperCase(Locale.ROOT));
   144                     Type aType = Type.valueOf(type.trim().toUpperCase(Locale.ROOT));
   139 
   145 
   140                     // load adapter if necessary
   146                     // load adapter if necessary
   141                     switch (aType) {
   147                     switch (aType) {
   142                         case CLDR:
   148                         case CLDR:
   143                             cldrLocaleProviderAdapter = new CLDRLocaleProviderAdapter();
   149                             if (cldrLocaleProviderAdapter == null) {
       
   150                                 cldrLocaleProviderAdapter = new CLDRLocaleProviderAdapter();
       
   151                             }
   144                             break;
   152                             break;
   145                         case HOST:
   153                         case HOST:
   146                             hostLocaleProviderAdapter = new HostLocaleProviderAdapter();
   154                             if (hostLocaleProviderAdapter == null) {
       
   155                                 hostLocaleProviderAdapter = new HostLocaleProviderAdapter();
       
   156                             }
   147                             break;
   157                             break;
   148                     }
   158                     }
   149                     typeList.add(aType);
   159                     if (!typeList.contains(aType)) {
       
   160                         typeList.add(aType);
       
   161                     }
   150                 } catch (IllegalArgumentException | UnsupportedOperationException e) {
   162                 } catch (IllegalArgumentException | UnsupportedOperationException e) {
   151                     // could be caused by the user specifying wrong
   163                     // could be caused by the user specifying wrong
   152                     // provider name or format in the system property
   164                     // provider name or format in the system property
   153                     LocaleServiceProviderPool.config(LocaleProviderAdapter.class, e.toString());
   165                     LocaleServiceProviderPool.config(LocaleProviderAdapter.class, e.toString());
   154                 }
   166                 }
   158         if (!typeList.isEmpty()) {
   170         if (!typeList.isEmpty()) {
   159             if (!typeList.contains(Type.JRE)) {
   171             if (!typeList.contains(Type.JRE)) {
   160                 // Append FALLBACK as the last resort.
   172                 // Append FALLBACK as the last resort.
   161                 fallbackLocaleProviderAdapter = new FallbackLocaleProviderAdapter();
   173                 fallbackLocaleProviderAdapter = new FallbackLocaleProviderAdapter();
   162                 typeList.add(Type.FALLBACK);
   174                 typeList.add(Type.FALLBACK);
       
   175                 defaultLocaleProviderAdapter = Type.FALLBACK;
       
   176             } else {
       
   177                 defaultLocaleProviderAdapter = Type.JRE;
   163             }
   178             }
   164         } else {
   179         } else {
   165             // Default preference list
   180             // Default preference list
   166             typeList.add(Type.JRE);
   181             typeList.add(Type.JRE);
   167             typeList.add(Type.SPI);
   182             typeList.add(Type.SPI);
       
   183             defaultLocaleProviderAdapter = Type.JRE;
   168         }
   184         }
   169 
   185 
   170         adapterPreference = Collections.unmodifiableList(typeList);
   186         adapterPreference = Collections.unmodifiableList(typeList);
   171     }
   187     }
   172 
   188