Rollingback r8521: Lazily generate LocaleInfoImpl (rebase from superdevmode) since htmlunit is failing.


git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@8524 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/i18n/client/LocaleInfo.java b/user/src/com/google/gwt/i18n/client/LocaleInfo.java
index 576e195..da0025a 100644
--- a/user/src/com/google/gwt/i18n/client/LocaleInfo.java
+++ b/user/src/com/google/gwt/i18n/client/LocaleInfo.java
@@ -33,7 +33,9 @@
    * is a static.  In the future, we would need a hash map from locale names
    * to LocaleInfo instances.
    */
-  private static LocaleInfo instance  = new LocaleInfo();
+  private static LocaleInfo instance  = new LocaleInfo(
+      (LocaleInfoImpl) GWT.create(LocaleInfoImpl.class),
+      (CldrImpl) GWT.create(CldrImpl.class));
 
   /**
    * @return an array of available locale names
@@ -50,7 +52,7 @@
      * you might want to get the list of available locales in order to create
      * instances of each of them.
      */
-    return LocaleInfoImplHolder.infoImpl.getAvailableLocaleNames();
+    return instance.infoImpl.getAvailableLocaleNames();
   }
   
   /**
@@ -82,24 +84,20 @@
     /*
      * See the comment from getAvailableLocaleNames() above.
      */
-    return LocaleInfoImplHolder.infoImpl.getLocaleNativeDisplayName(localeName);
+    return instance.infoImpl.getLocaleNativeDisplayName(localeName);
   }
 
-   private static class LocaleInfoImplHolder {
-     static final LocaleInfoImpl infoImpl = GWT.create(LocaleInfoImpl.class);
-   }
- 
-   private static class CldrImplHolder {
-     static final CldrImpl cldrImpl = GWT.create(CldrImpl.class);
-   }
-
   /**
    * @return true if any locale supported by this build of the app is RTL.
    */
   public static boolean hasAnyRTL() {
-    return LocaleInfoImplHolder.infoImpl.hasAnyRTL();
+    return instance.infoImpl.hasAnyRTL();
   }
 
+  private final LocaleInfoImpl infoImpl;
+
+  private final CldrImpl cldrImpl;
+
   private DateTimeConstants dateTimeConstants;
 
   private DateTimeFormatInfo dateTimeFormatInfo;
@@ -111,6 +109,19 @@
    * Any such subclass should override all methods.
    */
   protected LocaleInfo() {
+    infoImpl = null;
+    cldrImpl = null;
+  }
+
+  /**
+   * Create a LocaleInfo instance, passing in the implementation classes.
+   * 
+   * @param impl LocaleInfoImpl instance to use
+   * @param cldr CldrImpl instance to use
+   */
+  private LocaleInfo(LocaleInfoImpl impl, CldrImpl cldr) {
+    this.infoImpl = impl;
+    this.cldrImpl = cldr;
   }
 
   /**
@@ -133,7 +144,7 @@
    * @return the name of this locale, such as "default, "en_US", etc
    */
   public final String getLocaleName() {
-    return LocaleInfoImplHolder.infoImpl.getLocaleName();
+    return infoImpl.getLocaleName();
   }
 
   /**
@@ -148,7 +159,7 @@
    * @return true if this locale is right-to-left instead of left-to-right
    */
   public final boolean isRTL() {
-    return CldrImplHolder.cldrImpl.isRTL();
+    return cldrImpl.isRTL();
   }
 
   private void ensureDateTimeConstants() {
@@ -160,13 +171,13 @@
 
   private void ensureDateTimeFormatInfo() {
     if (dateTimeFormatInfo == null) {
-      dateTimeFormatInfo = LocaleInfoImplHolder.infoImpl.getDateTimeFormatInfo();
+      dateTimeFormatInfo = infoImpl.getDateTimeFormatInfo();
     }
   }
   
   private void ensureNumberConstants() {
     if (numberConstants == null) {
-      numberConstants = LocaleInfoImplHolder.infoImpl.getNumberConstants();
+      numberConstants = infoImpl.getNumberConstants();
     }
   }
 }