From 43842f01d3c13896c30c65645b25ce06c664300d Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Fri, 29 Jul 2022 22:02:11 -0400 Subject: [PATCH 1/2] Avoid NPEs in Kotlin 1.7.20 Same fixes borrowed from https://github.com/square/wire/pull/2310 --- .../kotlin/app/cash/sqldelight/gradle/SqlDelightDatabase.kt | 2 +- .../kotlin/app/cash/sqldelight/gradle/kotlin/SourceRoots.kt | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) 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..20b95a76665 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 @@ -32,7 +32,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() @@ -55,7 +55,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"), ), ) } @@ -104,7 +104,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()) From e37e17281e27d248c6f301052a068acb73968c03 Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Fri, 29 Jul 2022 22:17:02 -0400 Subject: [PATCH 2/2] Add missing changes --- .../kotlin/app/cash/sqldelight/gradle/kotlin/SourceRoots.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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 20b95a76665..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 @@ -45,7 +46,7 @@ internal fun SqlDelightDatabase.sources(project: Project): List { // Android project. project.extensions.findByName("android")?.let { - return (it as BaseExtension).sources() + return (it as BaseExtension).sources(project) } // Kotlin project. @@ -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