Skip to content

Commit 6b44c6b

Browse files
authored
Deprecate plus and minus operations taking DateTimeUnit without amount (#247)
fixes #95, #246
1 parent 5ef36a1 commit 6b44c6b

File tree

10 files changed

+23
-11
lines changed

10 files changed

+23
-11
lines changed

core/common/src/Instant.kt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ public fun Instant.minus(period: DateTimePeriod, timeZone: TimeZone): Instant =
239239
plus(negatedPeriod, timeZone)
240240
} else {
241241
val negatedPeriod = with(period) { buildDateTimePeriod(-totalMonths, -days, -(totalNanoseconds+1)) }
242-
plus(negatedPeriod, timeZone).plus(DateTimeUnit.NANOSECOND)
242+
plus(negatedPeriod, timeZone).plus(1, DateTimeUnit.NANOSECOND)
243243
}
244244

245245
/**
@@ -351,6 +351,7 @@ public fun Instant.minus(other: Instant, timeZone: TimeZone): DateTimePeriod =
351351
*
352352
* @throws DateTimeArithmeticException if this value or the result is too large to fit in [LocalDateTime].
353353
*/
354+
@Deprecated("Use the plus overload with an explicit number of units", ReplaceWith("this.plus(1, unit, timeZone)"))
354355
public expect fun Instant.plus(unit: DateTimeUnit, timeZone: TimeZone): Instant
355356

356357
/**
@@ -361,6 +362,7 @@ public expect fun Instant.plus(unit: DateTimeUnit, timeZone: TimeZone): Instant
361362
*
362363
* @throws DateTimeArithmeticException if this value or the result is too large to fit in [LocalDateTime].
363364
*/
365+
@Deprecated("Use the minus overload with an explicit number of units", ReplaceWith("this.minus(1, unit, timeZone)"))
364366
public fun Instant.minus(unit: DateTimeUnit, timeZone: TimeZone): Instant =
365367
plus(-1, unit, timeZone)
366368

@@ -371,6 +373,7 @@ public fun Instant.minus(unit: DateTimeUnit, timeZone: TimeZone): Instant =
371373
*
372374
* The return value is clamped to the platform-specific boundaries for [Instant] if the result exceeds them.
373375
*/
376+
@Deprecated("Use the plus overload with an explicit number of units", ReplaceWith("this.plus(1, unit)"))
374377
public fun Instant.plus(unit: DateTimeUnit.TimeBased): Instant =
375378
plus(1L, unit)
376379

@@ -381,6 +384,7 @@ public fun Instant.plus(unit: DateTimeUnit.TimeBased): Instant =
381384
*
382385
* The return value is clamped to the platform-specific boundaries for [Instant] if the result exceeds them.
383386
*/
387+
@Deprecated("Use the minus overload with an explicit number of units", ReplaceWith("this.minus(1, unit)"))
384388
public fun Instant.minus(unit: DateTimeUnit.TimeBased): Instant =
385389
plus(-1L, unit)
386390

@@ -452,7 +456,7 @@ public fun Instant.minus(value: Long, unit: DateTimeUnit, timeZone: TimeZone): I
452456
if (value != Long.MIN_VALUE) {
453457
plus(-value, unit, timeZone)
454458
} else {
455-
plus(-(value + 1), unit, timeZone).plus(unit, timeZone)
459+
plus(-(value + 1), unit, timeZone).plus(1, unit, timeZone)
456460
}
457461

458462
/**
@@ -477,7 +481,7 @@ public fun Instant.minus(value: Long, unit: DateTimeUnit.TimeBased): Instant =
477481
if (value != Long.MIN_VALUE) {
478482
plus(-value, unit)
479483
} else {
480-
plus(-(value + 1), unit).plus(unit)
484+
plus(-(value + 1), unit).plus(1, unit)
481485
}
482486

483487
/**

core/common/src/LocalDate.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,7 @@ public expect fun LocalDate.yearsUntil(other: LocalDate): Int
250250
*
251251
* @throws DateTimeArithmeticException if the result exceeds the boundaries of [LocalDate].
252252
*/
253+
@Deprecated("Use the plus overload with an explicit number of units", ReplaceWith("this.plus(1, unit)"))
253254
public expect fun LocalDate.plus(unit: DateTimeUnit.DateBased): LocalDate
254255

