Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Expected class 'expect class DatabasePlatformModule : Any' does not have default constructor. #183

Open
yet300 opened this issue Oct 26, 2024 · 0 comments

Comments

@yet300
Copy link

yet300 commented Oct 26, 2024

I am writing a new project on kmp using koin annotation and room kmp and I get an error when building the project.

e: file:///Users/Shared/development/Multiplatform/Skillingo/core/database/build/generated/ksp/android/androidDebug/kotlin/ru/hadj/database/db/SkillingoRoomDatabaseConstructor.kt:5:22 'actual object SkillingoRoomDatabaseConstructor : RoomDatabaseConstructor<SkillingpRoomDatabase>' has no corresponding expected declaration
e: file:///Users/Shared/development/Multiplatform/Skillingo/core/database/build/generated/ksp/android/androidDebug/kotlin/ru/hadj/database/db/SkillingoRoomDatabaseConstructor.kt:7:23 'actual fun initialize(): SkillingpRoomDatabase' has no corresponding expected declaration
e: file:///Users/Shared/development/Multiplatform/Skillingo/core/database/build/generated/ksp/metadata/commonMain/kotlin/org/koin/ksp/generated/DataBaseModuleGenru$hadj$database$di.kt:8:31 Expected class 'expect class DatabasePlatformModule : Any' does not have default constructor.
e: file:///Users/Shared/development/Multiplatform/Skillingo/core/database/build/generated/ksp/metadata/commonMain/kotlin/ru/hadj/database/dao/BoostDao_Impl.kt:25:14 Redeclaration:
class BoostDao_Impl : BoostDao
e: file:///Users/Shared/development/Multiplatform/Skillingo/core/database/build/generated/ksp/metadata/commonMain/kotlin/ru/hadj/database/dao/TaskDao_Impl.kt:24:14 Redeclaration:
class TaskDao_Impl : TaskDao
e: file:///Users/Shared/development/Multiplatform/Skillingo/core/database/build/generated/ksp/metadata/commonMain/kotlin/ru/hadj/database/dao/TaskGroupDao_Impl.kt:22:14 Redeclaration:
class TaskGroupDao_Impl : TaskGroupDao
e: file:///Users/Shared/development/Multiplatform/Skillingo/core/database/build/generated/ksp/metadata/commonMain/kotlin/ru/hadj/database/db/SkillingoRoomDatabaseConstructor.kt:5:22 'actual object SkillingoRoomDatabaseConstructor : RoomDatabaseConstructor<SkillingpRoomDatabase>' has no corresponding expected declaration
e: file:///Users/Shared/development/Multiplatform/Skillingo/core/database/build/generated/ksp/metadata/commonMain/kotlin/ru/hadj/database/db/SkillingoRoomDatabaseConstructor.kt:5:22 Redeclaration:
actual object SkillingoRoomDatabaseConstructor : RoomDatabaseConstructor<SkillingpRoomDatabase>
e: file:///Users/Shared/development/Multiplatform/Skillingo/core/database/build/generated/ksp/metadata/commonMain/kotlin/ru/hadj/database/db/SkillingoRoomDatabaseConstructor.kt:7:23 'actual fun initialize(): SkillingpRoomDatabase' has no corresponding expected declaration
e: file:///Users/Shared/development/Multiplatform/Skillingo/core/database/build/generated/ksp/metadata/commonMain/kotlin/ru/hadj/database/db/SkillingpRoomDatabase_Impl.kt:33:8 Class 'SkillingpRoomDatabase_Impl' is not abstract and does not implement abstract base class member 'clearAllTables'.
e: file:///Users/Shared/development/Multiplatform/Skillingo/core/database/build/generated/ksp/metadata/commonMain/kotlin/ru/hadj/database/db/SkillingpRoomDatabase_Impl.kt:33:14 Redeclaration:
class SkillingpRoomDatabase_Impl : SkillingpRoomDatabase
e: file:///Users/Shared/development/Multiplatform/Skillingo/core/database/src/androidMain/kotlin/ru/hadj/database/db/getDataBaseBuilder.android.kt:10:14 'actual class DataBasePlatform : Any' has no corresponding members for expected class members:

    expect constructor(): DataBasePlatform

    The following declaration is incompatible because number of value parameters is different:
        constructor(context: Context): DataBasePlatform


> Task :core:database:copyRoomSchemas

DataBase Module:
*db package

class SkillingoDatabase internal constructor(private val database: SkillingpRoomDatabase) {
    val taskDao: TaskDao
        get() = database.taskDao()
    val taskGroupDao: TaskGroupDao
        get() = database.taskGroupDao()
    val boostDao: BoostDao
        get() = database.boostDao()
}

@Database(
    entities = [TaskDBO::class, TaskGroupDBO::class, BoostModeDBO::class],
    version = 1
)
@TypeConverters(Converters::class)
@ConstructedBy(SkillingoRoomDatabaseConstructor::class)
abstract class SkillingpRoomDatabase : RoomDatabase() {
    abstract fun taskDao(): TaskDao

    abstract fun taskGroupDao(): TaskGroupDao

    abstract fun boostDao(): BoostDao
}

internal const val dbFileName = "skillingo_db"

@Single
fun SkillingoDatabase(
    @Provided databaseBuilder: RoomDatabase.Builder<SkillingpRoomDatabase>,
): SkillingoDatabase {
    return SkillingoDatabase(
        databaseBuilder
            .setQueryCoroutineContext(Dispatchers.IO)
            .fallbackToDestructiveMigration(dropAllTables = false)
            .build()
    )
}


// The Room compiler generates the `actual` implementations.
@Suppress("NO_ACTUAL_FOR_EXPECT")
expect object SkillingoRoomDatabaseConstructor : RoomDatabaseConstructor<SkillingpRoomDatabase> {
    override fun initialize(): SkillingpRoomDatabase
}

package ru.hadj.database.db

expect class DataBasePlatform(){
    fun getDataBaseBuilder() : RoomDatabase.Builder<SkillingpRoomDatabase>
}

package ru.hadj.database.di
@Module(includes = [DatabasePlatformModule::class])
@ComponentScan
class DataBaseModule

@Module
expect class DatabasePlatformModule

**androidMain**
package ru.hadj.database.db

@Factory
actual class DataBasePlatform(private val context: Context) {
    actual fun getDataBaseBuilder(): RoomDatabase.Builder<SkillingpRoomDatabase> {
        return Room.databaseBuilder(
            context = context,
            klass = SkillingpRoomDatabase::class.java,
            name = "skiliingo"
        )
    }
}
package ru.hadj.database.di

@Module
@ComponentScan("ru.hadj.database.db")
actual class DatabasePlatformModule

Koin project used and used version:
[koin-core version 4.0.0]
[koin-annotation version 1.4.0]

Other:
[room version 2.7.0-alpha10]
[ksp version 2.0.20-1.0.25]
[sqlite version 2.5.0-SNAPSHOT]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant