code: private PatternInfo setIntervalPatternInternally(String skeleton,
                                                  String lrgDiffCalUnit,
                                                  String intervalPattern) {
          Map<String, PatternInfo> patternsOfOneSkeleton = fIntervalPatterns.get(skeleton);
          boolean emptyHash = false;
          if (patternsOfOneSkeleton == null) {
              patternsOfOneSkeleton = new HashMap<String, PatternInfo>();
              emptyHash = true;
          }
          boolean order = fFirstDateInPtnIsLaterDate;
          // check for "latestFirst:" or "earliestFirst:" prefix
          if ( intervalPattern.startsWith(LATEST_FIRST_PREFIX) ) {
              order = true;
              int prefixLength = LATEST_FIRST_PREFIX.length();
              intervalPattern = intervalPattern.substring(prefixLength, intervalPattern.length());
          } else if ( intervalPattern.startsWith(EARLIEST_FIRST_PREFIX) ) {
              order = false;
              int earliestFirstLength = EARLIEST_FIRST_PREFIX.length();
              intervalPattern = intervalPattern.substring(earliestFirstLength, intervalPattern.length());
          }
          PatternInfo itvPtnInfo = genPatternInfo(intervalPattern, order);
  
          patternsOfOneSkeleton.put(lrgDiffCalUnit, itvPtnInfo);
          if ( emptyHash == true ) {
              fIntervalPatterns.put(skeleton, patternsOfOneSkeleton);
          }
  
          return itvPtnInfo;
      }
docs: /* Set Interval pattern.
  
  It generates the interval pattern info,
  afer which, not only sets the interval pattern info into the hash map,
  but also returns the interval pattern info to the caller
  so that caller can re-use it.
  
  @param skeleton         skeleton on which the interval pattern based
  @param lrgDiffCalUnit   the largest different calendar unit.
  @param intervalPattern  the interval pattern on the largest different
  calendar unit.
  @return the interval pattern pattern information