code: static private void populateCache() {
          if (cacheIsPopulated) {
              return;
          }
          cacheIsPopulated = true;
  
          /*  Schema:
           *
           *  units{
           *    duration{
           *      day{
           *        one{"{0} ден"}
           *        other{"{0} дена"}
           *      }
           */
  
          // Load the unit types.  Use English, since we know that that is a superset.
          ICUResourceBundle rb1 = (ICUResourceBundle) UResourceBundle.getBundleInstance(
                  ICUData.ICU_UNIT_BASE_NAME,
                  "en");
          rb1.getAllItemsWithFallback("units", new MeasureUnitSink());
  
          // Load the currencies
          ICUResourceBundle rb2 = (ICUResourceBundle) UResourceBundle.getBundleInstance(
                  ICUData.ICU_BASE_NAME,
                  "currencyNumericCodes",
                  ICUResourceBundle.ICU_DATA_CLASS_LOADER);
          rb2.getAllItemsWithFallback("codeMap", new CurrencyNumericCodeSink());
      }
docs: Populate the MeasureUnit cache with all types from the data.
  Population is done lazily, in response to MeasureUnit.getAvailable()
  or other API that expects to see all of the MeasureUnits.
  
  <p>At static initialization time the MeasureUnits cache is populated
  with public static instances (G_FORCE, METER_PER_SECOND_SQUARED, etc.) only.
  Adding of others is deferred until later to avoid circular static init
  dependencies with classes Currency and TimeUnit.
  
  <p>Synchronization: this function must be called from static synchronized methods only.
  
  @hide draft / provisional / internal are hidden on Android