From: Yoshito Umaoka Date: Fri, 21 Feb 2014 08:16:18 +0000 (+0000) Subject: ICU-10718 Cache parsed language, script, country and variant in ULocale. X-Git-Tag: milestone-59-0-1~2164 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f7100c3d6eb813f7346e63a05163d1ef376e7ad1;p=icu ICU-10718 Cache parsed language, script, country and variant in ULocale. X-SVN-Rev: 35192 --- diff --git a/icu4j/main/classes/core/src/com/ibm/icu/util/ULocale.java b/icu4j/main/classes/core/src/com/ibm/icu/util/ULocale.java index ad039a5ba85..9556215c8d1 100644 --- a/icu4j/main/classes/core/src/com/ibm/icu/util/ULocale.java +++ b/icu4j/main/classes/core/src/com/ibm/icu/util/ULocale.java @@ -287,6 +287,12 @@ public final class ULocale implements Serializable, Comparable { */ private String localeID; + // Cached locale fields. + private transient volatile String language_; + private transient volatile String script_; + private transient volatile String country_; + private transient volatile String variant_; + /** * Cache the locale data container fields. * In future, we want to use them as the primary locale identifier storage. @@ -892,7 +898,14 @@ public final class ULocale implements Serializable, Comparable { * @stable ICU 3.0 */ public String getLanguage() { - return getLanguage(localeID); + if (language_ == null) { + synchronized (this) { + if (language_ == null) { + language_ = getLanguage(localeID); + } + } + } + return language_; } /** @@ -914,7 +927,14 @@ public final class ULocale implements Serializable, Comparable { * @stable ICU 3.0 */ public String getScript() { - return getScript(localeID); + if (script_ == null) { + synchronized (this) { + if (script_ == null) { + script_ = getScript(localeID); + } + } + } + return script_; } /** @@ -936,7 +956,14 @@ public final class ULocale implements Serializable, Comparable { * @stable ICU 3.0 */ public String getCountry() { - return getCountry(localeID); + if (country_ == null) { + synchronized (this) { + if (country_ == null) { + country_ = getCountry(localeID); + } + } + } + return country_; } /** @@ -958,7 +985,14 @@ public final class ULocale implements Serializable, Comparable { * @stable ICU 3.0 */ public String getVariant() { - return getVariant(localeID); + if (variant_ == null) { + synchronized (this) { + if (variant_ == null) { + variant_ = getVariant(localeID); + } + } + } + return variant_; } /**