Skip to content

Commit 050bd26

Browse files
committed
Fix the output of AI
1 parent 7fdfdff commit 050bd26

File tree

14 files changed

+102
-202
lines changed

14 files changed

+102
-202
lines changed

core/api/kotlinx-datetime.api

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -478,6 +478,10 @@ public final class kotlinx/datetime/LocalDateTime : java/io/Serializable, java/l
478478

479479
public final class kotlinx/datetime/LocalDateTime$Companion {
480480
public final fun Format (Lkotlin/jvm/functions/Function1;)Lkotlinx/datetime/format/DateTimeFormat;
481+
public final fun createOrNull (IIIIIII)Lkotlinx/datetime/LocalDateTime;
482+
public final fun createOrNull (ILkotlinx/datetime/Month;IIIII)Lkotlinx/datetime/LocalDateTime;
483+
public static synthetic fun createOrNull$default (Lkotlinx/datetime/LocalDateTime$Companion;IIIIIIIILjava/lang/Object;)Lkotlinx/datetime/LocalDateTime;
484+
public static synthetic fun createOrNull$default (Lkotlinx/datetime/LocalDateTime$Companion;ILkotlinx/datetime/Month;IIIIIILjava/lang/Object;)Lkotlinx/datetime/LocalDateTime;
481485
public final fun parse (Ljava/lang/CharSequence;Lkotlinx/datetime/format/DateTimeFormat;)Lkotlinx/datetime/LocalDateTime;
482486
public final synthetic fun parse (Ljava/lang/String;)Lkotlinx/datetime/LocalDateTime;
483487
public static synthetic fun parse$default (Lkotlinx/datetime/LocalDateTime$Companion;Ljava/lang/CharSequence;Lkotlinx/datetime/format/DateTimeFormat;ILjava/lang/Object;)Lkotlinx/datetime/LocalDateTime;
@@ -520,6 +524,8 @@ public final class kotlinx/datetime/LocalTime : java/io/Serializable, java/lang/
520524

521525
public final class kotlinx/datetime/LocalTime$Companion {
522526
public final fun Format (Lkotlin/jvm/functions/Function1;)Lkotlinx/datetime/format/DateTimeFormat;
527+
public final fun createOrNull (IIII)Lkotlinx/datetime/LocalTime;
528+
public static synthetic fun createOrNull$default (Lkotlinx/datetime/LocalTime$Companion;IIIIILjava/lang/Object;)Lkotlinx/datetime/LocalTime;
523529
public final fun fromMillisecondOfDay (I)Lkotlinx/datetime/LocalTime;
524530
public final fun fromNanosecondOfDay (J)Lkotlinx/datetime/LocalTime;
525531
public final fun fromSecondOfDay (I)Lkotlinx/datetime/LocalTime;
@@ -645,6 +651,8 @@ public final class kotlinx/datetime/UtcOffset : java/io/Serializable {
645651

646652
public final class kotlinx/datetime/UtcOffset$Companion {
647653
public final fun Format (Lkotlin/jvm/functions/Function1;)Lkotlinx/datetime/format/DateTimeFormat;
654+
public final fun createOrNull (Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Integer;)Lkotlinx/datetime/UtcOffset;
655+
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;
648656
public final fun getZERO ()Lkotlinx/datetime/UtcOffset;
649657
public final fun parse (Ljava/lang/CharSequence;Lkotlinx/datetime/format/DateTimeFormat;)Lkotlinx/datetime/UtcOffset;
650658
public final synthetic fun parse (Ljava/lang/String;)Lkotlinx/datetime/UtcOffset;

core/api/kotlinx-datetime.klib.api

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -507,6 +507,8 @@ final class kotlinx.datetime/LocalDateTime : kotlin/Comparable<kotlinx.datetime/
507507

508508
final object Companion { // kotlinx.datetime/LocalDateTime.Companion|null[0]
509509
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]
510+
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]
511+
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]
510512
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]
511513
final fun parse(kotlin/String): kotlinx.datetime/LocalDateTime // kotlinx.datetime/LocalDateTime.Companion.parse|parse(kotlin.String){}[0]
512514
final fun serializer(): kotlinx.serialization/KSerializer<kotlinx.datetime/LocalDateTime> // kotlinx.datetime/LocalDateTime.Companion.serializer|serializer(){}[0]
@@ -540,6 +542,7 @@ final class kotlinx.datetime/LocalTime : kotlin/Comparable<kotlinx.datetime/Loca
540542

541543
final object Companion { // kotlinx.datetime/LocalTime.Companion|null[0]
542544
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]
545+
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]
543546
final fun fromMillisecondOfDay(kotlin/Int): kotlinx.datetime/LocalTime // kotlinx.datetime/LocalTime.Companion.fromMillisecondOfDay|fromMillisecondOfDay(kotlin.Int){}[0]
544547
final fun fromNanosecondOfDay(kotlin/Long): kotlinx.datetime/LocalTime // kotlinx.datetime/LocalTime.Companion.fromNanosecondOfDay|fromNanosecondOfDay(kotlin.Long){}[0]
545548
final fun fromSecondOfDay(kotlin/Int): kotlinx.datetime/LocalTime // kotlinx.datetime/LocalTime.Companion.fromSecondOfDay|fromSecondOfDay(kotlin.Int){}[0]
@@ -569,6 +572,7 @@ final class kotlinx.datetime/UtcOffset { // kotlinx.datetime/UtcOffset|null[0]
569572
final fun <get-ZERO>(): kotlinx.datetime/UtcOffset // kotlinx.datetime/UtcOffset.Companion.ZERO.<get-ZERO>|<get-ZERO>(){}[0]
570573

571574
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]
575+
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]
572576
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]
573577
final fun parse(kotlin/String): kotlinx.datetime/UtcOffset // kotlinx.datetime/UtcOffset.Companion.parse|parse(kotlin.String){}[0]
574578
final fun serializer(): kotlinx.serialization/KSerializer<kotlinx.datetime/UtcOffset> // kotlinx.datetime/UtcOffset.Companion.serializer|serializer(){}[0]

core/common/src/LocalDateTime.kt

Lines changed: 0 additions & 7 deletions
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

Lines changed: 20 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -132,62 +132,37 @@ class LocalDateTimeTest {
132132
}
133133

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

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

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

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

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

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

193168
}

core/common/test/LocalTimeTest.kt

Lines changed: 27 additions & 26 deletions
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)