diff --git a/gradle-plugin/lint-baseline.xml b/gradle-plugin/lint-baseline.xml index cc63ad080d..5f9a3ca0a0 100644 --- a/gradle-plugin/lint-baseline.xml +++ b/gradle-plugin/lint-baseline.xml @@ -1,50 +1,6 @@ - - - - - - - - - - - - - - - - - - - - - // this is workaround for KAPT generator that prevents circular dependency - val filteredSources = Callable { - val destinationProperty = (kaptProvider?.get() as? KaptTask)?.destinationDir - val dir = destinationProperty?.get()?.asFile + // Workaround for KAPT generator that prevents circular dependency, we can't call kaptProvider.map directly. + val filteredSources = project.provider { + @Suppress("EagerGradleConfiguration") // kaptProvider could be gotten in provider. + val kapt = kaptProvider?.get() + val dir = (kapt as? KaptTask)?.destinationDir?.get()?.asFile sources?.filter { source -> dir?.isParentOf(source.dir) != true && source.dir !in kspExtension.excludedSources diff --git a/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspAATask.kt b/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspAATask.kt index 7c37b1253a..0762c8c69b 100644 --- a/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspAATask.kt +++ b/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspAATask.kt @@ -76,7 +76,6 @@ import java.lang.reflect.InvocationTargetException import java.net.URLClassLoader import java.nio.file.Paths import java.util.* -import java.util.concurrent.Callable import javax.inject.Inject @CacheableTask @@ -221,15 +220,16 @@ abstract class KspAATask @Inject constructor( val kaptGeneratedClassesDir = getKaptGeneratedClassesDir(project, sourceSetName) val kspOutputDir = KspGradleSubplugin.getKspOutputDir(project, sourceSetName, target) cfg.libraries.from( - project.files( - Callable { - kotlinCompileProvider.get().libraries.filter { - !kspOutputDir.get().asFile.isParentOf(it) && - !kaptGeneratedClassesDir.isParentOf(it) && - !(it.isDirectory && it.listFiles()?.isEmpty() == true) - } + // Workaround for preventing circular dependency, we can't call kotlinCompileProvider.map directly. + project.provider { + @Suppress("EagerGradleConfiguration") // kotlinCompile could be gotten in provider. + val kotlinCompile = kotlinCompileProvider.get() + kotlinCompile.libraries.filter { + !kspOutputDir.get().asFile.isParentOf(it) && + !kaptGeneratedClassesDir.isParentOf(it) && + !(it.isDirectory && it.listFiles()?.isEmpty() == true) } - ) + } ) } else { cfg.libraries.from( @@ -344,7 +344,7 @@ abstract class KspAATask @Inject constructor( if (kotlinCompilation is KotlinNativeCompilation) { val konanTargetName = kotlinCompilation.target.konanTarget.name cfg.konanTargetName.value(konanTargetName) - cfg.konanHome.value((kotlinCompileProvider.get() as KotlinNativeCompile).konanHome) + cfg.konanHome.value(kotlinCompileProvider.map { (it as KotlinNativeCompile).konanHome }.get()) val isKlibCrossCompilationEnabled: Provider = project.providers.gradleProperty( "kotlin.native.enableKlibsCrossCompilation" diff --git a/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspConfigurations.kt b/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspConfigurations.kt index 92adf0efd4..7817b73a84 100644 --- a/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspConfigurations.kt +++ b/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspConfigurations.kt @@ -25,10 +25,10 @@ class KspConfigurations(private val project: Project) { ?: true // The "ksp" configuration, applied to every compilation. - private val configurationForAll = project.configurations.create(PREFIX).apply { - isCanBeConsumed = false - isCanBeResolved = false - isVisible = false + private val configurationForAll = project.configurations.register(PREFIX) { + it.isCanBeConsumed = false + it.isCanBeResolved = false + it.isVisible = false } private fun configurationNameOf(vararg parts: String): String { @@ -118,17 +118,19 @@ class KspConfigurations(private val project: Project) { is KotlinMultiplatformExtension -> { kotlin.targets.configureEach { decorateKotlinTarget(it, isKotlinMultiplatform = true) } - var reported = false - configurationForAll.dependencies.whenObjectAdded { - if (!reported) { - reported = true - val msg = "The 'ksp' configuration is deprecated in Kotlin Multiplatform projects. " + - "Please use target-specific configurations like 'kspJvm' instead." - - if (allowAllTargetConfiguration) { - project.logger.warn(msg) - } else { - throw InvalidUserCodeException(msg) + configurationForAll.configure { configuration -> + var reported = false + configuration.dependencies.configureEach { + if (!reported) { + reported = true + val msg = "The 'ksp' configuration is deprecated in Kotlin Multiplatform projects. " + + "Please use target-specific configurations like 'kspJvm' instead." + + if (allowAllTargetConfiguration) { + project.logger.warn(msg) + } else { + throw InvalidUserCodeException(msg) + } } } }