Skip to content

Commit 1471c2e

Browse files
authored
#22 Update KSP, Kotlin, and dependencies (#23)
1 parent 3e87961 commit 1471c2e

10 files changed

Lines changed: 54 additions & 35 deletions

File tree

.github/release-drafter.yml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ categories:
1818
- title: '📖 Documentation'
1919
label: 'documentation'
2020
- title: '⛓️ Dependency update'
21-
label: 'dependencies'
21+
labels:
22+
- 'dependencies'
23+
- ':dependabot: dependencies'
2224

2325
change-template: '- $TITLE @$AUTHOR (#$NUMBER)'
2426

@@ -62,6 +64,9 @@ autolabeler:
6264
- label: enhancement
6365
branch:
6466
- '/(enhancement|improve)[/-].+/'
67+
- label: dependencies
68+
branch:
69+
- '/dependencies[/-].+/'
6570

6671
- label: gradle
6772
files:

build.gradle.kts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1+
import com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask
2+
13
plugins {
24
alias(libs.plugins.detekt)
35
alias(libs.plugins.versionCatalogLinter)
6+
alias(libs.plugins.versions)
47
alias(libs.plugins.cmpdestinations.publish) apply false
58
alias(libs.plugins.androidApplication) apply false
69
alias(libs.plugins.androidLibrary) apply false
@@ -15,3 +18,16 @@ plugins {
1518
tasks.register("reportMerge", io.gitlab.arturbosch.detekt.report.ReportMergeTask::class) {
1619
output.set(rootProject.layout.buildDirectory.file("reports/detekt/merge.sarif"))
1720
}
21+
22+
tasks.withType<DependencyUpdatesTask> {
23+
rejectVersionIf {
24+
isNonStable(candidate.version) && !isNonStable(currentVersion)
25+
}
26+
}
27+
28+
fun isNonStable(version: String): Boolean {
29+
val stableKeyword = listOf("RELEASE", "FINAL", "GA").any { version.uppercase().contains(it) }
30+
val regex = "^[0-9,.v-]+(-r)?$".toRegex()
31+
val isStable = stableKeyword || regex.matches(version)
32+
return isStable.not()
33+
}

cmp-destinations-ksp/build.gradle.kts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@ plugins {
55
}
66

77
kotlin {
8-
jvm {
9-
withJava()
10-
}
8+
jvm()
119
sourceSets {
1210
commonMain {
1311
dependencies {

cmp-destinations/build.gradle.kts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,9 @@ kotlin {
4141
dependencies {
4242
implementation(compose.runtime)
4343
implementation(libs.androidx.navigation.composeMultiplatform)
44-
implementation(libs.kotlinx.serialization.cbor)
44+
implementation(libs.kotlinx.serialization.json)
4545
implementation(libs.kotlinx.io)
46+
implementation(libs.androidx.coreBundle)
4647
}
4748
}
4849
}

cmp-destinations/src/commonMain/kotlin/com/sorrowblue/cmpdestinations/result/NavResultReceiver.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,8 @@ private class NavResultReceiverImpl<N : Any, R : Any>(
7171
if (canceled == true) {
7272
listener(NavResult.Canceled)
7373
} else if (backStackEntry.savedStateHandle.contains(resultKey)) {
74-
val result = backStackEntry.savedStateHandle.get<ByteArray>(resultKey)?.let {
75-
kSerializerByteArray.fromByteArray(it)
74+
val result = backStackEntry.savedStateHandle.get<String>(resultKey)?.let {
75+
kSerializerByteArray.fromJsonString(it)
7676
}!!
7777
backStackEntry.savedStateHandle.remove<Any?>(resultKey)
7878
listener(NavResult.Value(result))

cmp-destinations/src/commonMain/kotlin/com/sorrowblue/cmpdestinations/result/NavResultSender.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ private class NavResultSenderImpl<R : Any>(
4949
override fun setResult(result: R) {
5050
navController.previousBackStackEntry?.savedStateHandle?.let {
5151
it[canceledKey] = false
52-
it[resultKey] = serializerType.toByteArray(result)
52+
it[resultKey] = serializerType.toJsonString(result)
5353
}
5454
}
5555

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,43 @@
11
package com.sorrowblue.cmpdestinations.serializer
22

3-
import androidx.core.bundle.Bundle
43
import androidx.navigation.NavType
5-
import kotlinx.serialization.ExperimentalSerializationApi
4+
import androidx.savedstate.SavedState
5+
import androidx.savedstate.read
6+
import androidx.savedstate.write
67
import kotlinx.serialization.KSerializer
78
import kotlinx.serialization.Serializable
8-
import kotlinx.serialization.cbor.Cbor
9-
import kotlinx.serialization.decodeFromHexString
10-
import kotlinx.serialization.encodeToHexString
9+
import kotlinx.serialization.json.Json
1110
import kotlinx.serialization.serializer
1211

13-
@OptIn(ExperimentalSerializationApi::class)
1412
inline fun <reified D : @Serializable Any> NavType.Companion.kSerializableType(
1513
isNullableAllowed: Boolean = false,
1614
): KSerializableType<D> {
17-
return KSerializableType(Cbor.serializersModule.serializer<D>(), isNullableAllowed)
15+
return KSerializableType(Json.serializersModule.serializer<D>(), isNullableAllowed)
1816
}
1917

20-
@OptIn(ExperimentalSerializationApi::class)
2118
class KSerializableType<D : @Serializable Any?>(
2219
private val serializer: KSerializer<D>,
2320
isNullableAllowed: Boolean = false,
2421
) : NavType<D>(isNullableAllowed) {
2522
override val name get() = serializer.descriptor.serialName
2623

27-
override fun get(bundle: Bundle, key: String): D? {
28-
return bundle.getByteArray(key)?.let {
29-
Cbor.decodeFromByteArray(serializer, it)
24+
override fun get(bundle: SavedState, key: String): D? {
25+
return bundle.read { getString(key) }.let {
26+
Json.decodeFromString(serializer, it)
3027
}
3128
}
3229

33-
override fun put(bundle: Bundle, key: String, value: D) {
34-
bundle.putByteArray(key, Cbor.encodeToByteArray(serializer, value))
30+
override fun put(bundle: SavedState, key: String, value: D) {
31+
bundle.write {
32+
putString(key, Json.encodeToString(serializer, value))
33+
}
3534
}
3635

3736
override fun serializeAsValue(value: D): String {
38-
return Cbor.encodeToHexString(serializer, value)
37+
return Json.encodeToString(serializer, value)
3938
}
4039

4140
override fun parseValue(value: String): D {
42-
return Cbor.decodeFromHexString(serializer, value)
41+
return Json.decodeFromString(serializer, value)
4342
}
4443
}
Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
11
package com.sorrowblue.cmpdestinations.serializer
22

3-
import kotlinx.serialization.ExperimentalSerializationApi
43
import kotlinx.serialization.KSerializer
5-
import kotlinx.serialization.cbor.Cbor
4+
import kotlinx.serialization.json.Json
65
import kotlinx.serialization.serializer
76

8-
@OptIn(ExperimentalSerializationApi::class)
97
inline fun <reified T> kSerializerHelper() =
10-
KSerializerHelper(Cbor.serializersModule.serializer<T>())
8+
KSerializerHelper(Json.serializersModule.serializer<T>())
119

12-
@OptIn(ExperimentalSerializationApi::class)
1310
class KSerializerHelper<T>(private val serializer: KSerializer<T>) {
14-
fun toByteArray(value: T): ByteArray = Cbor.encodeToByteArray(serializer, value)
15-
fun fromByteArray(bytes: ByteArray): T = Cbor.decodeFromByteArray(serializer, bytes)
11+
fun toJsonString(value: T): String = Json.encodeToString(serializer, value)
12+
fun fromJsonString(json: String): T = Json.decodeFromString(serializer, json)
1613
}

composeApp/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ kotlin {
3636

3737
@OptIn(ExperimentalWasmDsl::class)
3838
wasmJs {
39-
moduleName = "composeApp"
39+
outputModuleName = "composeApp"
4040
browser {
4141
val rootDirPath = project.rootDir.path
4242
val projectDirPath = project.projectDir.path

gradle/libs.versions.toml

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,23 @@
11
[versions]
22
agp = "8.9.0"
33
androidx-activityCompose = "1.10.1"
4+
androidx-coreBundle = "1.1.0-alpha03"
45
androidx-lifecycle = "2.8.4"
5-
androidx-navigation-compose-multiplatform = "2.8.0-alpha13"
6+
androidx-navigation-compose-multiplatform = "2.9.0-alpha14"
67
compose-multiplatform = "1.8.0-alpha04"
78
detekt = "1.23.8"
89
java = "21"
9-
kotlin = "2.1.10"
10+
kotlin = "2.1.20-RC2"
1011
kotlinpoet-ksp = "2.1.0"
1112
kotlinx-coroutines = "1.10.1"
1213
kotlinx-io = "0.7.0"
1314
kotlinx-serialization = "1.8.0"
14-
ksp = "2.1.10-1.0.31"
15+
ksp = "2.1.20-RC2-1.0.31"
1516
maven-publish = "0.31.0"
1617

1718
[libraries]
1819
androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "androidx-activityCompose" }
20+
androidx-coreBundle = { group = "org.jetbrains.androidx.core", name = "core-bundle", version.ref = "androidx-coreBundle" }
1921
androidx-lifecycle-runtime-compose = { group = "org.jetbrains.androidx.lifecycle", name = "lifecycle-runtime-compose", version.ref = "androidx-lifecycle" }
2022
androidx-lifecycle-viewmodel = { group = "org.jetbrains.androidx.lifecycle", name = "lifecycle-viewmodel", version.ref = "androidx-lifecycle" }
2123
androidx-navigation-composeMultiplatform = { group = "org.jetbrains.androidx.navigation", name = "navigation-compose", version.ref = "androidx-navigation-compose-multiplatform" }
@@ -25,8 +27,8 @@ detektPlugin = { group = "io.gitlab.arturbosch.detekt", name = "detekt-gradle-pl
2527
jgit = { group = "org.eclipse.jgit", name = "org.eclipse.jgit", version = "7.1.0.202411261347-r" }
2628
kotlinx-coroutines-swing = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-swing", version.ref = "kotlinx-coroutines" }
2729
kotlinx-io = { group = "org.jetbrains.kotlinx", name = "kotlinx-io-core", version.ref = "kotlinx-io" }
28-
kotlinx-serialization-cbor = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-cbor", version.ref = "kotlinx-serialization" }
2930
kotlinx-serialization-core = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-core", version.ref = "kotlinx-serialization" }
31+
kotlinx-serialization-json = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-json", version.ref = "kotlinx-serialization" }
3032
ksp-symbolProcessingApi = { group = "com.google.devtools.ksp", name = "symbol-processing-api", version.ref = "ksp" }
3133
mavenPublishPlugin = { group = "com.vanniktech", name = "gradle-maven-publish-plugin", version.ref = "maven-publish" }
3234
squareup-kotlinpoetKsp = { group = "com.squareup", name = "kotlinpoet-ksp", version.ref = "kotlinpoet-ksp" }
@@ -45,3 +47,4 @@ kotlinSerialization = { id = "org.jetbrains.kotlin.plugin.serialization", versio
4547
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
4648
mavenPublish = { id = "com.vanniktech.maven.publish", version.ref = "maven-publish" }
4749
versionCatalogLinter = { id = "io.github.pemistahl.version-catalog-linter", version = "1.0.3" }
50+
versions = { id = "com.github.ben-manes.versions", version = "0.52.0" }

0 commit comments

Comments
 (0)