From bcf50780e91c71bb29802b04653619d344ce0e71 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Tue, 20 May 2025 16:11:08 -0300 Subject: [PATCH] Migrate from KAPT to KSP --- build.gradle | 1 + gradle/libs.versions.toml | 2 ++ gradle/verification-metadata.xml | 35 +++++++++++++++++++ libs/database/build.gradle | 31 +++++++++------- .../org/fdroid/database/FDroidDatabase.kt | 15 ++++++++ 5 files changed, 72 insertions(+), 12 deletions(-) diff --git a/build.gradle b/build.gradle index 1b95e8c1f..3b2e04502 100644 --- a/build.gradle +++ b/build.gradle @@ -6,6 +6,7 @@ buildscript { } plugins { alias libs.plugins.android.application apply false + alias libs.plugins.android.ksp apply false alias libs.plugins.jetbrains.kotlin.android apply false alias libs.plugins.jetbrains.kotlin.multiplatform apply false alias libs.plugins.jetbrains.kotlin.plugin.serialization apply false diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 55ae38b9a..9117b1ed7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,6 +2,7 @@ compileSdk = "35" kotlin = "2.0.20" androidGradlePlugin = "8.6.1" +androidKspPlugin = "2.0.20-1.0.25" # first version needs to match kotlin version dokka = "1.9.20" mavenPublish = "0.18.0" jlleitschuhKtlint = "12.1.1" @@ -159,6 +160,7 @@ json = { module = "org.json:json", version.ref = "json" } [plugins] android-application = { id = "com.android.application", version.ref = "androidGradlePlugin" } +android-ksp = { id = "com.google.devtools.ksp", version.ref = "androidKspPlugin" } jetbrains-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } jetbrains-kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } jetbrains-kotlin-plugin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 53ddc3e60..81590e4c7 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -6741,6 +6741,11 @@ + + + + + @@ -6763,6 +6768,21 @@ + + + + + + + + + + + + + + + @@ -13126,6 +13146,11 @@ + + + + + @@ -14244,6 +14269,11 @@ + + + + + @@ -14322,6 +14352,11 @@ + + + + + diff --git a/libs/database/build.gradle b/libs/database/build.gradle index 1f1b5ea87..2e2b3eb44 100644 --- a/libs/database/build.gradle +++ b/libs/database/build.gradle @@ -1,7 +1,7 @@ plugins { id 'kotlin-android' id 'com.android.library' - id 'kotlin-kapt' + id 'com.google.devtools.ksp' id 'org.jetbrains.dokka' id 'com.vanniktech.maven.publish' } @@ -15,11 +15,6 @@ android { targetSdk 34 // relevant for instrumentation tests (targetSdk 21 fails on Android 14) consumerProguardFiles "consumer-rules.pro" - javaCompileOptions { - annotationProcessorOptions { - arguments += ["room.schemaLocation": "$projectDir/schemas".toString()] - } - } testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunnerArguments disableAnalytics: 'true' } @@ -56,9 +51,6 @@ android { freeCompilerArgs += "-Xexplicit-api=strict" freeCompilerArgs += "-opt-in=kotlin.RequiresOptIn" } - kapt { - correctErrorTypes true - } aaptOptions { // needed only for instrumentation tests: assets.openFd() noCompress "json" @@ -80,7 +72,7 @@ dependencies { implementation libs.androidx.room.runtime implementation libs.androidx.room.ktx - kapt libs.androidx.room.compiler + ksp libs.androidx.room.compiler implementation libs.microutils.kotlin.logging implementation libs.kotlinx.serialization.json @@ -110,8 +102,8 @@ dependencies { androidTestImplementation libs.commons.io } -plugins.withId("kotlin-kapt") { - kapt.useBuildCache = true +ksp { + arg(new RoomSchemaArgProvider(new File(projectDir, "schemas"))) } signing { @@ -127,3 +119,18 @@ tasks.withType(DokkaTask).configureEach { }"""] ) } + +class RoomSchemaArgProvider implements CommandLineArgumentProvider { + @InputDirectory + @PathSensitive(PathSensitivity.RELATIVE) + File schemaDir + + RoomSchemaArgProvider(File schemaDir) { + this.schemaDir = schemaDir + } + + @Override + Iterable asArguments() { + return ["room.schemaLocation=${schemaDir.path}".toString()] + } +} diff --git a/libs/database/src/main/java/org/fdroid/database/FDroidDatabase.kt b/libs/database/src/main/java/org/fdroid/database/FDroidDatabase.kt index d842845ac..fc997fbf2 100644 --- a/libs/database/src/main/java/org/fdroid/database/FDroidDatabase.kt +++ b/libs/database/src/main/java/org/fdroid/database/FDroidDatabase.kt @@ -88,6 +88,21 @@ internal abstract class FDroidDatabaseInt : RoomDatabase(), FDroidDatabase, Clos getRepositoryDao().resetETags() } } + + // just here to make KSP happy + override fun close() { + super.close() + } + + // just here to make KSP happy + override fun runInTransaction(body: Runnable) { + super.runInTransaction(body) + } + + // just here to make KSP happy + override fun runInTransaction(body: Callable): V { + return super.runInTransaction(body) + } } /**