Drop gradleKotlinDsl dependency for KGP

This dependency brings gradleApi as a transitive dependency, which leads
to false-positive deprecation errors in plugin variants.

^KT-47047 In Progress
This commit is contained in:
Yahor Berdnikau
2022-05-31 17:10:54 +02:00
committed by Space
parent d924c14df7
commit 72b7d8da6d
11 changed files with 69 additions and 29 deletions
@@ -32,7 +32,6 @@ dependencies {
commonApi(project(":kotlin-gradle-plugin-model")) commonApi(project(":kotlin-gradle-plugin-model"))
commonApi(project(":kotlin-tooling-core")) commonApi(project(":kotlin-tooling-core"))
commonCompileOnly(gradleKotlinDsl())
commonCompileOnly(project(":compiler")) commonCompileOnly(project(":compiler"))
commonCompileOnly(project(":compiler:incremental-compilation-impl")) commonCompileOnly(project(":compiler:incremental-compilation-impl"))
commonCompileOnly(project(":daemon-common")) commonCompileOnly(project(":daemon-common"))
@@ -11,13 +11,12 @@ import org.gradle.api.Project
import org.gradle.api.attributes.Category import org.gradle.api.attributes.Category
import org.gradle.api.attributes.LibraryElements import org.gradle.api.attributes.LibraryElements
import org.gradle.api.attributes.Usage import org.gradle.api.attributes.Usage
import org.gradle.kotlin.dsl.named
import org.gradle.tooling.model.build.JavaEnvironment
import org.jetbrains.kotlin.commonizer.CliCommonizer import org.jetbrains.kotlin.commonizer.CliCommonizer
import org.jetbrains.kotlin.gradle.internal.KOTLIN_MODULE_GROUP import org.jetbrains.kotlin.gradle.internal.KOTLIN_MODULE_GROUP
import org.jetbrains.kotlin.gradle.plugin.KLIB_COMMONIZER_CLASSPATH_CONFIGURATION_NAME import org.jetbrains.kotlin.gradle.plugin.KLIB_COMMONIZER_CLASSPATH_CONFIGURATION_NAME
import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion
import org.jetbrains.kotlin.gradle.plugin.usageByName import org.jetbrains.kotlin.gradle.plugin.usageByName
import org.jetbrains.kotlin.gradle.utils.named
private const val KOTLIN_KLIB_COMMONIZER_EMBEDDABLE = "kotlin-klib-commonizer-embeddable" private const val KOTLIN_KLIB_COMMONIZER_EMBEDDABLE = "kotlin-klib-commonizer-embeddable"
@@ -13,7 +13,6 @@ import org.gradle.api.provider.MapProperty
import org.gradle.api.provider.Property import org.gradle.api.provider.Property
import org.gradle.api.provider.ProviderFactory import org.gradle.api.provider.ProviderFactory
import org.gradle.api.tasks.* import org.gradle.api.tasks.*
import org.gradle.kotlin.dsl.listProperty
import org.gradle.process.CommandLineArgumentProvider import org.gradle.process.CommandLineArgumentProvider
import org.gradle.work.InputChanges import org.gradle.work.InputChanges
import org.gradle.workers.IsolationMode import org.gradle.workers.IsolationMode
@@ -26,6 +25,7 @@ import org.jetbrains.kotlin.gradle.internal.kapt.incremental.KaptIncrementalChan
import org.jetbrains.kotlin.gradle.tasks.Kapt import org.jetbrains.kotlin.gradle.tasks.Kapt
import org.jetbrains.kotlin.gradle.tasks.toSingleCompilerPluginOptions import org.jetbrains.kotlin.gradle.tasks.toSingleCompilerPluginOptions
import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast
import org.jetbrains.kotlin.gradle.utils.listPropertyWithConvention
import org.jetbrains.kotlin.utils.PathUtil import org.jetbrains.kotlin.utils.PathUtil
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory
import java.io.File import java.io.File
@@ -59,7 +59,7 @@ abstract class KaptWithoutKotlincTask @Inject constructor(
internal val projectDir = project.projectDir internal val projectDir = project.projectDir
@get:Input @get:Input
val kaptProcessJvmArgs: ListProperty<String> = objectFactory.listProperty<String>().convention(emptyList()) val kaptProcessJvmArgs: ListProperty<String> = objectFactory.listPropertyWithConvention(emptyList())
private fun getAnnotationProcessorOptions(): Map<String, String> { private fun getAnnotationProcessorOptions(): Map<String, String> {
val result = mutableMapOf<String, String>() val result = mutableMapOf<String, String>()
@@ -14,7 +14,6 @@ import org.gradle.api.file.SourceDirectorySet
import org.gradle.api.tasks.SourceSet import org.gradle.api.tasks.SourceSet
import org.gradle.api.tasks.TaskProvider import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.bundling.AbstractArchiveTask import org.gradle.api.tasks.bundling.AbstractArchiveTask
import org.gradle.kotlin.dsl.withType
import org.jetbrains.kotlin.gradle.dsl.* import org.jetbrains.kotlin.gradle.dsl.*
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptionsImpl import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptionsImpl
import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.*
@@ -16,7 +16,6 @@ import org.gradle.api.artifacts.Configuration
import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.file.FileCollection import org.gradle.api.file.FileCollection
import org.gradle.api.file.SourceDirectorySet import org.gradle.api.file.SourceDirectorySet
import org.gradle.kotlin.dsl.withType
import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.*
import org.jetbrains.kotlin.gradle.plugin.mpp.* import org.jetbrains.kotlin.gradle.plugin.mpp.*
import org.jetbrains.kotlin.gradle.plugin.mpp.isMain import org.jetbrains.kotlin.gradle.plugin.mpp.isMain
@@ -24,6 +23,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.disambiguateName
import org.jetbrains.kotlin.gradle.plugin.mpp.publishedConfigurationName import org.jetbrains.kotlin.gradle.plugin.mpp.publishedConfigurationName
import org.jetbrains.kotlin.gradle.plugin.sources.kpm.FragmentMappedKotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.sources.kpm.FragmentMappedKotlinSourceSet
import org.jetbrains.kotlin.gradle.utils.filesProvider import org.jetbrains.kotlin.gradle.utils.filesProvider
import org.jetbrains.kotlin.gradle.utils.withType
import org.jetbrains.kotlin.project.model.KotlinAttributeKey import org.jetbrains.kotlin.project.model.KotlinAttributeKey
import org.jetbrains.kotlin.project.model.KpmModuleDependency import org.jetbrains.kotlin.project.model.KpmModuleDependency
import org.jetbrains.kotlin.tooling.core.MutableExtras import org.jetbrains.kotlin.tooling.core.MutableExtras
@@ -9,10 +9,10 @@ package org.jetbrains.kotlin.gradle.plugin.mpp
import org.gradle.api.tasks.SourceSet import org.gradle.api.tasks.SourceSet
import org.gradle.api.tasks.TaskProvider import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.compile.JavaCompile import org.gradle.api.tasks.compile.JavaCompile
import org.gradle.kotlin.dsl.named
import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationWithResources import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationWithResources
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile
import org.jetbrains.kotlin.gradle.utils.named
class KotlinWithJavaCompilation<KotlinOptionsType : KotlinCommonOptions>( class KotlinWithJavaCompilation<KotlinOptionsType : KotlinCommonOptions>(
target: KotlinWithJavaTarget<KotlinOptionsType>, target: KotlinWithJavaTarget<KotlinOptionsType>,
@@ -0,0 +1,20 @@
/*
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.gradle.utils
import org.gradle.api.DomainObjectCollection
import org.gradle.api.Task
import org.gradle.api.tasks.TaskCollection
import org.gradle.api.tasks.TaskProvider
internal inline fun <reified S> DomainObjectCollection<in S>.withType(): DomainObjectCollection<S> =
withType(S::class.java)
@Suppress("extension_shadowed_by_member", "UNCHECKED_CAST")
inline fun <reified T : Task> TaskCollection<out Task>.named(name: String): TaskProvider<T> =
(this as TaskCollection<T>).named(name, T::class.java)
@@ -12,7 +12,6 @@ import org.gradle.api.attributes.Category
import org.gradle.api.attributes.LibraryElements import org.gradle.api.attributes.LibraryElements
import org.gradle.api.attributes.Usage import org.gradle.api.attributes.Usage
import org.gradle.api.attributes.plugin.GradlePluginApiVersion import org.gradle.api.attributes.plugin.GradlePluginApiVersion
import org.gradle.kotlin.dsl.named
import org.gradle.util.GradleVersion import org.gradle.util.GradleVersion
import java.lang.RuntimeException import java.lang.RuntimeException
@@ -0,0 +1,12 @@
/*
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.gradle.utils
import org.gradle.api.Named
import org.gradle.api.model.ObjectFactory
internal inline fun <reified T : Named> ObjectFactory.named(name: String): T =
named(T::class.java, name)
@@ -14,10 +14,7 @@ import org.gradle.api.provider.ListProperty
import org.gradle.api.provider.Property import org.gradle.api.provider.Property
import org.gradle.api.provider.Provider import org.gradle.api.provider.Provider
import org.gradle.api.provider.SetProperty import org.gradle.api.provider.SetProperty
import org.gradle.api.tasks.TaskProvider
import org.gradle.kotlin.dsl.setProperty
import java.io.File import java.io.File
import kotlin.properties.ReadOnlyProperty
import kotlin.reflect.KProperty import kotlin.reflect.KProperty
internal operator fun <T> Provider<T>.getValue(thisRef: Any?, property: KProperty<*>) = get() internal operator fun <T> Provider<T>.getValue(thisRef: Any?, property: KProperty<*>) = get()
@@ -26,16 +23,6 @@ internal operator fun <T> Property<T>.setValue(thisRef: Any?, property: KPropert
set(value) set(value)
} }
private class OptionalProviderDelegate<T>(private val provider: Provider<T?>) : ReadOnlyProperty<Any?, T?> {
override fun getValue(thisRef: Any?, property: KProperty<*>): T? =
if (provider.isPresent)
provider.get()
else null
}
internal fun <T> Project.optionalProvider(initialize: () -> T?): ReadOnlyProperty<Any?, T?> =
OptionalProviderDelegate(provider(initialize))
internal fun <T : Any> Project.newProperty(initialize: (() -> T)? = null): Property<T> = internal fun <T : Any> Project.newProperty(initialize: (() -> T)? = null): Property<T> =
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
(project.objects.property(Any::class.java) as Property<T>).apply { (project.objects.property(Any::class.java) as Property<T>).apply {
@@ -45,6 +32,10 @@ internal fun <T : Any> Project.newProperty(initialize: (() -> T)? = null): Prope
internal inline fun <reified T : Any?> ObjectFactory.property() = property(T::class.java) internal inline fun <reified T : Any?> ObjectFactory.property() = property(T::class.java)
internal inline fun <reified T : Any?> ObjectFactory.listProperty() = listProperty(T::class.java)
internal inline fun <reified T : Any?> ObjectFactory.setProperty() = setProperty(T::class.java)
internal inline fun <reified T : Any?> ObjectFactory.property(initialValue: T) = property<T>().value(initialValue) internal inline fun <reified T : Any?> ObjectFactory.property(initialValue: T) = property<T>().value(initialValue)
internal inline fun <reified T : Any?> ObjectFactory.property(initialValue: Provider<T>) = property<T>().value(initialValue) internal inline fun <reified T : Any?> ObjectFactory.property(initialValue: Provider<T>) = property<T>().value(initialValue)
@@ -65,6 +56,10 @@ internal inline fun <reified T : Any?> ObjectFactory.propertyWithConvention(
conventionValue: T conventionValue: T
) = property<T>().convention(conventionValue) ) = property<T>().convention(conventionValue)
internal inline fun <reified T : Any?> ObjectFactory.listPropertyWithConvention(
conventionValue: Iterable<T>
) = listProperty<T>().convention(conventionValue)
internal inline fun <reified T : Any?> ObjectFactory.providerWithLazyConvention( internal inline fun <reified T : Any?> ObjectFactory.providerWithLazyConvention(
noinline lazyConventionValue: () -> T noinline lazyConventionValue: () -> T
) = property(lazyConventionValue).map { it.invoke() } ) = property(lazyConventionValue).map { it.invoke() }
@@ -78,9 +73,6 @@ internal inline fun <reified T : Any> ObjectFactory.propertyWithNewInstance(
vararg parameters: Any vararg parameters: Any
) = propertyWithConvention(newInstance(T::class.java, *parameters)) ) = propertyWithConvention(newInstance(T::class.java, *parameters))
internal inline fun <reified T : Any> ObjectFactory.propertyWithNewInstance() =
propertyWithConvention(newInstance<T>())
internal fun <PropType : Any?, T : Property<PropType>> T.chainedFinalizeValueOnRead(): T = internal fun <PropType : Any?, T : Property<PropType>> T.chainedFinalizeValueOnRead(): T =
apply { apply {
finalizeValueOnRead() finalizeValueOnRead()
@@ -6,9 +6,9 @@
package org.jetbrains.kotlin.gradle.utils package org.jetbrains.kotlin.gradle.utils
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.kotlin.dsl.provider.ClassPathModeExceptionCollector import org.gradle.api.internal.project.ProjectInternal
import org.gradle.kotlin.dsl.provider.inLenientMode import org.gradle.api.provider.Provider
import org.gradle.kotlin.dsl.support.serviceOf import org.gradle.tooling.model.kotlin.dsl.KotlinDslModelsParameters
import org.jetbrains.kotlin.gradle.plugin.whenEvaluated import org.jetbrains.kotlin.gradle.plugin.whenEvaluated
/** /**
@@ -58,13 +58,33 @@ import org.jetbrains.kotlin.gradle.plugin.whenEvaluated
*/ */
internal inline fun Project.runProjectConfigurationHealthCheck(check: Project.() -> Unit) { internal inline fun Project.runProjectConfigurationHealthCheck(check: Project.() -> Unit) {
/* Running configuration checks on a failed project will only lead to false positive error messages */ /* Running configuration checks on a failed project will only lead to false positive error messages */
if (state.failure != null || (inLenientMode() && serviceOf<ClassPathModeExceptionCollector>().exceptions.isNotEmpty())) { if (state.failure != null || (inLenientMode() && syncExceptionsAreNotEmpty())) {
return return
} }
check() check()
} }
// ClassPathModeExceptionCollector is available only via 'gradleKotlinDsl()' dependency which brings in full Gradle jar
private fun Project.syncExceptionsAreNotEmpty(): Boolean {
val classPathModeExceptionCollectionClass = Class.forName("org.gradle.kotlin.dsl.provider.ClassPathModeExceptionCollector")
val exceptionCollector = (this as ProjectInternal).services.get(classPathModeExceptionCollectionClass)
@Suppress("UNCHECKED_CAST")
val exceptionsList = classPathModeExceptionCollectionClass.methods
.first { it.name == "getExceptions" }
.invoke(exceptionCollector) as List<Exception>
return exceptionsList.isNotEmpty()
}
private val Project.providerModeSystemPropertyValue: Provider<String>
get() = providers
.systemProperty(KotlinDslModelsParameters.PROVIDER_MODE_SYSTEM_PROPERTY_NAME)
.forUseAtConfigurationTime()
private fun Project.inLenientMode() =
providerModeSystemPropertyValue.orNull == KotlinDslModelsParameters.CLASSPATH_MODE_SYSTEM_PROPERTY_VALUE
/** /**
* Convenience function for * Convenience function for
* ```kotlin * ```kotlin