Morgane Soula
03/18/2025, 4:02 PM[ksp] [MissingType]: Element 'com.msoula.hobbymatchmaker.core.database.dao.converters.Converters' references a type that is not present
My build.gradle (dao module - database is pretty similar)
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
`kotlin-multiplatform`
`android-library`
alias(libs.plugins.compose.compiler)
alias(libs.plugins.compose.multiplatform)
alias(libs.plugins.serialization)
alias(libs.plugins.room.multiplatform)
alias(libs.plugins.ksp)
}
kotlin {
applyDefaultHierarchyTemplate()
androidTarget {
compilerOptions {
jvmTarget.set(JvmTarget.JVM_21)
}
}
iosX64()
iosArm64()
iosSimulatorArm64()
sourceSets {
commonMain.dependencies {
implementation(compose.runtime)
implementation(libs.kotlinx.coroutines.kmp)
implementation(libs.kotlinx.serialization)
//
implementation(libs.room.common)
implementation(libs.room.runtime)
}
androidMain.dependencies {
// Room
implementation(libs.room.runtime.android)
}
}
}
room { schemaDirectory("$projectDir/schemas") }
android {
namespace = "com.msoula.hobbymatchmaker.core.database.dao"
compileSdk = AndroidConfig.COMPILE_SDK
compileOptions {
sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_21
}
defaultConfig {
minSdk = AndroidConfig.MIN_SDK
}
}
dependencies {
add("kspCommonMainMetadata", libs.room.compiler)
add("kspAndroid", libs.room.compiler)
add("kspIosX64", libs.room.compiler)
add("kspIosArm64", libs.room.compiler)
add("kspIosSimulatorArm64", libs.room.compiler)
}
And the converter class
class Converters {
val jsonParser = Json { encodeDefaults = true; ignoreUnknownKeys = true }
@TypeConverter
fun fromGenreStringList(genres: List<String>?): String? {
return genres?.joinToString(",")
}
@TypeConverter
fun toGenreStringList(data: String?): List<String>? {
return data?.split(",")?.map { it.trim() }
}
@TypeConverter
fun fromGenreList(genres: List<Genre>?): String? {
return genres?.let { jsonParser.encodeToString(it) }
}
@TypeConverter
fun toGenreList(genreString: String?): List<Genre> {
return genreString?.let { jsonParser.decodeFromString<List<Genre>>(it) } ?: emptyList()
}
@TypeConverter
fun fromActorList(actors: List<Actor>?): String? {
return actors?.let { jsonParser.encodeToString(it) }
}
@TypeConverter
fun toActorList(actorString: String?): List<Actor> {
return actorString?.let { jsonParser.decodeFromString<List<Actor>>(it) } ?: emptyList()
}
}
Istvan Lorincz
03/21/2025, 4:00 PMMorgane Soula
03/24/2025, 3:24 PM