diff --git a/sqldelight-gradle-plugin/src/main/kotlin/app/cash/sqldelight/gradle/SqlDelightDatabase.kt b/sqldelight-gradle-plugin/src/main/kotlin/app/cash/sqldelight/gradle/SqlDelightDatabase.kt index 1510786a38f..913b924c1b4 100644 --- a/sqldelight-gradle-plugin/src/main/kotlin/app/cash/sqldelight/gradle/SqlDelightDatabase.kt +++ b/sqldelight-gradle-plugin/src/main/kotlin/app/cash/sqldelight/gradle/SqlDelightDatabase.kt @@ -86,7 +86,7 @@ class SqlDelightDatabase( private val generatedSourcesDirectory get() = File(project.buildDir, "generated/sqldelight/code/$name") - private val sources by lazy { sources() } + private val sources by lazy { sources(project) } private val dependencies = mutableListOf() private var recursionGuard = false diff --git a/sqldelight-gradle-plugin/src/main/kotlin/app/cash/sqldelight/gradle/kotlin/SourceRoots.kt b/sqldelight-gradle-plugin/src/main/kotlin/app/cash/sqldelight/gradle/kotlin/SourceRoots.kt index c56b4fde2be..e22804be2ed 100644 --- a/sqldelight-gradle-plugin/src/main/kotlin/app/cash/sqldelight/gradle/kotlin/SourceRoots.kt +++ b/sqldelight-gradle-plugin/src/main/kotlin/app/cash/sqldelight/gradle/kotlin/SourceRoots.kt @@ -6,6 +6,7 @@ import com.android.build.gradle.BaseExtension import com.android.build.gradle.LibraryExtension import com.android.build.gradle.api.BaseVariant import org.gradle.api.DomainObjectSet +import org.gradle.api.Project import org.gradle.api.Task import org.gradle.api.file.SourceDirectorySet import org.gradle.api.provider.Provider @@ -32,7 +33,7 @@ import java.io.File * * Multiplatform environment with android target (oh boy) */ -internal fun SqlDelightDatabase.sources(): List { +internal fun SqlDelightDatabase.sources(project: Project): List { // Multiplatform project. project.extensions.findByType(KotlinMultiplatformExtension::class.java)?.let { return it.sources() @@ -45,7 +46,7 @@ internal fun SqlDelightDatabase.sources(): List { // Android project. project.extensions.findByName("android")?.let { - return (it as BaseExtension).sources() + return (it as BaseExtension).sources(project) } // Kotlin project. @@ -55,7 +56,7 @@ internal fun SqlDelightDatabase.sources(): List { type = KotlinPlatformType.jvm, name = "main", sourceSets = listOf("main"), - sourceDirectorySet = sourceSets.getByName("main").kotlin!!, + sourceDirectorySet = sourceSets.getByName("main").kotlin ?: project.objects.sourceDirectorySet("empty", "Empty kotlin source set"), ), ) } @@ -87,7 +88,7 @@ private fun KotlinMultiplatformExtension.sources(): List { ) } -private fun BaseExtension.sources(): List { +private fun BaseExtension.sources(project: Project): List { val variants: DomainObjectSet = when (this) { is AppExtension -> applicationVariants is LibraryExtension -> libraryVariants @@ -104,7 +105,7 @@ private fun BaseExtension.sources(): List { name = variant.name, variantName = variant.name, sourceDirectorySet = sourceSets[variant.name] - ?: throw IllegalStateException("Couldn't find ${variant.name} in $sourceSets"), + ?: project.objects.sourceDirectorySet(variant.name, "Empty kotlin source set"), sourceSets = variant.sourceSets.map { it.name }, registerGeneratedDirectory = { outputDirectoryProvider -> variant.addJavaSourceFoldersToModel(outputDirectoryProvider.get())