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-tooling-core"))
commonCompileOnly(gradleKotlinDsl())
commonCompileOnly(project(":compiler"))
commonCompileOnly(project(":compiler:incremental-compilation-impl"))
commonCompileOnly(project(":daemon-common"))
@@ -11,13 +11,12 @@ import org.gradle.api.Project
import org.gradle.api.attributes.Category
import org.gradle.api.attributes.LibraryElements
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.gradle.internal.KOTLIN_MODULE_GROUP
import org.jetbrains.kotlin.gradle.plugin.KLIB_COMMONIZER_CLASSPATH_CONFIGURATION_NAME
import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion
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"
@@ -13,7 +13,6 @@ import org.gradle.api.provider.MapProperty
import org.gradle.api.provider.Property
import org.gradle.api.provider.ProviderFactory
import org.gradle.api.tasks.*
import org.gradle.kotlin.dsl.listProperty
import org.gradle.process.CommandLineArgumentProvider
import org.gradle.work.InputChanges
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.toSingleCompilerPluginOptions
import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast
import org.jetbrains.kotlin.gradle.utils.listPropertyWithConvention
import org.jetbrains.kotlin.utils.PathUtil
import org.slf4j.LoggerFactory
import java.io.File
@@ -59,7 +59,7 @@ abstract class KaptWithoutKotlincTask @Inject constructor(
internal val projectDir = project.projectDir
@get:Input
val kaptProcessJvmArgs: ListProperty<String> = objectFactory.listProperty<String>().convention(emptyList())
val kaptProcessJvmArgs: ListProperty<String> = objectFactory.listPropertyWithConvention(emptyList())
private fun getAnnotationProcessorOptions(): Map<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.TaskProvider
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.KotlinJvmOptionsImpl
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.FileCollection
import org.gradle.api.file.SourceDirectorySet
import org.gradle.kotlin.dsl.withType
import org.jetbrains.kotlin.gradle.plugin.*
import org.jetbrains.kotlin.gradle.plugin.mpp.*
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.sources.kpm.FragmentMappedKotlinSourceSet
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.KpmModuleDependency
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.TaskProvider
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.plugin.KotlinCompilationWithResources
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile
import org.jetbrains.kotlin.gradle.utils.named
class KotlinWithJavaCompilation<KotlinOptionsType : KotlinCommonOptions>(
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.Usage
import org.gradle.api.attributes.plugin.GradlePluginApiVersion
import org.gradle.kotlin.dsl.named
import org.gradle.util.GradleVersion
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.Provider
import org.gradle.api.provider.SetProperty
import org.gradle.api.tasks.TaskProvider
import org.gradle.kotlin.dsl.setProperty
import java.io.File
import kotlin.properties.ReadOnlyProperty
import kotlin.reflect.KProperty
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)
}
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> =
@Suppress("UNCHECKED_CAST")
(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.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: Provider<T>) = property<T>().value(initialValue)
@@ -65,6 +56,10 @@ internal inline fun <reified T : Any?> ObjectFactory.propertyWithConvention(
conventionValue: T
) = 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(
noinline lazyConventionValue: () -> T
) = property(lazyConventionValue).map { it.invoke() }
@@ -78,9 +73,6 @@ internal inline fun <reified T : Any> ObjectFactory.propertyWithNewInstance(
vararg parameters: Any
) = 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 =
apply {
finalizeValueOnRead()
@@ -6,9 +6,9 @@
package org.jetbrains.kotlin.gradle.utils
import org.gradle.api.Project
import org.gradle.kotlin.dsl.provider.ClassPathModeExceptionCollector
import org.gradle.kotlin.dsl.provider.inLenientMode
import org.gradle.kotlin.dsl.support.serviceOf
import org.gradle.api.internal.project.ProjectInternal
import org.gradle.api.provider.Provider
import org.gradle.tooling.model.kotlin.dsl.KotlinDslModelsParameters
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) {
/* 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
}
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
* ```kotlin