From c76298448522272938ff347e3210da58f90f74dd Mon Sep 17 00:00:00 2001 From: Stephen Colebourne Date: Thu, 29 Aug 2013 20:38:46 +0100 Subject: [PATCH] 8023764: Optimize Period addition Optimise plus/minus for common cases Reviewed-by: sherman --- jdk/src/share/classes/java/time/LocalDate.java | 10 ++++++++++ jdk/src/share/classes/java/time/LocalDateTime.java | 10 ++++++++++ jdk/src/share/classes/java/time/ZonedDateTime.java | 10 ++++++++++ 3 files changed, 30 insertions(+) diff --git a/jdk/src/share/classes/java/time/LocalDate.java b/jdk/src/share/classes/java/time/LocalDate.java index 3005658366a..e2043f9a90d 100644 --- a/jdk/src/share/classes/java/time/LocalDate.java +++ b/jdk/src/share/classes/java/time/LocalDate.java @@ -1125,6 +1125,11 @@ public final class LocalDate */ @Override public LocalDate plus(TemporalAmount amountToAdd) { + Objects.requireNonNull(amountToAdd, "amountToAdd"); + if (amountToAdd instanceof Period) { + Period periodToAdd = (Period) amountToAdd; + return plusMonths(periodToAdd.toTotalMonths()).plusDays(periodToAdd.getDays()); + } return (LocalDate) amountToAdd.addTo(this); } @@ -1353,6 +1358,11 @@ public final class LocalDate */ @Override public LocalDate minus(TemporalAmount amountToSubtract) { + Objects.requireNonNull(amountToSubtract, "amountToSubtract"); + if (amountToSubtract instanceof Period) { + Period periodToSubtract = (Period) amountToSubtract; + return minusMonths(periodToSubtract.toTotalMonths()).minusDays(periodToSubtract.getDays()); + } return (LocalDate) amountToSubtract.subtractFrom(this); } diff --git a/jdk/src/share/classes/java/time/LocalDateTime.java b/jdk/src/share/classes/java/time/LocalDateTime.java index de8b246d6bb..d0b72b90f82 100644 --- a/jdk/src/share/classes/java/time/LocalDateTime.java +++ b/jdk/src/share/classes/java/time/LocalDateTime.java @@ -1129,6 +1129,11 @@ public final class LocalDateTime */ @Override public LocalDateTime plus(TemporalAmount amountToAdd) { + Objects.requireNonNull(amountToAdd, "amountToAdd"); + if (amountToAdd instanceof Period) { + Period periodToAdd = (Period) amountToAdd; + return with(date.plus(periodToAdd), time); + } return (LocalDateTime) amountToAdd.addTo(this); } @@ -1343,6 +1348,11 @@ public final class LocalDateTime */ @Override public LocalDateTime minus(TemporalAmount amountToSubtract) { + Objects.requireNonNull(amountToSubtract, "amountToSubtract"); + if (amountToSubtract instanceof Period) { + Period periodToSubtract = (Period) amountToSubtract; + return with(date.minus(periodToSubtract), time); + } return (LocalDateTime) amountToSubtract.subtractFrom(this); } diff --git a/jdk/src/share/classes/java/time/ZonedDateTime.java b/jdk/src/share/classes/java/time/ZonedDateTime.java index 251ca888a14..971ba6daf5b 100644 --- a/jdk/src/share/classes/java/time/ZonedDateTime.java +++ b/jdk/src/share/classes/java/time/ZonedDateTime.java @@ -1540,6 +1540,11 @@ public final class ZonedDateTime */ @Override public ZonedDateTime plus(TemporalAmount amountToAdd) { + Objects.requireNonNull(amountToAdd, "amountToAdd"); + if (amountToAdd instanceof Period) { + Period periodToAdd = (Period) amountToAdd; + return resolveLocal(dateTime.plus(periodToAdd)); + } return (ZonedDateTime) amountToAdd.addTo(this); } @@ -1787,6 +1792,11 @@ public final class ZonedDateTime */ @Override public ZonedDateTime minus(TemporalAmount amountToSubtract) { + Objects.requireNonNull(amountToSubtract, "amountToSubtract"); + if (amountToSubtract instanceof Period) { + Period periodToSubtract = (Period) amountToSubtract; + return resolveLocal(dateTime.minus(periodToSubtract)); + } return (ZonedDateTime) amountToSubtract.subtractFrom(this); }