Skip to content

Commit 55bd740

Browse files
committed
Fix the output of AI
1 parent 99b5902 commit 55bd740

13 files changed

+100
-187
lines changed

core/api/kotlinx-datetime.api

+8
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,10 @@ public final class kotlinx/datetime/LocalDateTime : java/io/Serializable, java/l
377377

378378
public final class kotlinx/datetime/LocalDateTime$Companion {
379379
public final fun Format (Lkotlin/jvm/functions/Function1;)Lkotlinx/datetime/format/DateTimeFormat;
380+
public final fun createOrNull (IIIIIII)Lkotlinx/datetime/LocalDateTime;
381+
public final fun createOrNull (ILkotlinx/datetime/Month;IIIII)Lkotlinx/datetime/LocalDateTime;
382+
public static synthetic fun createOrNull$default (Lkotlinx/datetime/LocalDateTime$Companion;IIIIIIIILjava/lang/Object;)Lkotlinx/datetime/LocalDateTime;
383+
public static synthetic fun createOrNull$default (Lkotlinx/datetime/LocalDateTime$Companion;ILkotlinx/datetime/Month;IIIIIILjava/lang/Object;)Lkotlinx/datetime/LocalDateTime;
380384
public final fun parse (Ljava/lang/CharSequence;Lkotlinx/datetime/format/DateTimeFormat;)Lkotlinx/datetime/LocalDateTime;
381385
public final synthetic fun parse (Ljava/lang/String;)Lkotlinx/datetime/LocalDateTime;
382386
public static synthetic fun parse$default (Lkotlinx/datetime/LocalDateTime$Companion;Ljava/lang/CharSequence;Lkotlinx/datetime/format/DateTimeFormat;ILjava/lang/Object;)Lkotlinx/datetime/LocalDateTime;
@@ -419,6 +423,8 @@ public final class kotlinx/datetime/LocalTime : java/io/Serializable, java/lang/
419423

420424
public final class kotlinx/datetime/LocalTime$Companion {
421425
public final fun Format (Lkotlin/jvm/functions/Function1;)Lkotlinx/datetime/format/DateTimeFormat;
426+
public final fun createOrNull (IIII)Lkotlinx/datetime/LocalTime;
427+
public static synthetic fun createOrNull$default (Lkotlinx/datetime/LocalTime$Companion;IIIIILjava/lang/Object;)Lkotlinx/datetime/LocalTime;
422428
public final fun fromMillisecondOfDay (I)Lkotlinx/datetime/LocalTime;
423429
public final fun fromNanosecondOfDay (J)Lkotlinx/datetime/LocalTime;
424430
public final fun fromSecondOfDay (I)Lkotlinx/datetime/LocalTime;
@@ -527,6 +533,8 @@ public final class kotlinx/datetime/UtcOffset : java/io/Serializable {
527533

528534
public final class kotlinx/datetime/UtcOffset$Companion {
529535
public final fun Format (Lkotlin/jvm/functions/Function1;)Lkotlinx/datetime/format/DateTimeFormat;
536+
public final fun createOrNull (Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Integer;)Lkotlinx/datetime/UtcOffset;
537+
public static synthetic fun createOrNull$default (Lkotlinx/datetime/UtcOffset$Companion;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Integer;ILjava/lang/Object;)Lkotlinx/datetime/UtcOffset;
530538
public final fun getZERO ()Lkotlinx/datetime/UtcOffset;
531539
public final fun parse (Ljava/lang/CharSequence;Lkotlinx/datetime/format/DateTimeFormat;)Lkotlinx/datetime/UtcOffset;
532540
public final synthetic fun parse (Ljava/lang/String;)Lkotlinx/datetime/UtcOffset;

core/api/kotlinx-datetime.klib.api

+4
Original file line numberDiff line numberDiff line change
@@ -416,6 +416,8 @@ final class kotlinx.datetime/LocalDateTime : kotlin/Comparable<kotlinx.datetime/
416416

417417
final object Companion { // kotlinx.datetime/LocalDateTime.Companion|null[0]
418418
final fun Format(kotlin/Function1<kotlinx.datetime.format/DateTimeFormatBuilder.WithDateTime, kotlin/Unit>): kotlinx.datetime.format/DateTimeFormat<kotlinx.datetime/LocalDateTime> // kotlinx.datetime/LocalDateTime.Companion.Format|Format(kotlin.Function1<kotlinx.datetime.format.DateTimeFormatBuilder.WithDateTime,kotlin.Unit>){}[0]
419+
final fun createOrNull(kotlin/Int, kotlin/Int, kotlin/Int, kotlin/Int, kotlin/Int, kotlin/Int = ..., kotlin/Int = ...): kotlinx.datetime/LocalDateTime? // kotlinx.datetime/LocalDateTime.Companion.createOrNull|createOrNull(kotlin.Int;kotlin.Int;kotlin.Int;kotlin.Int;kotlin.Int;kotlin.Int;kotlin.Int){}[0]
420+
final fun createOrNull(kotlin/Int, kotlinx.datetime/Month, kotlin/Int, kotlin/Int, kotlin/Int, kotlin/Int = ..., kotlin/Int = ...): kotlinx.datetime/LocalDateTime? // kotlinx.datetime/LocalDateTime.Companion.createOrNull|createOrNull(kotlin.Int;kotlinx.datetime.Month;kotlin.Int;kotlin.Int;kotlin.Int;kotlin.Int;kotlin.Int){}[0]
419421
final fun parse(kotlin/CharSequence, kotlinx.datetime.format/DateTimeFormat<kotlinx.datetime/LocalDateTime> = ...): kotlinx.datetime/LocalDateTime // kotlinx.datetime/LocalDateTime.Companion.parse|parse(kotlin.CharSequence;kotlinx.datetime.format.DateTimeFormat<kotlinx.datetime.LocalDateTime>){}[0]
420422
final fun parse(kotlin/String): kotlinx.datetime/LocalDateTime // kotlinx.datetime/LocalDateTime.Companion.parse|parse(kotlin.String){}[0]
421423
final fun serializer(): kotlinx.serialization/KSerializer<kotlinx.datetime/LocalDateTime> // kotlinx.datetime/LocalDateTime.Companion.serializer|serializer(){}[0]
@@ -449,6 +451,7 @@ final class kotlinx.datetime/LocalTime : kotlin/Comparable<kotlinx.datetime/Loca
449451

450452
final object Companion { // kotlinx.datetime/LocalTime.Companion|null[0]
451453
final fun Format(kotlin/Function1<kotlinx.datetime.format/DateTimeFormatBuilder.WithTime, kotlin/Unit>): kotlinx.datetime.format/DateTimeFormat<kotlinx.datetime/LocalTime> // kotlinx.datetime/LocalTime.Companion.Format|Format(kotlin.Function1<kotlinx.datetime.format.DateTimeFormatBuilder.WithTime,kotlin.Unit>){}[0]
454+
final fun createOrNull(kotlin/Int, kotlin/Int, kotlin/Int = ..., kotlin/Int = ...): kotlinx.datetime/LocalTime? // kotlinx.datetime/LocalTime.Companion.createOrNull|createOrNull(kotlin.Int;kotlin.Int;kotlin.Int;kotlin.Int){}[0]
452455
final fun fromMillisecondOfDay(kotlin/Int): kotlinx.datetime/LocalTime // kotlinx.datetime/LocalTime.Companion.fromMillisecondOfDay|fromMillisecondOfDay(kotlin.Int){}[0]
453456
final fun fromNanosecondOfDay(kotlin/Long): kotlinx.datetime/LocalTime // kotlinx.datetime/LocalTime.Companion.fromNanosecondOfDay|fromNanosecondOfDay(kotlin.Long){}[0]
454457
final fun fromSecondOfDay(kotlin/Int): kotlinx.datetime/LocalTime // kotlinx.datetime/LocalTime.Companion.fromSecondOfDay|fromSecondOfDay(kotlin.Int){}[0]
@@ -476,6 +479,7 @@ final class kotlinx.datetime/UtcOffset { // kotlinx.datetime/UtcOffset|null[0]
476479
final fun <get-ZERO>(): kotlinx.datetime/UtcOffset // kotlinx.datetime/UtcOffset.Companion.ZERO.<get-ZERO>|<get-ZERO>(){}[0]
477480

478481
final fun Format(kotlin/Function1<kotlinx.datetime.format/DateTimeFormatBuilder.WithUtcOffset, kotlin/Unit>): kotlinx.datetime.format/DateTimeFormat<kotlinx.datetime/UtcOffset> // kotlinx.datetime/UtcOffset.Companion.Format|Format(kotlin.Function1<kotlinx.datetime.format.DateTimeFormatBuilder.WithUtcOffset,kotlin.Unit>){}[0]
482+
final fun createOrNull(kotlin/Int? = ..., kotlin/Int? = ..., kotlin/Int? = ...): kotlinx.datetime/UtcOffset? // kotlinx.datetime/UtcOffset.Companion.createOrNull|createOrNull(kotlin.Int?;kotlin.Int?;kotlin.Int?){}[0]
479483
final fun parse(kotlin/CharSequence, kotlinx.datetime.format/DateTimeFormat<kotlinx.datetime/UtcOffset> = ...): kotlinx.datetime/UtcOffset // kotlinx.datetime/UtcOffset.Companion.parse|parse(kotlin.CharSequence;kotlinx.datetime.format.DateTimeFormat<kotlinx.datetime.UtcOffset>){}[0]
480484
final fun parse(kotlin/String): kotlinx.datetime/UtcOffset // kotlinx.datetime/UtcOffset.Companion.parse|parse(kotlin.String){}[0]
481485
final fun serializer(): kotlinx.serialization/KSerializer<kotlinx.datetime/UtcOffset> // kotlinx.datetime/UtcOffset.Companion.serializer|serializer(){}[0]

core/common/src/LocalDateTime.kt

-7
Original file line numberDiff line numberDiff line change
@@ -168,13 +168,6 @@ public expect class LocalDateTime : Comparable<LocalDateTime> {
168168
nanosecond: Int = 0
169169
): LocalDateTime?
170170

171-
/**
172-
* Constructs a [LocalDateTime] instance by combining the given [date] and [time] parts
173-
* or returns `null` if either [date] or [time] is `null`.
174-
*
175-
* @sample kotlinx.datetime.test.samples.LocalDateTimeSamples.createOrNullFromDateAndTime
176-
*/
177-
public fun createOrNull(date: LocalDate?, time: LocalTime?): LocalDateTime?
178171

179172
/**
180173
* A shortcut for calling [DateTimeFormat.parse].

core/common/test/LocalDateTimeTest.kt

+20-45
Original file line numberDiff line numberDiff line change
@@ -131,62 +131,37 @@ class LocalDateTimeTest {
131131
}
132132

133133
@Test
134-
fun createOrNull() {
135-
// Test createOrNull with month number
136-
val validDateTime1 = LocalDateTime.createOrNull(2020, 1, 1, 12, 30, 45, 500_000_000)
137-
assertNotNull(validDateTime1)
138-
assertEquals(2020, validDateTime1!!.year)
139-
assertEquals(1, validDateTime1.month.number)
140-
assertEquals(1, validDateTime1.day)
141-
assertEquals(12, validDateTime1.hour)
142-
assertEquals(30, validDateTime1.minute)
143-
assertEquals(45, validDateTime1.second)
144-
assertEquals(500_000_000, validDateTime1.nanosecond)
134+
fun createOrNull() {// Test createOrNull with month number
135+
LocalDateTime.createOrNull(2020, 1, 1, 12, 30, 45, 500_000_000)?.let {
136+
checkComponents(it, 2020, 1, 1, 12, 30, 45, 500_000_000)
137+
} ?: fail("LocalDateTime.createOrNull should not return null")
145138

146139
// Test createOrNull with Month enum
147-
val validDateTime2 = LocalDateTime.createOrNull(2020, Month.FEBRUARY, 29, 23, 59, 59, 999_999_999)
148-
assertNotNull(validDateTime2)
149-
assertEquals(2020, validDateTime2!!.year)
150-
assertEquals(Month.FEBRUARY, validDateTime2.month)
151-
assertEquals(29, validDateTime2.day)
152-
assertEquals(23, validDateTime2.hour)
153-
assertEquals(59, validDateTime2.minute)
154-
assertEquals(59, validDateTime2.second)
155-
assertEquals(999_999_999, validDateTime2.nanosecond)
156-
157-
// Test createOrNull with LocalDate and LocalTime
158-
val date = LocalDate(2020, 1, 1)
159-
val time = LocalTime(12, 30, 45, 500_000_000)
160-
val validDateTime3 = LocalDateTime.createOrNull(date, time)
161-
assertNotNull(validDateTime3)
162-
assertEquals(date, validDateTime3!!.date)
163-
assertEquals(time, validDateTime3.time)
140+
LocalDateTime.createOrNull(2020, Month.FEBRUARY, 29, 23, 59, 59, 999_999_999)?.let {
141+
checkComponents(it, 2020, 2, 29, 23, 59, 59, 999_999_999)
142+
} ?: fail("LocalDateTime.createOrNull should not return null")
164143

165144
// Test invalid date components
166-
assertNull(LocalDateTime.createOrNull(2021, 2, 29, 12, 30)) // Invalid day (not a leap year)
167-
assertNull(LocalDateTime.createOrNull(2020, 13, 1, 12, 30)) // Invalid month
168-
assertNull(LocalDateTime.createOrNull(2020, 0, 1, 12, 30)) // Invalid month
169-
assertNull(LocalDateTime.createOrNull(2020, 1, 32, 12, 30)) // Invalid day
170-
assertNull(LocalDateTime.createOrNull(2020, 1, 0, 12, 30)) // Invalid day
145+
for ((year, month, day) in invalidDates) {
146+
assertNull(LocalDateTime.createOrNull(year, month, day, 12, 30))
147+
runCatching { Month(month) }.onSuccess { monthEnum ->
148+
assertNull(LocalDateTime.createOrNull(year, monthEnum, day, 12, 30))
149+
}
150+
}
171151

172152
// Test invalid time components
173-
assertNull(LocalDateTime.createOrNull(2020, 1, 1, -1, 30)) // Invalid hour
174-
assertNull(LocalDateTime.createOrNull(2020, 1, 1, 24, 30)) // Invalid hour
175-
assertNull(LocalDateTime.createOrNull(2020, 1, 1, 12, -1)) // Invalid minute
176-
assertNull(LocalDateTime.createOrNull(2020, 1, 1, 12, 60)) // Invalid minute
177-
assertNull(LocalDateTime.createOrNull(2020, 1, 1, 12, 30, -1)) // Invalid second
178-
assertNull(LocalDateTime.createOrNull(2020, 1, 1, 12, 30, 60)) // Invalid second
179-
assertNull(LocalDateTime.createOrNull(2020, 1, 1, 12, 30, 45, -1)) // Invalid nanosecond
180-
assertNull(LocalDateTime.createOrNull(2020, 1, 1, 12, 30, 45, 1_000_000_000)) // Invalid nanosecond
153+
for (input in invalidTimes) {
154+
when (input.size) {
155+
2 -> assertNull(LocalDateTime.createOrNull(2024, 1, 1, input[0], input[1]))
156+
3 -> assertNull(LocalDateTime.createOrNull(2024, 1, 1, input[0], input[1], input[2]))
157+
4 -> assertNull(LocalDateTime.createOrNull(2024, 1, 1, input[0], input[1], input[2], input[3]))
158+
}
159+
}
181160

182161
// Test with Month enum
183162
assertNull(LocalDateTime.createOrNull(2021, Month.FEBRUARY, 29, 12, 30)) // Invalid day (not a leap year)
184163
assertNull(LocalDateTime.createOrNull(2020, Month.FEBRUARY, 30, 12, 30)) // Invalid day for February
185164

186-
// Test with null LocalDate or LocalTime
187-
assertNull(LocalDateTime.createOrNull(null, time))
188-
assertNull(LocalDateTime.createOrNull(date, null))
189-
assertNull(LocalDateTime.createOrNull(null, null))
190165
}
191166

192167
}

core/common/test/LocalTimeTest.kt

+27-26
Original file line numberDiff line numberDiff line change
@@ -90,36 +90,26 @@ class LocalTimeTest {
9090
@Test
9191
fun createOrNull() {
9292
// Valid times should be created correctly
93-
val validTime1 = LocalTime.createOrNull(12, 30, 45, 500_000_000)
94-
assertNotNull(validTime1)
95-
assertEquals(12, validTime1!!.hour)
96-
assertEquals(30, validTime1.minute)
97-
assertEquals(45, validTime1.second)
98-
assertEquals(500_000_000, validTime1.nanosecond)
93+
LocalTime.createOrNull(12, 30, 45, 500_000_000)?.let {
94+
checkComponents(it, 12, 30, 45, 500_000_000)
95+
} ?: fail("LocalTime.createOrNull should not return null")
9996

100-
val validTime2 = LocalTime.createOrNull(0, 0)
101-
assertNotNull(validTime2)
102-
assertEquals(0, validTime2!!.hour)
103-
assertEquals(0, validTime2.minute)
104-
assertEquals(0, validTime2.second)
105-
assertEquals(0, validTime2.nanosecond)
97+
LocalTime.createOrNull(0, 0)?.let {
98+
checkComponents(it, 0, 0)
99+
} ?: fail("LocalTime.createOrNull should not return null")
106100

107-
val validTime3 = LocalTime.createOrNull(23, 59, 59, 999_999_999)
108-
assertNotNull(validTime3)
109-
assertEquals(23, validTime3!!.hour)
110-
assertEquals(59, validTime3.minute)
111-
assertEquals(59, validTime3.second)
112-
assertEquals(999_999_999, validTime3.nanosecond)
101+
LocalTime.createOrNull(23, 59, 59, 999_999_999)?.let {
102+
checkComponents(it, 23, 59, 59, 999_999_999)
103+
} ?: fail("LocalTime.createOrNull should not return null")
113104

114105
// Invalid times should return null
115-
assertNull(LocalTime.createOrNull(-1, 0))
116-
assertNull(LocalTime.createOrNull(24, 0))
117-
assertNull(LocalTime.createOrNull(0, -1))
118-
assertNull(LocalTime.createOrNull(0, 60))
119-
assertNull(LocalTime.createOrNull(0, 0, -1))
120-
assertNull(LocalTime.createOrNull(0, 0, 60))
121-
assertNull(LocalTime.createOrNull(0, 0, 0, -1))
122-
assertNull(LocalTime.createOrNull(0, 0, 0, 1_000_000_000))
106+
for (input in invalidTimes) {
107+
when (input.size) {
108+
2 -> assertNull(LocalTime.createOrNull(input[0], input[1]))
109+
3 -> assertNull(LocalTime.createOrNull(input[0], input[1], input[2]))
110+
4 -> assertNull(LocalTime.createOrNull(input[0], input[1], input[2], input[3]))
111+
}
112+
}
123113
}
124114

125115
@Test
@@ -238,6 +228,17 @@ class LocalTimeTest {
238228
}
239229
}
240230

231+
val invalidTimes = listOf(
232+
listOf(-1, 0), // invalid hour
233+
listOf(24, 0), // invalid hour
234+
listOf(0, -1), // invalid minute
235+
listOf(0, 60), // invalid minute
236+
listOf(0, 0, -1), // invalid second
237+
listOf(0, 0, 60), // invalid second
238+
listOf(0, 0, 0, -1), // invalid nanosecond
239+
listOf(0, 0, 0, 1_000_000_000) // invalid nanosecond
240+
)
241+
241242
fun checkComponents(value: LocalTime, hour: Int, minute: Int, second: Int = 0, nanosecond: Int = 0) {
242243
assertEquals(hour, value.hour, "hours")
243244
assertEquals(minute, value.minute, "minutes")

0 commit comments

Comments
 (0)