code: @Override
      PaxDate plusYears(long yearsToAdd) {
          if (yearsToAdd == 0) {
              return this;
          }
          int newYear = YEAR.checkValidIntValue(getProlepticYear() + yearsToAdd);
          // Retain actual month (not index) in the case where a leap month is to be inserted.
          if (month == MONTHS_IN_YEAR && !isLeapYear() && PaxChronology.INSTANCE.isLeapYear(newYear)) {
              return of(newYear, MONTHS_IN_YEAR + 1, getDayOfMonth());
          }
          // Otherwise, one of the following is true:
          // 1 - Before the leap month, nothing to do (most common)
          // 2 - Both source and destination in leap-month, nothing to do
          // 3 - Both source and destination after leap month in leap year, nothing to do
          // 4 - Source in leap month, but destination year not leap. Retain month index, preserving day-of-year.
          // 5 - Source after leap month, but destination year not leap. Move month index back.
          return resolvePreviousValid(newYear, month, day);
      }
docs: Returns a copy of this {@code PaxDate} with the specified period in years added.
  <p>
  This method adds the specified amount to the years field in two steps:
  <ol>
  <li>Add the input years to the year field</li>
  <li>If necessary, shift the index to account for the inserted/deleted leap-month.</li>
  </ol>
  <p>
  In the Pax Calendar, the month of December is 13 in non-leap-years, and 14 in leap years.
  Shifting the index of the month thus means the month would still be the same.
  <p>
  In the case of moving from the inserted leap-month (destination year is non-leap), the month index is retained.
  This has the effect of retaining the same day-of-year.
  <p>
  This instance is immutable and unaffected by this method call.
  
  @param yearsToAdd  the years to add, may be negative
  @return a {@code PaxDate} based on this date with the years added, not null
  @throws DateTimeException if the result exceeds the supported date range