mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-27 06:45:07 +02:00
8265746: Update java.time to use instanceof pattern variable (part II)
Reviewed-by: dfuchs, lancea, rriggs, chegar, naoto
This commit is contained in:
parent
a85f6cbbaa
commit
45c5da0fd3
20 changed files with 104 additions and 152 deletions
|
@ -197,9 +197,8 @@ abstract class ChronoLocalDateImpl<D extends ChronoLocalDate>
|
|||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public D plus(long amountToAdd, TemporalUnit unit) {
|
||||
if (unit instanceof ChronoUnit) {
|
||||
ChronoUnit f = (ChronoUnit) unit;
|
||||
switch (f) {
|
||||
if (unit instanceof ChronoUnit chronoUnit) {
|
||||
switch (chronoUnit) {
|
||||
case DAYS: return plusDays(amountToAdd);
|
||||
case WEEKS: return plusDays(Math.multiplyExact(amountToAdd, 7));
|
||||
case MONTHS: return plusMonths(amountToAdd);
|
||||
|
|
|
@ -238,36 +238,32 @@ final class ChronoLocalDateTimeImpl<D extends ChronoLocalDate>
|
|||
//-----------------------------------------------------------------------
|
||||
@Override
|
||||
public boolean isSupported(TemporalField field) {
|
||||
if (field instanceof ChronoField) {
|
||||
ChronoField f = (ChronoField) field;
|
||||
return f.isDateBased() || f.isTimeBased();
|
||||
if (field instanceof ChronoField chronoField) {
|
||||
return chronoField.isDateBased() || chronoField.isTimeBased();
|
||||
}
|
||||
return field != null && field.isSupportedBy(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ValueRange range(TemporalField field) {
|
||||
if (field instanceof ChronoField) {
|
||||
ChronoField f = (ChronoField) field;
|
||||
return (f.isTimeBased() ? time.range(field) : date.range(field));
|
||||
if (field instanceof ChronoField chronoField) {
|
||||
return (chronoField.isTimeBased() ? time.range(field) : date.range(field));
|
||||
}
|
||||
return field.rangeRefinedBy(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int get(TemporalField field) {
|
||||
if (field instanceof ChronoField) {
|
||||
ChronoField f = (ChronoField) field;
|
||||
return (f.isTimeBased() ? time.get(field) : date.get(field));
|
||||
if (field instanceof ChronoField chronoField) {
|
||||
return (chronoField.isTimeBased() ? time.get(field) : date.get(field));
|
||||
}
|
||||
return range(field).checkValidIntValue(getLong(field), field);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getLong(TemporalField field) {
|
||||
if (field instanceof ChronoField) {
|
||||
ChronoField f = (ChronoField) field;
|
||||
return (f.isTimeBased() ? time.getLong(field) : date.getLong(field));
|
||||
if (field instanceof ChronoField chronoField) {
|
||||
return (chronoField.isTimeBased() ? time.getLong(field) : date.getLong(field));
|
||||
}
|
||||
return field.getFrom(this);
|
||||
}
|
||||
|
@ -289,9 +285,8 @@ final class ChronoLocalDateTimeImpl<D extends ChronoLocalDate>
|
|||
|
||||
@Override
|
||||
public ChronoLocalDateTimeImpl<D> with(TemporalField field, long newValue) {
|
||||
if (field instanceof ChronoField) {
|
||||
ChronoField f = (ChronoField) field;
|
||||
if (f.isTimeBased()) {
|
||||
if (field instanceof ChronoField chronoField) {
|
||||
if (chronoField.isTimeBased()) {
|
||||
return with(date, time.with(field, newValue));
|
||||
} else {
|
||||
return with(date.with(field, newValue), time);
|
||||
|
@ -303,9 +298,8 @@ final class ChronoLocalDateTimeImpl<D extends ChronoLocalDate>
|
|||
//-----------------------------------------------------------------------
|
||||
@Override
|
||||
public ChronoLocalDateTimeImpl<D> plus(long amountToAdd, TemporalUnit unit) {
|
||||
if (unit instanceof ChronoUnit) {
|
||||
ChronoUnit f = (ChronoUnit) unit;
|
||||
switch (f) {
|
||||
if (unit instanceof ChronoUnit chronoUnit) {
|
||||
switch (chronoUnit) {
|
||||
case NANOS: return plusNanos(amountToAdd);
|
||||
case MICROS: return plusDays(amountToAdd / MICROS_PER_DAY).plusNanos((amountToAdd % MICROS_PER_DAY) * 1000);
|
||||
case MILLIS: return plusDays(amountToAdd / MILLIS_PER_DAY).plusNanos((amountToAdd % MILLIS_PER_DAY) * 1000000);
|
||||
|
|
|
@ -199,10 +199,9 @@ final class ChronoPeriodImpl
|
|||
*/
|
||||
private ChronoPeriodImpl validateAmount(TemporalAmount amount) {
|
||||
Objects.requireNonNull(amount, "amount");
|
||||
if (!(amount instanceof ChronoPeriodImpl)) {
|
||||
if (!(amount instanceof ChronoPeriodImpl period)) {
|
||||
throw new DateTimeException("Unable to obtain ChronoPeriod from TemporalAmount: " + amount.getClass());
|
||||
}
|
||||
ChronoPeriodImpl period = (ChronoPeriodImpl) amount;
|
||||
if (!(chrono.equals(period.getChronology()))) {
|
||||
throw new ClassCastException("Chronology mismatch, expected: " + chrono.getId() + ", actual: " + period.getChronology().getId());
|
||||
}
|
||||
|
|
|
@ -283,12 +283,11 @@ final class ChronoZonedDateTimeImpl<D extends ChronoLocalDate>
|
|||
//-----------------------------------------------------------------------
|
||||
@Override
|
||||
public ChronoZonedDateTime<D> with(TemporalField field, long newValue) {
|
||||
if (field instanceof ChronoField) {
|
||||
ChronoField f = (ChronoField) field;
|
||||
switch (f) {
|
||||
if (field instanceof ChronoField chronoField) {
|
||||
switch (chronoField) {
|
||||
case INSTANT_SECONDS: return plus(newValue - toEpochSecond(), SECONDS);
|
||||
case OFFSET_SECONDS: {
|
||||
ZoneOffset offset = ZoneOffset.ofTotalSeconds(f.checkValidIntValue(newValue));
|
||||
ZoneOffset offset = ZoneOffset.ofTotalSeconds(chronoField.checkValidIntValue(newValue));
|
||||
return create(dateTime.toInstant(offset), zone);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -394,12 +394,11 @@ public final class HijrahDate
|
|||
|
||||
@Override
|
||||
public HijrahDate with(TemporalField field, long newValue) {
|
||||
if (field instanceof ChronoField) {
|
||||
ChronoField f = (ChronoField) field;
|
||||
if (field instanceof ChronoField chronoField) {
|
||||
// not using checkValidIntValue so EPOCH_DAY and PROLEPTIC_MONTH work
|
||||
chrono.range(f).checkValidValue(newValue, f); // TODO: validate value
|
||||
chrono.range(chronoField).checkValidValue(newValue, chronoField); // TODO: validate value
|
||||
int nvalue = (int) newValue;
|
||||
switch (f) {
|
||||
switch (chronoField) {
|
||||
case DAY_OF_WEEK: return plusDays(newValue - getDayOfWeek());
|
||||
case ALIGNED_DAY_OF_WEEK_IN_MONTH: return plusDays(newValue - getLong(ALIGNED_DAY_OF_WEEK_IN_MONTH));
|
||||
case ALIGNED_DAY_OF_WEEK_IN_YEAR: return plusDays(newValue - getLong(ALIGNED_DAY_OF_WEEK_IN_YEAR));
|
||||
|
|
|
@ -514,17 +514,16 @@ public final class JapaneseDate
|
|||
//-----------------------------------------------------------------------
|
||||
@Override
|
||||
public JapaneseDate with(TemporalField field, long newValue) {
|
||||
if (field instanceof ChronoField) {
|
||||
ChronoField f = (ChronoField) field;
|
||||
if (getLong(f) == newValue) { // getLong() validates for supported fields
|
||||
if (field instanceof ChronoField chronoField) {
|
||||
if (getLong(chronoField) == newValue) { // getLong() validates for supported fields
|
||||
return this;
|
||||
}
|
||||
switch (f) {
|
||||
switch (chronoField) {
|
||||
case YEAR_OF_ERA:
|
||||
case YEAR:
|
||||
case ERA: {
|
||||
int nvalue = getChronology().range(f).checkValidIntValue(newValue, f);
|
||||
switch (f) {
|
||||
int nvalue = getChronology().range(chronoField).checkValidIntValue(newValue, chronoField);
|
||||
switch (chronoField) {
|
||||
case YEAR_OF_ERA:
|
||||
return this.withYear(nvalue);
|
||||
case YEAR:
|
||||
|
|
|
@ -311,20 +311,19 @@ public final class MinguoDate
|
|||
//-----------------------------------------------------------------------
|
||||
@Override
|
||||
public MinguoDate with(TemporalField field, long newValue) {
|
||||
if (field instanceof ChronoField) {
|
||||
ChronoField f = (ChronoField) field;
|
||||
if (getLong(f) == newValue) {
|
||||
if (field instanceof ChronoField chronoField) {
|
||||
if (getLong(chronoField) == newValue) {
|
||||
return this;
|
||||
}
|
||||
switch (f) {
|
||||
switch (chronoField) {
|
||||
case PROLEPTIC_MONTH:
|
||||
getChronology().range(f).checkValidValue(newValue, f);
|
||||
getChronology().range(chronoField).checkValidValue(newValue, chronoField);
|
||||
return plusMonths(newValue - getProlepticMonth());
|
||||
case YEAR_OF_ERA:
|
||||
case YEAR:
|
||||
case ERA: {
|
||||
int nvalue = getChronology().range(f).checkValidIntValue(newValue, f);
|
||||
switch (f) {
|
||||
int nvalue = getChronology().range(chronoField).checkValidIntValue(newValue, chronoField);
|
||||
switch (chronoField) {
|
||||
case YEAR_OF_ERA:
|
||||
return with(isoDate.withYear(getProlepticYear() >= 1 ? nvalue + YEARS_DIFFERENCE : (1 - nvalue) + YEARS_DIFFERENCE));
|
||||
case YEAR:
|
||||
|
|
|
@ -311,20 +311,19 @@ public final class ThaiBuddhistDate
|
|||
//-----------------------------------------------------------------------
|
||||
@Override
|
||||
public ThaiBuddhistDate with(TemporalField field, long newValue) {
|
||||
if (field instanceof ChronoField) {
|
||||
ChronoField f = (ChronoField) field;
|
||||
if (getLong(f) == newValue) {
|
||||
if (field instanceof ChronoField chronoField) {
|
||||
if (getLong(chronoField) == newValue) {
|
||||
return this;
|
||||
}
|
||||
switch (f) {
|
||||
switch (chronoField) {
|
||||
case PROLEPTIC_MONTH:
|
||||
getChronology().range(f).checkValidValue(newValue, f);
|
||||
getChronology().range(chronoField).checkValidValue(newValue, chronoField);
|
||||
return plusMonths(newValue - getProlepticMonth());
|
||||
case YEAR_OF_ERA:
|
||||
case YEAR:
|
||||
case ERA: {
|
||||
int nvalue = getChronology().range(f).checkValidIntValue(newValue, f);
|
||||
switch (f) {
|
||||
int nvalue = getChronology().range(chronoField).checkValidIntValue(newValue, chronoField);
|
||||
switch (chronoField) {
|
||||
case YEAR_OF_ERA:
|
||||
return with(isoDate.withYear((getProlepticYear() >= 1 ? nvalue : 1 - nvalue) - YEARS_DIFFERENCE));
|
||||
case YEAR:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue