Skip to content

Commit 390b84d

Browse files
committed
migration from kotlinx.datetime.Instant -> kotlin.time.Instant #1350
1 parent 1ca44b5 commit 390b84d

File tree

31 files changed

+183
-85
lines changed

31 files changed

+183
-85
lines changed

build.gradle.kts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,12 @@ allprojects {
188188
options.release.set(8)
189189
}
190190
}
191+
tasks.withType<KotlinCompile> {
192+
compilerOptions {
193+
// enables support for kotlin.time.Instant as kotlinx.datetime.Instant was deprecated
194+
optIn.add("kotlin.time.ExperimentalTime")
195+
}
196+
}
191197

192198
// Attempts to configure ktlint for each sub-project that uses the plugin
193199
afterEvaluate {

core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/api/convert.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.jetbrains.kotlinx.dataframe.api
22

3-
import kotlinx.datetime.Instant
43
import kotlinx.datetime.LocalDate
54
import kotlinx.datetime.LocalDateTime
65
import kotlinx.datetime.LocalTime
@@ -64,6 +63,8 @@ import kotlin.reflect.KProperty
6463
import kotlin.reflect.KType
6564
import kotlin.reflect.full.isSubtypeOf
6665
import kotlin.reflect.typeOf
66+
import kotlin.time.Instant
67+
import kotlinx.datetime.Instant as DeprecatedInstant
6768

6869
/**
6970
* See also [parse] — a specialized form of the [convert] operation that parses [String] columns
@@ -118,7 +119,7 @@ internal interface ConvertDocs {
118119
* * [Byte], [Short], [Char];
119120
* * [Int], [Long], [Float], [Double];
120121
* * [BigDecimal], [BigInteger];
121-
* * [LocalDateTime], [LocalDate], [LocalTime], [Instant] ( (kotlinx.datetime and [java.time]),
122+
* * [LocalDateTime], [LocalDate], [LocalTime], [Instant] ([kotlinx.datetime][DeprecatedInstant], [kotlin.time][Instant] and [java.time][java.time.Instant]),
122123
* * [URL], [IMG], [IFRAME].
123124
*/
124125
interface SupportedTypes
@@ -322,7 +323,8 @@ public inline fun <T, C, reified R> Convert<T, C?>.notNull(
322323
* - [asFrame][Convert.asFrame] – converts [column groups][ColumnGroup] as a [DataFrame] with the given expression.
323324
* - [toStr], [toInt], [toLong], [toDouble], [toFloat], [toBigDecimal],
324325
* [toBigInteger], [toBoolean] – convert to standard types.
325-
* - [toLocalDateTime], [toLocalDate], [toLocalTime], [toInstant] – convert to kotlinx.datetime types.
326+
* - [toLocalDateTime], [toLocalDate], [toLocalTime] – convert to kotlinx.datetime types.
327+
* - [toInstant] – convert to kotlin.time.Instant.
326328
* - [toUrl], [toIFrame], [toImg] – convert to special types.
327329
* - [toDataFrames] – converts a column of lists into separate DataFrames.
328330
*

core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/api/convert.kt

Lines changed: 91 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,21 @@
11
package org.jetbrains.kotlinx.dataframe.impl.api
22

3-
import kotlinx.datetime.Instant
43
import kotlinx.datetime.LocalDate
54
import kotlinx.datetime.LocalDateTime
65
import kotlinx.datetime.LocalTime
76
import kotlinx.datetime.TimeZone
87
import kotlinx.datetime.atStartOfDayIn
98
import kotlinx.datetime.atTime
9+
import kotlinx.datetime.toDeprecatedInstant
1010
import kotlinx.datetime.toInstant
11-
import kotlinx.datetime.toJavaInstant
1211
import kotlinx.datetime.toJavaLocalDate
1312
import kotlinx.datetime.toJavaLocalDateTime
1413
import kotlinx.datetime.toJavaLocalTime
15-
import kotlinx.datetime.toKotlinInstant
1614
import kotlinx.datetime.toKotlinLocalDate
1715
import kotlinx.datetime.toKotlinLocalDateTime
1816
import kotlinx.datetime.toKotlinLocalTime
1917
import kotlinx.datetime.toLocalDateTime
18+
import kotlinx.datetime.toStdlibInstant
2019
import org.jetbrains.kotlinx.dataframe.AnyCol
2120
import org.jetbrains.kotlinx.dataframe.DataColumn
2221
import org.jetbrains.kotlinx.dataframe.DataFrame
@@ -57,13 +56,17 @@ import kotlin.reflect.full.withNullability
5756
import kotlin.reflect.jvm.jvmErasure
5857
import kotlin.reflect.typeOf
5958
import kotlin.text.trim
59+
import kotlin.time.Instant
60+
import kotlin.time.toJavaInstant
61+
import kotlin.time.toKotlinInstant
6062
import kotlin.toBigDecimal
6163
import java.time.Instant as JavaInstant
6264
import java.time.LocalDate as JavaLocalDate
6365
import java.time.LocalDateTime as JavaLocalDateTime
6466
import java.time.LocalTime as JavaLocalTime
6567
import kotlin.toBigDecimal as toBigDecimalKotlin
6668
import kotlin.toBigInteger as toBigIntegerKotlin
69+
import kotlinx.datetime.Instant as DeprecatedInstant
6770

6871
@PublishedApi
6972
internal fun <T, C, R> Convert<T, C>.withRowCellImpl(
@@ -398,6 +401,9 @@ internal fun createConverter(from: KType, to: KType, options: ParserOptions? = n
398401

399402
Instant::class -> convert<Int> { Instant.fromEpochMilliseconds(it.toLong()) }
400403

404+
// #1350
405+
DeprecatedInstant::class -> convert<Int> { DeprecatedInstant.fromEpochMilliseconds(it.toLong()) }
406+
401407
JavaLocalDateTime::class -> convert<Int> {
402408
it.toLong().toLocalDateTime(defaultTimeZone).toJavaLocalDateTime()
403409
}
@@ -436,6 +442,9 @@ internal fun createConverter(from: KType, to: KType, options: ParserOptions? = n
436442

437443
Instant::class -> convert<Byte> { Instant.fromEpochMilliseconds(it.toLong()) }
438444

445+
// #1350
446+
DeprecatedInstant::class -> convert<Byte> { DeprecatedInstant.fromEpochMilliseconds(it.toLong()) }
447+
439448
JavaLocalDateTime::class -> convert<Byte> {
440449
it.toLong().toLocalDateTime(defaultTimeZone).toJavaLocalDateTime()
441450
}
@@ -474,6 +483,9 @@ internal fun createConverter(from: KType, to: KType, options: ParserOptions? = n
474483

475484
Instant::class -> convert<Short> { Instant.fromEpochMilliseconds(it.toLong()) }
476485

486+
// #1350
487+
DeprecatedInstant::class -> convert<Short> { DeprecatedInstant.fromEpochMilliseconds(it.toLong()) }
488+
477489
JavaLocalDateTime::class -> convert<Short> {
478490
it.toLong().toLocalDateTime(defaultTimeZone).toJavaLocalDateTime()
479491
}
@@ -524,6 +536,9 @@ internal fun createConverter(from: KType, to: KType, options: ParserOptions? = n
524536

525537
Instant::class -> convert<Long> { Instant.fromEpochMilliseconds(it) }
526538

539+
// #1350
540+
DeprecatedInstant::class -> convert<Long> { DeprecatedInstant.fromEpochMilliseconds(it) }
541+
527542
JavaLocalDateTime::class -> convert<Long> {
528543
it.toLocalDateTime(defaultTimeZone).toJavaLocalDateTime()
529544
}
@@ -556,6 +571,40 @@ internal fun createConverter(from: KType, to: KType, options: ParserOptions? = n
556571

557572
JavaLocalTime::class -> convert<Instant> { it.toLocalTime(defaultTimeZone).toJavaLocalTime() }
558573

574+
// #1350
575+
DeprecatedInstant::class -> convert<Instant> { it.toDeprecatedInstant() }
576+
577+
else -> null
578+
}
579+
580+
// #1350
581+
DeprecatedInstant::class -> when (toClass) {
582+
Long::class -> convert<DeprecatedInstant> { it.toStdlibInstant().toEpochMilliseconds() }
583+
584+
LocalDateTime::class -> convert<DeprecatedInstant> {
585+
it.toStdlibInstant().toLocalDateTime(defaultTimeZone)
586+
}
587+
588+
LocalDate::class -> convert<DeprecatedInstant> { it.toStdlibInstant().toLocalDate(defaultTimeZone) }
589+
590+
LocalTime::class -> convert<DeprecatedInstant> { it.toStdlibInstant().toLocalTime(defaultTimeZone) }
591+
592+
JavaLocalDateTime::class -> convert<DeprecatedInstant> {
593+
it.toStdlibInstant().toLocalDateTime(defaultTimeZone).toJavaLocalDateTime()
594+
}
595+
596+
JavaLocalDate::class -> convert<DeprecatedInstant> {
597+
it.toStdlibInstant().toLocalDate(defaultTimeZone).toJavaLocalDate()
598+
}
599+
600+
JavaInstant::class -> convert<DeprecatedInstant> { it.toStdlibInstant().toJavaInstant() }
601+
602+
JavaLocalTime::class -> convert<DeprecatedInstant> {
603+
it.toStdlibInstant().toLocalTime(defaultTimeZone).toJavaLocalTime()
604+
}
605+
606+
Instant::class -> convert<DeprecatedInstant> { it.toStdlibInstant() }
607+
559608
else -> null
560609
}
561610

@@ -584,6 +633,11 @@ internal fun createConverter(from: KType, to: KType, options: ParserOptions? = n
584633
it.toKotlinInstant().toLocalTime(defaultTimeZone).toJavaLocalTime()
585634
}
586635

636+
// #1350
637+
DeprecatedInstant::class -> convert<JavaInstant> {
638+
it.toKotlinInstant().toDeprecatedInstant()
639+
}
640+
587641
else -> null
588642
}
589643

@@ -625,13 +679,26 @@ internal fun createConverter(from: KType, to: KType, options: ParserOptions? = n
625679

626680
LocalDateTime::class -> when (toClass) {
627681
LocalDate::class -> convert<LocalDateTime> { it.date }
682+
628683
LocalTime::class -> convert<LocalDateTime> { it.time }
684+
629685
Instant::class -> convert<LocalDateTime> { it.toInstant(defaultTimeZone) }
686+
687+
// #1350
688+
DeprecatedInstant::class -> convert<LocalDateTime> {
689+
it.toInstant(defaultTimeZone).toDeprecatedInstant()
690+
}
691+
630692
Long::class -> convert<LocalDateTime> { it.toInstant(defaultTimeZone).toEpochMilliseconds() }
693+
631694
JavaLocalDateTime::class -> convert<LocalDateTime> { it.toJavaLocalDateTime() }
695+
632696
JavaLocalDate::class -> convert<LocalDateTime> { it.date.toJavaLocalDate() }
697+
633698
JavaLocalTime::class -> convert<LocalDateTime> { it.toJavaLocalDateTime().toLocalTime() }
699+
634700
JavaInstant::class -> convert<LocalDateTime> { it.toInstant(defaultTimeZone).toJavaInstant() }
701+
635702
else -> null
636703
}
637704

@@ -646,6 +713,11 @@ internal fun createConverter(from: KType, to: KType, options: ParserOptions? = n
646713
it.toKotlinLocalDateTime().toInstant(defaultTimeZone)
647714
}
648715

716+
// #1350
717+
DeprecatedInstant::class -> convert<JavaLocalDateTime> {
718+
it.toKotlinLocalDateTime().toInstant(defaultTimeZone).toDeprecatedInstant()
719+
}
720+
649721
Long::class -> convert<JavaLocalDateTime> {
650722
it.toKotlinLocalDateTime().toInstant(defaultTimeZone).toEpochMilliseconds()
651723
}
@@ -663,11 +735,22 @@ internal fun createConverter(from: KType, to: KType, options: ParserOptions? = n
663735

664736
LocalDate::class -> when (toClass) {
665737
LocalDateTime::class -> convert<LocalDate> { it.atTime(0, 0) }
738+
666739
Instant::class -> convert<LocalDate> { it.atStartOfDayIn(defaultTimeZone) }
740+
741+
// #1350
742+
DeprecatedInstant::class -> convert<LocalDate> {
743+
it.atStartOfDayIn(defaultTimeZone).toDeprecatedInstant()
744+
}
745+
667746
Long::class -> convert<LocalDate> { it.atStartOfDayIn(defaultTimeZone).toEpochMilliseconds() }
747+
668748
JavaLocalDate::class -> convert<LocalDate> { it.toJavaLocalDate() }
749+
669750
JavaLocalDateTime::class -> convert<LocalDate> { it.atTime(0, 0).toJavaLocalDateTime() }
751+
670752
JavaInstant::class -> convert<LocalDate> { it.atStartOfDayIn(defaultTimeZone).toJavaInstant() }
753+
671754
else -> null
672755
}
673756

@@ -680,6 +763,11 @@ internal fun createConverter(from: KType, to: KType, options: ParserOptions? = n
680763
it.toKotlinLocalDate().atStartOfDayIn(defaultTimeZone)
681764
}
682765

766+
// #1350
767+
DeprecatedInstant::class -> convert<JavaLocalDate> {
768+
it.toKotlinLocalDate().atStartOfDayIn(defaultTimeZone).toDeprecatedInstant()
769+
}
770+
683771
Long::class -> convert<JavaLocalDate> {
684772
it.toKotlinLocalDate().atStartOfDayIn(defaultTimeZone).toEpochMilliseconds()
685773
}

core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/api/parse.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
package org.jetbrains.kotlinx.dataframe.impl.api
22

33
import io.github.oshai.kotlinlogging.KotlinLogging
4-
import kotlinx.datetime.Instant
54
import kotlinx.datetime.LocalDate
65
import kotlinx.datetime.LocalDateTime
76
import kotlinx.datetime.LocalTime
87
import kotlinx.datetime.format.DateTimeComponents
9-
import kotlinx.datetime.toKotlinInstant
108
import kotlinx.datetime.toKotlinLocalDate
119
import kotlinx.datetime.toKotlinLocalDateTime
1210
import kotlinx.datetime.toKotlinLocalTime
@@ -56,6 +54,8 @@ import kotlin.reflect.full.withNullability
5654
import kotlin.reflect.jvm.jvmErasure
5755
import kotlin.reflect.typeOf
5856
import kotlin.time.Duration
57+
import kotlin.time.Instant
58+
import kotlin.time.toKotlinInstant
5959
import kotlin.uuid.ExperimentalUuidApi
6060
import kotlin.uuid.Uuid
6161
import java.time.Duration as JavaDuration
@@ -439,11 +439,11 @@ internal object Parsers : GlobalParserOptions {
439439
stringParser<Int> { it.toIntOrNull() },
440440
// Long
441441
stringParser<Long> { it.toLongOrNull() },
442-
// kotlinx.datetime.Instant
442+
// kotlin.time.Instant
443443
stringParser<Instant> {
444444
it.toInstantOrNull()
445445
},
446-
// java.time.Instant, will be skipped if kotlinx.datetime.Instant is already checked
446+
// java.time.Instant, will be skipped if kotlin.time.Instant is already checked
447447
stringParser<JavaInstant>(coveredBy = setOf(typeOf<Instant>())) {
448448
it.toJavaInstantOrNull()
449449
},

core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/impl/api/toDataFrame.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ private val valueTypes = setOf(
5252
kotlin.time.Duration::class,
5353
kotlinx.datetime.LocalDate::class,
5454
kotlinx.datetime.LocalDateTime::class,
55-
kotlinx.datetime.Instant::class,
55+
kotlinx.datetime.Instant::class, // #1350
56+
kotlin.time.Instant::class,
5657
kotlinx.datetime.TimeZone::class,
5758
kotlinx.datetime.DateTimePeriod::class,
5859
kotlinx.datetime.DateTimeUnit::class,

core/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/csv.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.jetbrains.kotlinx.dataframe.io
22

3-
import kotlinx.datetime.Instant
43
import kotlinx.datetime.LocalDate
54
import kotlinx.datetime.LocalDateTime
65
import kotlinx.datetime.LocalTime
@@ -16,6 +15,7 @@ import org.jetbrains.kotlinx.dataframe.codeGen.DefaultReadCsvMethod
1615
import org.jetbrains.kotlinx.dataframe.codeGen.DefaultReadDfMethod
1716
import org.jetbrains.kotlinx.dataframe.impl.api.parse
1817
import org.jetbrains.kotlinx.dataframe.impl.io.readDelimImpl
18+
import org.jetbrains.kotlinx.dataframe.io.ColType.String
1919
import org.jetbrains.kotlinx.dataframe.util.APACHE_CSV
2020
import org.jetbrains.kotlinx.dataframe.util.AS_URL
2121
import org.jetbrains.kotlinx.dataframe.util.AS_URL_IMPORT
@@ -59,6 +59,7 @@ import kotlin.reflect.KClass
5959
import kotlin.reflect.KType
6060
import kotlin.reflect.typeOf
6161
import kotlin.time.Duration
62+
import kotlin.time.Instant
6263

6364
@Deprecated(message = APACHE_CSV, level = DeprecationLevel.WARNING)
6465
public class CSV(private val delimiter: Char = ',') : SupportedDataFrameFormat {

core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/parse.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,12 @@ import io.kotest.matchers.should
44
import io.kotest.matchers.shouldBe
55
import io.kotest.matchers.shouldNotBe
66
import kotlinx.datetime.DateTimeUnit
7-
import kotlinx.datetime.Instant
87
import kotlinx.datetime.LocalDate
98
import kotlinx.datetime.LocalDateTime
109
import kotlinx.datetime.LocalTime
1110
import kotlinx.datetime.Month
1211
import kotlinx.datetime.format.DateTimeComponents
1312
import kotlinx.datetime.plus
14-
import kotlinx.datetime.toJavaInstant
15-
import kotlinx.datetime.toKotlinInstant
1613
import org.jetbrains.kotlinx.dataframe.DataFrame
1714
import org.jetbrains.kotlinx.dataframe.impl.api.Parsers
1815
import org.jetbrains.kotlinx.dataframe.impl.catchSilent
@@ -29,6 +26,9 @@ import kotlin.time.Duration.Companion.milliseconds
2926
import kotlin.time.Duration.Companion.minutes
3027
import kotlin.time.Duration.Companion.nanoseconds
3128
import kotlin.time.Duration.Companion.seconds
29+
import kotlin.time.Instant
30+
import kotlin.time.toJavaInstant
31+
import kotlin.time.toKotlinInstant
3232
import kotlin.uuid.ExperimentalUuidApi
3333
import kotlin.uuid.Uuid
3434
import java.time.Duration as JavaDuration

dataframe-arrow/src/main/kotlin/org/jetbrains/kotlinx/dataframe/io/ArrowWriterImpl.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ internal class ArrowWriterImpl(
237237
is DateDayVector ->
238238
column.convertToLocalDate()
239239
.forEachIndexed { i, value ->
240-
value?.also { vector.set(i, value.toEpochDays()) }
240+
value?.also { vector.set(i, value.toEpochDays().toInt()) }
241241
?: vector.setNull(i)
242242
}
243243

dataframe-arrow/src/test/kotlin/org/jetbrains/kotlinx/dataframe/io/ArrowKtTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import kotlinx.datetime.LocalDate
77
import kotlinx.datetime.LocalDateTime
88
import kotlinx.datetime.UtcOffset
99
import kotlinx.datetime.toInstant
10-
import kotlinx.datetime.toJavaInstant
1110
import org.apache.arrow.memory.RootAllocator
1211
import org.apache.arrow.vector.TimeStampMicroVector
1312
import org.apache.arrow.vector.TimeStampMilliVector
@@ -55,6 +54,7 @@ import java.nio.file.FileSystems
5554
import java.sql.DriverManager
5655
import java.util.Locale
5756
import kotlin.reflect.typeOf
57+
import kotlin.time.toJavaInstant
5858

5959
internal class ArrowKtTest {
6060

dataframe-csv/src/test/kotlin/org/jetbrains/kotlinx/dataframe/io/DelimCsvTsvTests.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import io.kotest.assertions.throwables.shouldThrow
66
import io.kotest.matchers.collections.shouldContainInOrder
77
import io.kotest.matchers.nulls.shouldNotBeNull
88
import io.kotest.matchers.shouldBe
9-
import kotlinx.datetime.Instant
109
import kotlinx.datetime.LocalDate
1110
import kotlinx.datetime.LocalDateTime
1211
import org.intellij.lang.annotations.Language
@@ -36,6 +35,7 @@ import java.util.Locale
3635
import java.util.zip.GZIPInputStream
3736
import kotlin.reflect.KClass
3837
import kotlin.reflect.typeOf
38+
import kotlin.time.Instant
3939

4040
// can be enabled for showing logs for these tests
4141
private const val SHOW_LOGS = false

0 commit comments

Comments
 (0)