sqldelight: In Kotlin 1.8.0-RC, the sqldelight plugin generates sources for all KMP, leading to a `Redeclaration` error.

SQLDelight Version

1.5.4

Operating System

MacOS Ventura, 13.0.1, M1

Gradle Version

7.6

Kotlin Version

1.8.0-RC

Dialect

SQLite

AGP Version

7.2.0

Describe the Bug

To reproduce, create a KMP project with an android and an ios target, with one shared module.

Running the ./gradlew generateSqlDelightInterface generates the required classes for all the targets, which leads to Redeclaration errors when you try to compile (e.g., ./gradlew compileKotlinIosSimulatorArm64)

Screenshot 2022-12-14 at 14 03 53 Screenshot 2022-12-14 at 14 02 48 Screenshot 2022-12-14 at 14 05 29

kmp-sqldelight.zip

Stacktrace

2022-12-14T14:06:35.071+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonCommonMain/test/HockeyPlayer.kt:6:19 Redeclaration: HockeyPlayer
2022-12-14T14:06:35.071+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonCommonMain/test/Player.kt:8:18 Redeclaration: Player
2022-12-14T14:06:35.071+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonCommonMain/test/Player.kt:13:29 Overload resolution ambiguity: 
2022-12-14T14:06:35.071+0100 [ERROR] [system.err] internal val KClass<Player>.schema: SqlDriver.Schema defined in test.shared in file PlayerImpl.kt
2022-12-14T14:06:35.071+0100 [ERROR] [system.err] internal val KClass<Player>.schema: SqlDriver.Schema defined in test.shared in file PlayerImpl.kt
2022-12-14T14:06:35.071+0100 [ERROR] [system.err] internal val KClass<Player>.schema: SqlDriver.Schema defined in test.shared in file PlayerImpl.kt
2022-12-14T14:06:35.071+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonCommonMain/test/Player.kt:15:75 Overload resolution ambiguity: 
2022-12-14T14:06:35.071+0100 [ERROR] [system.err] internal fun KClass<Player>.newInstance(driver: SqlDriver): Player defined in test.shared in file PlayerImpl.kt
2022-12-14T14:06:35.071+0100 [ERROR] [system.err] internal fun KClass<Player>.newInstance(driver: SqlDriver): Player defined in test.shared in file PlayerImpl.kt
2022-12-14T14:06:35.071+0100 [ERROR] [system.err] internal fun KClass<Player>.newInstance(driver: SqlDriver): Player defined in test.shared in file PlayerImpl.kt
2022-12-14T14:06:35.071+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonCommonMain/test/PlayerQueries.kt:5:18 Redeclaration: PlayerQueries
2022-12-14T14:06:35.071+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonCommonMain/test/shared/PlayerImpl.kt:11:29 Conflicting declarations: internal val KClass<Player>.schema: SqlDriver.Schema, internal val KClass<Player>.schema: SqlDriver.Schema, internal val KClass<Player>.schema: SqlDriver.Schema
2022-12-14T14:06:35.071+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonCommonMain/test/shared/PlayerImpl.kt:14:1 Conflicting overloads: internal fun KClass<Player>.newInstance(driver: SqlDriver): Player defined in test.shared in file PlayerImpl.kt, internal fun KClass<Player>.newInstance(driver: SqlDriver): Player defined in test.shared in file PlayerImpl.kt, internal fun KClass<Player>.newInstance(driver: SqlDriver): Player defined in test.shared in file PlayerImpl.kt
2022-12-14T14:06:35.071+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonCommonMain/test/shared/PlayerImpl.kt:16:15 Redeclaration: PlayerImpl
2022-12-14T14:06:35.071+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonCommonMain/test/shared/PlayerImpl.kt:48:15 Redeclaration: PlayerQueriesImpl
2022-12-14T14:06:35.071+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonIosMain/test/HockeyPlayer.kt:6:19 Redeclaration: HockeyPlayer
2022-12-14T14:06:35.071+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonIosMain/test/Player.kt:8:18 Redeclaration: Player
2022-12-14T14:06:35.071+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonIosMain/test/Player.kt:13:29 Overload resolution ambiguity: 
2022-12-14T14:06:35.071+0100 [ERROR] [system.err] internal val KClass<Player>.schema: SqlDriver.Schema defined in test.shared in file PlayerImpl.kt
2022-12-14T14:06:35.072+0100 [ERROR] [system.err] internal val KClass<Player>.schema: SqlDriver.Schema defined in test.shared in file PlayerImpl.kt
2022-12-14T14:06:35.072+0100 [ERROR] [system.err] internal val KClass<Player>.schema: SqlDriver.Schema defined in test.shared in file PlayerImpl.kt
2022-12-14T14:06:35.072+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonIosMain/test/Player.kt:15:75 Overload resolution ambiguity: 
2022-12-14T14:06:35.072+0100 [ERROR] [system.err] internal fun KClass<Player>.newInstance(driver: SqlDriver): Player defined in test.shared in file PlayerImpl.kt
2022-12-14T14:06:35.072+0100 [ERROR] [system.err] internal fun KClass<Player>.newInstance(driver: SqlDriver): Player defined in test.shared in file PlayerImpl.kt
2022-12-14T14:06:35.072+0100 [ERROR] [system.err] internal fun KClass<Player>.newInstance(driver: SqlDriver): Player defined in test.shared in file PlayerImpl.kt
2022-12-14T14:06:35.072+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonIosMain/test/PlayerQueries.kt:5:18 Redeclaration: PlayerQueries
2022-12-14T14:06:35.072+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonIosMain/test/shared/PlayerImpl.kt:11:29 Conflicting declarations: internal val KClass<Player>.schema: SqlDriver.Schema, internal val KClass<Player>.schema: SqlDriver.Schema, internal val KClass<Player>.schema: SqlDriver.Schema
2022-12-14T14:06:35.072+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonIosMain/test/shared/PlayerImpl.kt:12:11 Cannot access 'PlayerImpl': it is private in file
2022-12-14T14:06:35.072+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonIosMain/test/shared/PlayerImpl.kt:12:22 Cannot access 'PlayerImpl': it is private in file
2022-12-14T14:06:35.072+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonIosMain/test/shared/PlayerImpl.kt:14:1 Conflicting overloads: internal fun KClass<Player>.newInstance(driver: SqlDriver): Player defined in test.shared in file PlayerImpl.kt, internal fun KClass<Player>.newInstance(driver: SqlDriver): Player defined in test.shared in file PlayerImpl.kt, internal fun KClass<Player>.newInstance(driver: SqlDriver): Player defined in test.shared in file PlayerImpl.kt
2022-12-14T14:06:35.072+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonIosMain/test/shared/PlayerImpl.kt:14:70 Cannot access 'PlayerImpl': it is private in file
2022-12-14T14:06:35.072+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonIosMain/test/shared/PlayerImpl.kt:16:15 Redeclaration: PlayerImpl
2022-12-14T14:06:35.072+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonIosMain/test/shared/PlayerImpl.kt:19:38 Cannot access 'PlayerQueriesImpl': it is private in file
2022-12-14T14:06:35.072+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonIosMain/test/shared/PlayerImpl.kt:19:58 Cannot access 'PlayerQueriesImpl': it is private in file
2022-12-14T14:06:35.072+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonIosMain/test/shared/PlayerImpl.kt:48:15 Redeclaration: PlayerQueriesImpl
2022-12-14T14:06:35.072+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonIosMain/test/shared/PlayerImpl.kt:49:25 Cannot access 'PlayerImpl': it is private in file
2022-12-14T14:06:35.072+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonMain/test/HockeyPlayer.kt:6:19 Redeclaration: HockeyPlayer
2022-12-14T14:06:35.072+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonMain/test/Player.kt:8:18 Redeclaration: Player
2022-12-14T14:06:35.072+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonMain/test/Player.kt:13:29 Overload resolution ambiguity: 
2022-12-14T14:06:35.072+0100 [ERROR] [system.err] internal val KClass<Player>.schema: SqlDriver.Schema defined in test.shared in file PlayerImpl.kt
2022-12-14T14:06:35.072+0100 [ERROR] [system.err] internal val KClass<Player>.schema: SqlDriver.Schema defined in test.shared in file PlayerImpl.kt
2022-12-14T14:06:35.072+0100 [ERROR] [system.err] internal val KClass<Player>.schema: SqlDriver.Schema defined in test.shared in file PlayerImpl.kt
2022-12-14T14:06:35.072+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonMain/test/Player.kt:15:75 Overload resolution ambiguity: 
2022-12-14T14:06:35.072+0100 [ERROR] [system.err] internal fun KClass<Player>.newInstance(driver: SqlDriver): Player defined in test.shared in file PlayerImpl.kt
2022-12-14T14:06:35.072+0100 [ERROR] [system.err] internal fun KClass<Player>.newInstance(driver: SqlDriver): Player defined in test.shared in file PlayerImpl.kt
2022-12-14T14:06:35.072+0100 [ERROR] [system.err] internal fun KClass<Player>.newInstance(driver: SqlDriver): Player defined in test.shared in file PlayerImpl.kt
2022-12-14T14:06:35.072+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonMain/test/PlayerQueries.kt:5:18 Redeclaration: PlayerQueries
2022-12-14T14:06:35.073+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonMain/test/shared/PlayerImpl.kt:11:29 Conflicting declarations: internal val KClass<Player>.schema: SqlDriver.Schema, internal val KClass<Player>.schema: SqlDriver.Schema, internal val KClass<Player>.schema: SqlDriver.Schema
2022-12-14T14:06:35.073+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonMain/test/shared/PlayerImpl.kt:12:11 Cannot access 'PlayerImpl': it is private in file
2022-12-14T14:06:35.073+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonMain/test/shared/PlayerImpl.kt:12:22 Cannot access 'PlayerImpl': it is private in file
2022-12-14T14:06:35.073+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonMain/test/shared/PlayerImpl.kt:14:1 Conflicting overloads: internal fun KClass<Player>.newInstance(driver: SqlDriver): Player defined in test.shared in file PlayerImpl.kt, internal fun KClass<Player>.newInstance(driver: SqlDriver): Player defined in test.shared in file PlayerImpl.kt, internal fun KClass<Player>.newInstance(driver: SqlDriver): Player defined in test.shared in file PlayerImpl.kt
2022-12-14T14:06:35.073+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonMain/test/shared/PlayerImpl.kt:14:70 Cannot access 'PlayerImpl': it is private in file
2022-12-14T14:06:35.073+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonMain/test/shared/PlayerImpl.kt:16:15 Redeclaration: PlayerImpl
2022-12-14T14:06:35.073+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonMain/test/shared/PlayerImpl.kt:19:38 Cannot access 'PlayerQueriesImpl': it is private in file
2022-12-14T14:06:35.073+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonMain/test/shared/PlayerImpl.kt:19:58 Cannot access 'PlayerQueriesImpl': it is private in file
2022-12-14T14:06:35.073+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonMain/test/shared/PlayerImpl.kt:48:15 Redeclaration: PlayerQueriesImpl
2022-12-14T14:06:35.073+0100 [ERROR] [system.err] e: file:///Users/stefanthaler/Spikes/kmp-sqldelight/shared/build/generated/sqldelight/code/Player/commonMain/test/shared/PlayerImpl.kt:49:25 Cannot access 'PlayerImpl': it is private in file
2022-12-14T14:06:35.073+0100 [DEBU

Gradle Build Script

plugins {
    kotlin("multiplatform")
    kotlin("native.cocoapods")
    id("com.android.library")
    id("com.squareup.sqldelight")
}

kotlin {
    android()
    iosX64()
    iosArm64()
    iosSimulatorArm64()

    cocoapods {
        summary = "Some description for the Shared Module"
        homepage = "Link to the Shared Module homepage"
        version = "1.0"
        ios.deploymentTarget = "14.1"
        framework {
            baseName = "shared"
        }
    }
    
    sourceSets {
        val commonMain by getting
        val commonTest by getting {
            dependencies {
                implementation(kotlin("test"))
            }
        }

        val androidMain by getting {
            dependsOn(commonMain)

            dependencies {
                implementation("com.squareup.sqldelight:android-driver:1.5.4")
            }

        }
        val androidTest by getting
        val iosX64Main by getting
        val iosArm64Main by getting
        val iosSimulatorArm64Main by getting
        val iosMain by creating {
            dependsOn(commonMain)

            dependencies {
                implementation("com.squareup.sqldelight:native-driver:1.5.4")
            }

            iosX64Main.dependsOn(this)
            iosArm64Main.dependsOn(this)
            iosSimulatorArm64Main.dependsOn(this)
        }
        val iosX64Test by getting
        val iosArm64Test by getting
        val iosSimulatorArm64Test by getting
        val iosTest by creating {
            dependsOn(commonTest)
            iosX64Test.dependsOn(this)
            iosArm64Test.dependsOn(this)
            iosSimulatorArm64Test.dependsOn(this)
        }
    }
}

android {
    namespace = "net.thalerit.kmp_sqldelight_18"
    compileSdk = 33
    defaultConfig {
        minSdk = 24
        targetSdk = 33
    }
}

sqldelight {
    database("Player") {
        packageName = "test"
    }
    linkSqlite = true
}

About this issue

  • Original URL
  • State: closed
  • Created 2 years ago
  • Comments: 18

Most upvoted comments

I just ran into this issue myself, and it turned out that I had forgotten to update the SqlDelight plugin version number, while updating all of the dependencies to the desired 1.5.5.

As soon as I updated the plugin version to match it, everything worked fine again. Maybe this will help someone, I found my way here through search engine.

Sorry @ln-12, I can’t give you an eta because I don’t know the schedule.

Then please add a reproducer.