code: @Override
      public LocalDate plus(TemporalAmount amountToAdd) {
          if (amountToAdd instanceof Period) {
              Period periodToAdd = (Period) amountToAdd;
              return plusMonths(periodToAdd.toTotalMonths()).plusDays(periodToAdd.getDays());
          }
          Objects.requireNonNull(amountToAdd, "amountToAdd");
          return (LocalDate) amountToAdd.addTo(this);
      }
docs: Returns a copy of this date with the specified amount added.
  <p>
  This returns a {@code LocalDate}, based on this one, with the specified amount added.
  The amount is typically {@link Period} but may be any other type implementing
  the {@link TemporalAmount} interface.
  <p>
  The calculation is delegated to the amount object by calling
  {@link TemporalAmount#addTo(Temporal)}. The amount implementation is free
  to implement the addition in any way it wishes, however it typically
  calls back to {@link #plus(long, TemporalUnit)}. Consult the documentation
  of the amount implementation to determine if it can be successfully added.
  <p>
  This instance is immutable and unaffected by this method call.
  
  @param amountToAdd  the amount to add, not null
  @return a {@code LocalDate} based on this date with the addition made, not null
  @throws DateTimeException if the addition cannot be made
  @throws ArithmeticException if numeric overflow occurs