Closed jodastephen closed 10 years ago
This patch makes the change. The optimisation level in this patch is medium, rather than full, as full optimisation would involve writing a dedicated algorithm and package scoped methods with greater chance of bug.
diff -r 31abdb418315 src/share/classes/java/time/LocalDate.java
--- a/src/share/classes/java/time/LocalDate.java Thu Aug 08 11:47:50 2013 -0700
+++ b/src/share/classes/java/time/LocalDate.java Sun Aug 25 22:39:21 2013 +0100
@@ -1125,6 +1125,11 @@
*/
@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 @@
*/
@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 -r 31abdb418315 src/share/classes/java/time/LocalDateTime.java
--- a/src/share/classes/java/time/LocalDateTime.java Thu Aug 08 11:47:50 2013 -0700
+++ b/src/share/classes/java/time/LocalDateTime.java Sun Aug 25 22:39:21 2013 +0100
@@ -1129,6 +1129,11 @@
*/
@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 @@
*/
@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 -r 31abdb418315 src/share/classes/java/time/ZonedDateTime.java
--- a/src/share/classes/java/time/ZonedDateTime.java Thu Aug 08 11:47:50 2013 -0700
+++ b/src/share/classes/java/time/ZonedDateTime.java Sun Aug 25 22:39:21 2013 +0100
@@ -1540,6 +1540,11 @@
*/
@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 @@
*/
@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);
}
Looks fine.
JBS mirror is 8023764.
I can't push this:
1 changesets found
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 3 changes to 3 files
remote: [jcheck ]
remote:
remote: > Changeset: 8575:27dc14b3de87
remote: > Author: scolebourne@joda.org
remote: > Date: 2013-08-27 09:11
remote: >
remote: > Optimize period addition/subtraction
remote: > Fixes GitHub #330, JBS #8023764
remote:
remote: Invalid changeset author: scolebourne@joda.org
remote:
remote: abort: pretxnchangegroup.0.jcheck hook failed
remote: transaction abort!
remote: rollback completed
abort: unexpected response: empty string
The
Period.addTo
method is relatively complicated and should be fast-tracked for the common cases ofLocalDate
,LocalDateTime
,ZonedDateTime
.