code: private void setup(ULocale locale) {
          int DEFAULT_HASH_SIZE = 19;
          fIntervalPatterns = new HashMap<String, Map<String, PatternInfo>>(DEFAULT_HASH_SIZE);
          // initialize to guard if there is no interval date format defined in
          // resource files
          fFallbackIntervalPattern = "{0} \u2013 {1}";
  
          try {
              // Get the correct calendar type
              String calendarTypeToUse = locale.getKeywordValue("calendar");
              if ( calendarTypeToUse == null ) {
                  String[] preferredCalendarTypes =
                          Calendar.getKeywordValuesForLocale("calendar", locale, true);
                  calendarTypeToUse = preferredCalendarTypes[0]; // the most preferred calendar
              }
              if ( calendarTypeToUse == null ) {
                  calendarTypeToUse = "gregorian"; // fallback
              }
  
              // Instantiate the sink to process the data and the resource bundle
              DateIntervalSink sink = new DateIntervalSink(this);
              ICUResourceBundle resource =
                      (ICUResourceBundle)UResourceBundle.getBundleInstance(ICUData.ICU_BASE_NAME, locale);
  
              // Get the fallback pattern
              String fallbackPattern = resource.getStringWithFallback(CALENDAR_KEY + "/" + calendarTypeToUse
                      + "/" + INTERVAL_FORMATS_KEY + "/" + FALLBACK_STRING);
              setFallbackIntervalPattern(fallbackPattern);
  
              // Already loaded calendar types
              Set<String> loadedCalendarTypes = new HashSet<String>();
  
              while (calendarTypeToUse != null) {
                  // Throw an exception when a loop is detected
                  if (loadedCalendarTypes.contains(calendarTypeToUse)) {
                      throw new ICUException("Loop in calendar type fallback: " + calendarTypeToUse);
                  }
  
                  // Register the calendar type to avoid loops
                  loadedCalendarTypes.add(calendarTypeToUse);
  
                  // Get all resources for this calendar type
                  String pathToIntervalFormats = CALENDAR_KEY + "/" + calendarTypeToUse;
                  resource.getAllItemsWithFallback(pathToIntervalFormats, sink);
  
                  // Get next calendar type to load if there was an alias pointing at it
                  calendarTypeToUse = sink.getAndResetNextCalendarType();
              }
          } catch ( MissingResourceException e) {
              // Will fallback to {data0} - {date1}
          }
      }
docs: /*
  Initialize DateIntervalInfo from calendar data
  @param calData  calendar data