Skip to content

Commit cfa7450

Browse files
committedNov 30, 2020
Migrate from java.util.Date to kotlinx.datetime
1 parent 1817907 commit cfa7450

File tree

7 files changed

+51
-52
lines changed

7 files changed

+51
-52
lines changed
 

‎danger-kotlin-library/src/main/kotlin/systems/danger/kotlin/models/github/GitHub.kt

+12-12
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
package systems.danger.kotlin.models.github
44

5+
import kotlinx.datetime.Instant
56
import systems.danger.kotlin.models.serializers.DateSerializer
67
import kotlinx.serialization.*
78
import systems.danger.kotlin.models.git.GitCommit
8-
import java.util.*
99

1010
/**
1111
* The GitHub metadata for your pull request.
@@ -69,10 +69,10 @@ data class GitHubPR(
6969
val user: GitHubUser,
7070
val assignee: GitHubUser?,
7171
val assignees: List<GitHubUser>,
72-
@SerialName("created_at") val createdAt: Date,
73-
@SerialName("updated_at") val updatedAt: Date,
74-
@SerialName("closed_at") val closedAt: Date? = null,
75-
@SerialName("merged_at") val mergedAt: Date? = null,
72+
@SerialName("created_at") val createdAt: Instant,
73+
@SerialName("updated_at") val updatedAt: Instant,
74+
@SerialName("closed_at") val closedAt: Instant? = null,
75+
@SerialName("merged_at") val mergedAt: Instant? = null,
7676
val head: GitHubMergeRef,
7777
val base: GitHubMergeRef,
7878
val state: GitHubPullRequestState,
@@ -252,9 +252,9 @@ data class GitHubIssue(
252252
val assignee: GitHubUser?,
253253
val assignees: List<GitHubUser>,
254254
val milestone: GitHubMilestone?,
255-
@SerialName("created_at") val createdAt: Date,
256-
@SerialName("updated_at") val updatedAt: Date,
257-
@SerialName("closed_at") val closedAt: Date? = null,
255+
@SerialName("created_at") val createdAt: Instant,
256+
@SerialName("updated_at") val updatedAt: Instant,
257+
@SerialName("closed_at") val closedAt: Instant? = null,
258258
val labels: List<GitHubIssueLabel>
259259
)
260260

@@ -338,8 +338,8 @@ data class GitHubMilestone(
338338
val creator: GitHubUser,
339339
@SerialName("open_issues") val openIssues: Int,
340340
@SerialName("closed_issues") val closedIssues: Int,
341-
@SerialName("created_at") val createdAt: Date,
342-
@SerialName("updated_at") val updatedAt: Date,
343-
@SerialName("closed_at") val closedAt: Date? = null,
344-
@SerialName("due_on") val dueOn: Date? = null
341+
@SerialName("created_at") val createdAt: Instant,
342+
@SerialName("updated_at") val updatedAt: Instant,
343+
@SerialName("closed_at") val closedAt: Instant? = null,
344+
@SerialName("due_on") val dueOn: Instant? = null
345345
)

‎danger-kotlin-library/src/main/kotlin/systems/danger/kotlin/models/gitlab/GitLab.kt

+10-10
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
package systems.danger.kotlin.models.gitlab
44

5+
import kotlinx.datetime.Instant
56
import kotlinx.serialization.SerialName
67
import kotlinx.serialization.Serializable
78
import kotlinx.serialization.UseSerializers
89
import systems.danger.kotlin.models.serializers.DateSerializer
9-
import java.util.*
1010

1111
@Serializable
1212
data class GitLab(
@@ -44,30 +44,30 @@ data class GitLabMergeRequest(
4444
@SerialName("changes_count")
4545
val changesCount: String,
4646
@SerialName("closed_at")
47-
val closedAt: Date? = null,
47+
val closedAt: Instant? = null,
4848
@SerialName("closed_by")
4949
val closedBy: GitLabUser?,
5050
val description: String,
5151
@SerialName("diff_refs")
5252
val diffRefs: GitLabDiffRefs,
5353
val downvotes: Int,
5454
@SerialName("first_deployed_to_production_at")
55-
val firstDeployedToProductionAt: Date? = null,
55+
val firstDeployedToProductionAt: Instant? = null,
5656
@SerialName("force_remove_source_branch")
5757
val forceRemoveSourceBranch: Boolean,
5858
val id: Int,
5959
val iid: Int,
6060
@SerialName("latest_build_finished_at")
6161

62-
val latestBuildFinishedAt: Date? = null,
62+
val latestBuildFinishedAt: Instant? = null,
6363
@SerialName("latest_build_started_at")
6464

65-
val latestBuildStartedAt: Date? = null,
65+
val latestBuildStartedAt: Instant? = null,
6666
val labels: List<String>,
6767
@SerialName("merge_commit_sha")
6868
val mergeCommitSha: String? = null,
6969
@SerialName("merged_at")
70-
val mergedAt: Date? = null,
70+
val mergedAt: Instant? = null,
7171
@SerialName("merged_by")
7272
val mergedBy: GitLabUser?,
7373
@SerialName("merge_when_pipeline_succeeds")
@@ -141,20 +141,20 @@ enum class GitLabMergeRequestState {
141141
@Serializable
142142
data class GitLabMilestone(
143143
@SerialName("created_at")
144-
val createdAt: Date,
144+
val createdAt: Instant,
145145
val description: String,
146146
@SerialName("due_date")
147-
val dueDate: Date,
147+
val dueDate: Instant,
148148
val id: Int,
149149
val iid: Int,
150150
@SerialName("project_id")
151151
val projectID: Int,
152152
@SerialName("start_date")
153-
val startDate: Date,
153+
val startDate: Instant,
154154
val state: GitLabMilestoneState,
155155
val title: String,
156156
@SerialName("updated_at")
157-
val updatedAt: Date,
157+
val updatedAt: Instant,
158158
@SerialName("web_url")
159159
val webUrl: String
160160
)
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package systems.danger.kotlin.models.serializers
22

3+
import kotlinx.datetime.Instant
34
import kotlinx.serialization.ExperimentalSerializationApi
45
import kotlinx.serialization.KSerializer
56
import kotlinx.serialization.Serializer
@@ -8,20 +9,19 @@ import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
89
import kotlinx.serialization.descriptors.SerialDescriptor
910
import kotlinx.serialization.encoding.Decoder
1011
import kotlinx.serialization.encoding.Encoder
11-
import java.util.*
1212

1313
@ExperimentalSerializationApi
1414
@Serializer(forClass = DateSerializer::class)
15-
object DateSerializer : KSerializer<Date> {
15+
object DateSerializer : KSerializer<Instant> {
1616

1717
override val descriptor: SerialDescriptor
18-
get() = PrimitiveSerialDescriptor("java.util.Date", PrimitiveKind.STRING)
18+
get() = PrimitiveSerialDescriptor("kotlinx.datetime.Instant", PrimitiveKind.STRING)
1919

20-
override fun serialize(encoder: Encoder, value: Date) {
20+
override fun serialize(encoder: Encoder, value: Instant) {
2121
// Implementation not needed for now
2222
}
2323

24-
override fun deserialize(decoder: Decoder): Date {
25-
return fromISO8601UTC(decoder.decodeString())!!
24+
override fun deserialize(decoder: Decoder): Instant {
25+
return Instant.parse(decoder.decodeString())
2626
}
2727
}

‎danger-kotlin-library/src/main/kotlin/systems/danger/kotlin/models/serializers/DateUtils.kt

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import java.text.ParseException
44
import java.text.SimpleDateFormat
55
import java.util.*
66

7+
@SuppressWarnings("unused")
78
internal fun fromISO8601UTC(dateStr: String): Date? {
89
val tz = TimeZone.getTimeZone("UTC")
910
val df = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'")

‎danger-kotlin-library/src/test/kotlin/systems/danger/kotlin/models/github/GitHubParsingTests.kt

+11-11
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package systems.danger.kotlin.models.github
22

3+
import kotlinx.datetime.Instant
34
import kotlinx.serialization.decodeFromString
45
import kotlinx.serialization.json.Json
56
import org.junit.Assert.*
@@ -9,7 +10,6 @@ import systems.danger.kotlin.models.git.GitCommit
910
import systems.danger.kotlin.models.git.GitCommitAuthor
1011
import systems.danger.kotlin.utils.TestUtils.JSONFiles
1112
import systems.danger.kotlin.utils.TestUtils
12-
import java.util.*
1313

1414
class GitHubParsingTests {
1515
private val dsl: DSL = TestUtils.Json.decodeFromString(JSONFiles.githubDangerJSON)
@@ -26,10 +26,10 @@ class GitHubParsingTests {
2626
"\n" + "I tried updating to CocoaPods 1.0, but things went quickly awry. It's a large job, but not necessary for now. \n",
2727
body
2828
)
29-
assertEquals(1469563050000, createdAt.time)
30-
assertEquals(1471447575000, updatedAt.time)
31-
assertEquals(1471447574000, closedAt?.time)
32-
assertEquals(1471447574000, mergedAt?.time)
29+
assertEquals(1469563050000, createdAt.toEpochMilliseconds())
30+
assertEquals(1471447575000, updatedAt.toEpochMilliseconds())
31+
assertEquals(1471447574000, closedAt?.toEpochMilliseconds())
32+
assertEquals(1471447574000, mergedAt?.toEpochMilliseconds())
3333
assertEquals(false, isLocked)
3434
assertEquals(true, isMerged)
3535
assertEquals(15, commitCount)
@@ -149,8 +149,8 @@ class GitHubParsingTests {
149149
assertEquals(GitHubIssueState.CLOSED, state)
150150
assertEquals(false, isLocked)
151151
assertEquals(8, commentCount)
152-
assertEquals(Date(1469563050000), createdAt)
153-
assertEquals(Date(1471447574000), updatedAt)
152+
assertEquals(Instant.fromEpochMilliseconds(1469563050000), createdAt)
153+
assertEquals(Instant.fromEpochMilliseconds(1471447574000), updatedAt)
154154
assertEquals(null, closedAt)
155155
assertTrue(labels.isEmpty())
156156

@@ -169,10 +169,10 @@ class GitHubParsingTests {
169169
expectedCreator,
170170
4,
171171
8,
172-
Date(1302466171000),
173-
Date(1393873090000),
174-
Date(1360675321000),
175-
Date(1349825941000)
172+
Instant.fromEpochMilliseconds(1302466171000),
173+
Instant.fromEpochMilliseconds(1393873090000),
174+
Instant.fromEpochMilliseconds(1360675321000),
175+
Instant.fromEpochMilliseconds(1349825941000)
176176
)
177177
assertEquals(expectedMilestone, milestone)
178178
}

‎danger-kotlin-library/src/test/kotlin/systems/danger/kotlin/models/gitlab/GitLabParsingTests.kt

+9-9
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package systems.danger.kotlin.models.gitlab
22

3+
import kotlinx.datetime.Instant
34
import kotlinx.serialization.decodeFromString
45
import org.junit.Assert.*
56
import org.junit.Test
67
import systems.danger.kotlin.models.danger.DSL
78
import systems.danger.kotlin.utils.TestUtils.JSONFiles
89
import systems.danger.kotlin.utils.TestUtils
9-
import java.util.*
1010

1111
class GitLabParsingTests {
1212
private val dsl: DSL
@@ -46,28 +46,28 @@ class GitLabParsingTests {
4646
)
4747
assertEquals(expectedDiffRefs, diffRefs)
4848
assertEquals(0, downvotes)
49-
assertEquals(Date(1554942622492), firstDeployedToProductionAt)
49+
assertEquals(Instant.fromEpochMilliseconds(1554942622492), firstDeployedToProductionAt)
5050
assertEquals(true, forceRemoveSourceBranch)
5151
assertEquals(27469633, id)
5252
assertEquals(182, iid)
53-
assertEquals(Date(1554942802492), latestBuildFinishedAt)
54-
assertEquals(Date(1554942022492), latestBuildStartedAt)
53+
assertEquals(Instant.fromEpochMilliseconds(1554942802492), latestBuildFinishedAt)
54+
assertEquals(Instant.fromEpochMilliseconds(1554942022492), latestBuildStartedAt)
5555
assertEquals(listOf<String>(), labels)
5656
assertEquals("377a24fb7a0f30364f089f7bca67752a8b61f477", mergeCommitSha)
57-
assertEquals(Date(1554943042492), mergedAt)
57+
assertEquals(Instant.fromEpochMilliseconds(1554943042492), mergedAt)
5858
assertEquals(orta, mergedBy)
5959
assertEquals(false, mergeOnPipelineSuccess)
6060
val expectedMilestone = GitLabMilestone(
61-
Date(1554933465346),
61+
Instant.fromEpochMilliseconds(1554933465346),
6262
"Test Description",
63-
Date(1560124800000),
63+
Instant.fromEpochMilliseconds(1560124800000),
6464
1,
6565
2,
6666
1000,
67-
Date(1554933465346),
67+
Instant.fromEpochMilliseconds(1554933465346),
6868
GitLabMilestoneState.CLOSED,
6969
"Test Milestone",
70-
Date(1554933465346),
70+
Instant.fromEpochMilliseconds(1554933465346),
7171
"https://gitlab.com/milestone"
7272
)
7373
assertEquals(expectedMilestone, milestone)

‎dependencyVersions.gradle

+2-4
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,12 @@ project.ext.versionKotlinDatetime = '0.1.0'
3232
ext.kotlin = [
3333
mainKts: "$groupIdKotlin:$artifactIdKotlinMain:$versionKotlin",
3434
serialization: "$groupIdKotlinx:$artifactIdKotlinSerializationJson:$versionKotlinSerializationJson",
35-
// Migrate to kotlin-datetime and replace java.util.Date
36-
//datetime: "$groupIdKotlinx:$artifactIdKotlinDatetime:$versionKotlinDatetime"
35+
datetime: "$groupIdKotlinx:$artifactIdKotlinDatetime:$versionKotlinDatetime"
3736
]
3837
ext.kotlinDependencies = group {
3938
includeJar kotlin.mainKts
4039
includeRecursiveJar kotlin.serialization
41-
// Migrate to kotlin-datetime and replace java.util.Date
42-
//includeRecursiveJar kotlin.datetime
40+
includeRecursiveJar kotlin.datetime
4341
}
4442

4543
// Testing

0 commit comments

Comments
 (0)