code: private int findNext(BitSet bits, int value, Calendar calendar, int field, int nextField, List<Integer> lowerOrders) {
  		int nextValue = bits.nextSetBit(value);
  		// roll over if needed
  		if (nextValue == -1) {
  			calendar.add(nextField, 1);
  			reset(calendar, Arrays.asList(field));
  			nextValue = bits.nextSetBit(0);
  		}
  		if (nextValue != value) {
  			calendar.set(field, nextValue);
  			reset(calendar, lowerOrders);
  		}
  		return nextValue;
  	}
docs: Search the bits provided for the next set bit after the value provided,
  and reset the calendar.
  @param bits a {@link BitSet} representing the allowed values of the field
  @param value the current value of the field
  @param calendar the calendar to increment as we move through the bits
  @param field the field to increment in the calendar (@see
  {@link Calendar} for the static constants defining valid fields)
  @param lowerOrders the Calendar field ids that should be reset (i.e. the
  ones of lower significance than the field of interest)
  @return the value of the calendar field that is next in the sequence