src/java.base/share/classes/sun/util/locale/provider/LocaleResources.java
changeset 58058 b553ad95acf0
parent 54412 41356f083e93
--- a/src/java.base/share/classes/sun/util/locale/provider/LocaleResources.java	Mon Sep 09 12:00:36 2019 -0700
+++ b/src/java.base/share/classes/sun/util/locale/provider/LocaleResources.java	Mon Sep 09 12:42:01 2019 -0700
@@ -178,30 +178,7 @@
             // elements are provided by the caller, yet they are cached here.
             ResourceBundle rb = localeData.getNumberFormatData(locale);
             dfsdata = new Object[3];
-
-            // NumberElements look up. First, try the Unicode extension
-            String numElemKey;
-            String numberType = locale.getUnicodeLocaleType("nu");
-            if (numberType != null) {
-                numElemKey = numberType + ".NumberElements";
-                if (rb.containsKey(numElemKey)) {
-                    dfsdata[0] = rb.getStringArray(numElemKey);
-                }
-            }
-
-            // Next, try DefaultNumberingSystem value
-            if (dfsdata[0] == null && rb.containsKey("DefaultNumberingSystem")) {
-                numElemKey = rb.getString("DefaultNumberingSystem") + ".NumberElements";
-                if (rb.containsKey(numElemKey)) {
-                    dfsdata[0] = rb.getStringArray(numElemKey);
-                }
-            }
-
-            // Last resort. No need to check the availability.
-            // Just let it throw MissingResourceException when needed.
-            if (dfsdata[0] == null) {
-                dfsdata[0] = rb.getStringArray("NumberElements");
-            }
+            dfsdata[0] = getNumberStrings(rb, "NumberElements");
 
             cache.put(DECIMAL_FORMAT_SYMBOLS_DATA_CACHEKEY,
                       new ResourceReference(DECIMAL_FORMAT_SYMBOLS_DATA_CACHEKEY, (Object) dfsdata, referenceQueue));
@@ -210,6 +187,37 @@
         return dfsdata;
     }
 
+    private String[] getNumberStrings(ResourceBundle rb, String type) {
+        String[] ret = null;
+        String key;
+        String numSys;
+
+        // Number strings look up. First, try the Unicode extension
+        numSys = locale.getUnicodeLocaleType("nu");
+        if (numSys != null) {
+            key = numSys + "." + type;
+            if (rb.containsKey(key)) {
+                ret = rb.getStringArray(key);
+            }
+        }
+
+        // Next, try DefaultNumberingSystem value
+        if (ret == null && rb.containsKey("DefaultNumberingSystem")) {
+            key = rb.getString("DefaultNumberingSystem") + "." + type;
+            if (rb.containsKey(key)) {
+                ret = rb.getStringArray(key);
+            }
+        }
+
+        // Last resort. No need to check the availability.
+        // Just let it throw MissingResourceException when needed.
+        if (ret == null) {
+            ret = rb.getStringArray(type);
+        }
+
+        return ret;
+    }
+
     public String getCurrencyName(String key) {
         Object currencyName = null;
         String cacheKey = CURRENCY_NAMES + key;
@@ -485,7 +493,7 @@
 
         if (data == null || ((numberPatterns = (String[]) data.get()) == null)) {
             ResourceBundle resource = localeData.getNumberFormatData(locale);
-            numberPatterns = resource.getStringArray("NumberPatterns");
+            numberPatterns = getNumberStrings(resource, "NumberPatterns");
             cache.put(NUMBER_PATTERNS_CACHEKEY,
                       new ResourceReference(NUMBER_PATTERNS_CACHEKEY, (Object) numberPatterns, referenceQueue));
         }