code: @Override
      public DateCalculator<E> combine(final DateCalculator<E> calculator) {
          if (calculator == null || calculator == this) {
              return this;
          }
  
          checkHolidayHandlerValidity(calculator);
  
          final Set<E> newSet = new HashSet<>();
          if (holidayCalendar != null) {
              newSet.addAll(holidayCalendar.getHolidays());
          }
  
          final HolidayCalendar<E> calendarToCombine = calculator.getHolidayCalendar();
          checkBoundaries(calendarToCombine);
  
          if (calendarToCombine.getHolidays() != null) {
              newSet.addAll(calendarToCombine.getHolidays());
          }
  
          final HolidayCalendar<E> newCal = new DefaultHolidayCalendar<>(newSet,
                  compareDate(holidayCalendar.getEarlyBoundary(), calendarToCombine.getEarlyBoundary(), false),
                  compareDate(holidayCalendar.getLateBoundary(), calendarToCombine.getLateBoundary(), true));
  
          return createNewCalculator(getName() + "/" + calculator.getName(), getStartDate(), newCal, holidayHandler);
      }
docs: Allows DateCalculators to be combined into a new one, the startDate and
  currentBusinessDate will be the ones from the existing calendar (not the
  parameter one). The name will be combined name1+"/"+calendar.getName().
  
  @param calculator
  return the same DateCalculator if calendar is null or the
  original calendar (but why would you want to do that?)
  @throws IllegalArgumentException
  if both calendars have different types of HolidayHandlers or
  WorkingWeek;