*/
  public Period plus(long amount, PeriodUnit unit) {

    Jdk7Methods.Objects_requireNonNull(unit, "unit");
    if (unit instanceof ChronoUnit) {
      if (unit == YEARS || unit == MONTHS || unit == DAYS || unit.isDurationEstimated() == false) {
        if (amount == 0) {
          return this;
        }
        switch ((ChronoUnit) unit) {
          case NANOS:
            return plusNanos(amount);
          case MICROS:
            return plusNanos(Jdk8Methods.safeMultiply(amount, 1000L));
          case MILLIS:
            return plusNanos(Jdk8Methods.safeMultiply(amount, 1000000L));
          case SECONDS:
            return plusSeconds(amount);
          case MINUTES:
            return plusMinutes(amount);
          case HOURS:
            return plusHours(amount);
          case HALF_DAYS:
            return plusNanos(Jdk8Methods.safeMultiply(amount, 12 * NANOS_PER_HOUR));
          case DAYS:
            return plusDays(amount);
          case MONTHS:
            return plusMonths(amount);
          case YEARS:
            return plusYears(amount);
          default :
            throw new DateTimeException("Unsupported unit: " + unit.getName());
        }
      }
    }
    if (unit.isDurationEstimated()) {
      throw new DateTimeException("Unsupported unit: " + unit.getName());
    }
    return plusNanos(Duration.of(amount, unit).toNanos());
  }