code: @Override
      public List<Calendar> getIMMDates(final Calendar start, final Calendar end, final IMMPeriod period) {
  
          final List<Calendar> dates = new ArrayList<>();
          Calendar cal = (Calendar) start.clone();
          while (true) {
              cal = getNextIMMDate(true, cal, period);
              if (!cal.after(end)) {
                  dates.add(cal);
              } else {
                  break;
              }
          }
  
          return dates;
      }
docs: Returns a list of IMM dates between 2 dates, it will exclude the start
  date if it is an IMM date but would include the end date if it is an IMM.
  
  @param start
  start of the interval, excluded
  @param end
  end of the interval, may be included.
  @param period
  specify when the "next" IMM is, if quarterly then it is the
  conventional algorithm.
  @return list of IMM dates