src/share/classes/sun/util/resources/OpenListResourceBundle.java
Print this page
rev 5696 : 6336885: RFE: Locale Data Deployment Enhancements
4609153: Provide locale data for Indic locales
5104387: Support for gl_ES locale (galician language)
6337471: desktop/system locale preferences support
7056139: (cal) SPI support for locale-dependent Calendar parameters
7058206: Provide CalendarData SPI for week params and display field value names
7073852: Support multiple scripts for digits and decimal symbols per locale
7079560: [Fmt-Da] Context dependent month names support in SimpleDateFormat
7171324: getAvailableLocales() of locale sensitive services should return the actual availability of locales
7151414: (cal) Support calendar type identification
7168528: LocaleServiceProvider needs to be aware of Locale extensions
7171372: (cal) locale's default Calendar should be created if unknown calendar is specified
Summary: JEP 127: Improve Locale Data Packaging and Adopt Unicode CLDR Data (part 1 w/o packaging changes. by Naoto Sato and Masayoshi Okutsu)
*** 40,49 ****
--- 40,50 ----
package sun.util.resources;
import java.util.Enumeration;
import java.util.HashMap;
+ import java.util.HashSet;
import java.util.Map;
import java.util.ResourceBundle;
import java.util.Set;
import sun.util.ResourceBundleEnumeration;
*** 91,100 ****
--- 92,119 ----
loadLookupTablesIfNecessary();
return lookup.keySet();
}
+ @Override
+ public Set<String> keySet() {
+ if (keyset != null) {
+ return keyset;
+ }
+ Set<String> ks = new HashSet<>();
+ ks.addAll(handleGetKeys());
+ if (parent != null) {
+ ks.addAll(parent.keySet());
+ }
+ synchronized (this) {
+ if (keyset == null) {
+ keyset = ks;
+ }
+ }
+ return keyset;
+ }
+
/**
* Returns the parent bundle
*/
public OpenListResourceBundle getParent() {
return (OpenListResourceBundle)parent;
*** 116,130 ****
/**
* We lazily load the lookup hashtable. This function does the
* loading.
*/
! private synchronized void loadLookup() {
! if (lookup != null) {
! return;
! }
!
Object[][] contents = getContents();
Map<String, Object> temp = createMap(contents.length);
for (int i = 0; i < contents.length; ++i) {
// key must be non-null String, value must be non-null
String key = (String) contents[i][0];
--- 135,145 ----
/**
* We lazily load the lookup hashtable. This function does the
* loading.
*/
! private void loadLookup() {
Object[][] contents = getContents();
Map<String, Object> temp = createMap(contents.length);
for (int i = 0; i < contents.length; ++i) {
// key must be non-null String, value must be non-null
String key = (String) contents[i][0];
*** 132,149 ****
if (key == null || value == null) {
throw new NullPointerException();
}
temp.put(key, value);
}
lookup = temp;
}
/**
* Lets subclasses provide specialized Map implementations.
* Default uses HashMap.
*/
protected Map<String, Object> createMap(int size) {
return new HashMap<>(size);
}
! private Map<String, Object> lookup = null;
}
--- 147,169 ----
if (key == null || value == null) {
throw new NullPointerException();
}
temp.put(key, value);
}
+ synchronized (this) {
+ if (lookup == null) {
lookup = temp;
}
+ }
+ }
/**
* Lets subclasses provide specialized Map implementations.
* Default uses HashMap.
*/
protected Map<String, Object> createMap(int size) {
return new HashMap<>(size);
}
! private volatile Map<String, Object> lookup = null;
! private volatile Set<String> keyset;
}