255256
/**
@@ -259,6 +260,7 @@ public expect fun LocalDate.plus(unit: DateTimeUnit.DateBased): LocalDate
259260
*
260261
* @throws DateTimeArithmeticException if the result exceeds the boundaries of [LocalDate].
261262
*/
263+
@Deprecated("Use the minus overload with an explicit number of units", ReplaceWith("this.minus(1, unit)"))
262264
public fun LocalDate.minus(unit: DateTimeUnit.DateBased): LocalDate = plus(-1, unit)
263265

264266
/**

core/common/test/InstantTest.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -163,12 +163,12 @@ class InstantTest {
163163
expectBetween(instant1, instant2, 24, DateTimeUnit.HOUR)
164164
assertEquals(instant1, instant2.minus(DateTimePeriod(hours = 24), zone))
165165

166-
val instant3 = instant1.plus(DateTimeUnit.DAY, zone)
166+
val instant3 = instant1.plus(1, DateTimeUnit.DAY, zone)
167167
checkComponents(instant3.toLocalDateTime(zone), 2019, 10, 28, 2, 59)
168168
expectBetween(instant1, instant3, 25, DateTimeUnit.HOUR)
169169
expectBetween(instant1, instant3, 1, DateTimeUnit.DAY)
170170
assertEquals(1, instant1.daysUntil(instant3, zone))
171-
assertEquals(instant1.minus(DateTimeUnit.HOUR), instant2.minus(DateTimeUnit.DAY, zone))
171+
assertEquals(instant1.minus(1, DateTimeUnit.HOUR), instant2.minus(1, DateTimeUnit.DAY, zone))
172172

173173
val instant4 = instant1.plus(14, DateTimeUnit.MONTH, zone)
174174
checkComponents(instant4.toLocalDateTime(zone), 2020, 12, 27, 2, 59)
@@ -178,15 +178,15 @@ class InstantTest {
178178
expectBetween(instant1, instant4, 61, DateTimeUnit.WEEK)
179179
expectBetween(instant1, instant4, 366 + 31 + 30, DateTimeUnit.DAY)
180180
expectBetween(instant1, instant4, (366 + 31 + 30) * 24 + 1, DateTimeUnit.HOUR)
181-
assertEquals(instant1.plus(DateTimeUnit.HOUR), instant4.minus(14, DateTimeUnit.MONTH, zone))
181+
assertEquals(instant1.plus(1, DateTimeUnit.HOUR), instant4.minus(14, DateTimeUnit.MONTH, zone))
182182

183183
val period = DateTimePeriod(days = 1, hours = 1)
184184
val instant5 = instant1.plus(period, zone)
185185
checkComponents(instant5.toLocalDateTime(zone), 2019, 10, 28, 3, 59)
186186
assertEquals(period, instant1.periodUntil(instant5, zone))
187187
assertEquals(period, instant5.minus(instant1, zone))
188188
assertEquals(26.hours, instant5.minus(instant1))
189-
assertEquals(instant1.plus(DateTimeUnit.HOUR), instant5.minus(period, zone))
189+
assertEquals(instant1.plus(1, DateTimeUnit.HOUR), instant5.minus(period, zone))
190190

191191
val instant6 = instant1.plus(23, DateTimeUnit.HOUR, zone)
192192
checkComponents(instant6.toLocalDateTime(zone), 2019, 10, 28, 0, 59)

core/common/test/LocalDateTest.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -104,9 +104,9 @@ class LocalDateTest {
104104
fun addComponents() {
105105
val startDate = LocalDate(2016, 2, 29)
106106
checkComponents(startDate.plus(1, DateTimeUnit.DAY), 2016, 3, 1)
107-
checkComponents(startDate.plus(DateTimeUnit.YEAR), 2017, 2, 28)
107+
checkComponents(startDate.plus(1, DateTimeUnit.YEAR), 2017, 2, 28)
108108
checkComponents(startDate + DatePeriod(years = 4), 2020, 2, 29)
109-
assertEquals(startDate, startDate.plus(DateTimeUnit.DAY).minus(DateTimeUnit.DAY))
109+
assertEquals(startDate, startDate.plus(1, DateTimeUnit.DAY).minus(1, DateTimeUnit.DAY))
110110
assertEquals(startDate, startDate.plus(3, DateTimeUnit.DAY).minus(3, DateTimeUnit.DAY))
111111
assertEquals(startDate, startDate + DatePeriod(years = 4) - DatePeriod(years = 4))
112112

@@ -121,9 +121,9 @@ class LocalDateTest {
121121
fun tomorrow() {
122122
val today = Clock.System.todayIn(TimeZone.currentSystemDefault())
123123

124-
val nextMonthPlusDay1 = today.plus(DateTimeUnit.MONTH).plus(1, DateTimeUnit.DAY)
124+
val nextMonthPlusDay1 = today.plus(1, DateTimeUnit.MONTH).plus(1, DateTimeUnit.DAY)
125125
val nextMonthPlusDay2 = today + DatePeriod(months = 1, days = 1)
126-
val nextMonthPlusDay3 = today.plus(DateTimeUnit.DAY).plus(1, DateTimeUnit.MONTH)
126+
val nextMonthPlusDay3 = today.plus(1, DateTimeUnit.DAY).plus(1, DateTimeUnit.MONTH)
127127
}
128128

129129
@Test

core/js/src/Instant.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ public actual fun Instant.plus(period: DateTimePeriod, timeZone: TimeZone): Inst
138138
private fun Instant.atZone(zone: TimeZone): ZonedDateTime = value.atZone(zone.zoneId)
139139
private fun jtInstant.checkZone(zone: TimeZone): jtInstant = apply { atZone(zone.zoneId) }
140140

141+
@Deprecated("Use the plus overload with an explicit number of units", ReplaceWith("this.plus(1, unit, timeZone)"))
141142
public actual fun Instant.plus(unit: DateTimeUnit, timeZone: TimeZone): Instant =
142143
plus(1, unit, timeZone)
143144

core/js/src/LocalDate.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ public actual class LocalDate internal constructor(internal val value: jtLocalDa
6060
public actual fun toEpochDays(): Int = value.toEpochDay().toInt()
6161
}
6262

63+
@Deprecated("Use the plus overload with an explicit number of units", ReplaceWith("this.plus(1, unit)"))
6364
public actual fun LocalDate.plus(unit: DateTimeUnit.DateBased): LocalDate = plusNumber(1, unit)
6465
public actual fun LocalDate.plus(value: Int, unit: DateTimeUnit.DateBased): LocalDate = plusNumber(value, unit)
6566
public actual fun LocalDate.minus(value: Int, unit: DateTimeUnit.DateBased): LocalDate = plusNumber(-value, unit)

core/jvm/src/Instant.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ public actual fun Instant.plus(period: DateTimePeriod, timeZone: TimeZone): Inst
121121
}
122122
}
123123

124+
@Deprecated("Use the plus overload with an explicit number of units", ReplaceWith("this.plus(1, unit, timeZone)"))
124125
public actual fun Instant.plus(unit: DateTimeUnit, timeZone: TimeZone): Instant =
125126
plus(1L, unit, timeZone)
126127

core/jvm/src/LocalDate.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ public actual class LocalDate internal constructor(internal val value: jtLocalDa
5959
public actual fun toEpochDays(): Int = value.toEpochDay().clampToInt()
6060
}
6161

62+
@Deprecated("Use the plus overload with an explicit number of units", ReplaceWith("this.plus(1, unit)"))
6263
public actual fun LocalDate.plus(unit: DateTimeUnit.DateBased): LocalDate =
6364
plus(1L, unit)
6465

core/native/src/Instant.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,7 @@ public actual fun Instant.plus(period: DateTimePeriod, timeZone: TimeZone): Inst
273273
throw DateTimeArithmeticException("Boundaries of Instant exceeded when adding CalendarPeriod", e)
274274
}
275275

276+
@Deprecated("Use the plus overload with an explicit number of units", ReplaceWith("this.plus(1, unit, timeZone)"))
276277
public actual fun Instant.plus(unit: DateTimeUnit, timeZone: TimeZone): Instant =
277278
plus(1L, unit, timeZone)
278279
public actual fun Instant.plus(value: Int, unit: DateTimeUnit, timeZone: TimeZone): Instant =

core/native/src/LocalDate.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,7 @@ public actual class LocalDate actual constructor(public actual val year: Int, pu
232232
}
233233
}
234234

235+
@Deprecated("Use the plus overload with an explicit number of units", ReplaceWith("this.plus(1, unit)"))
235236
public actual fun LocalDate.plus(unit: DateTimeUnit.DateBased): LocalDate =
236237
plus(1, unit)
237238

0 commit comments

Comments
 (0)