code: @Override
      public Temporal addTo(Temporal temporal) {
          Jdk8Methods.requireNonNull(temporal, "temporal");
          if (years != 0) {
              if (months != 0) {
                  temporal = temporal.plus(toTotalMonths(), MONTHS);
              } else {
                  temporal = temporal.plus(years, YEARS);
              }
          } else if (months != 0) {
              temporal = temporal.plus(months, MONTHS);
          }
          if (days != 0) {
              temporal = temporal.plus(days, DAYS);
          }
          return temporal;
      }
docs: Adds this period to the specified temporal object.
  <p>
  This returns a temporal object of the same observable type as the input
  with this period added.
  <p>
  In most cases, it is clearer to reverse the calling pattern by using
  {@link Temporal#plus(TemporalAmount)}.
  <pre>
  // these two lines are equivalent, but the second approach is recommended
  dateTime = thisPeriod.addTo(dateTime);
  dateTime = dateTime.plus(thisPeriod);
  </pre>
  <p>
  The calculation will add the years, then months, then days.
  Only non-zero amounts will be added.
  If the date-time has a calendar system with a fixed number of months in a
  year, then the years and months will be combined before being added.
  <p>
  This instance is immutable and unaffected by this method call.
  
  @param temporal  the temporal object to adjust, not null
  @return an object of the same type with the adjustment made, not null
  @throws DateTimeException if unable to add
  @throws ArithmeticException if numeric overflow occurs