diff --git a/libraries/tools/kotlin-gradle-plugin/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin/build.gradle.kts index e636f1786fa..ae0d3ba10f8 100644 --- a/libraries/tools/kotlin-gradle-plugin/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin/build.gradle.kts @@ -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")) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/GradleCliCommonizer.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/GradleCliCommonizer.kt index 39c413e8bd9..edb5cf3b5d8 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/GradleCliCommonizer.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/compilerRunner/GradleCliCommonizer.kt @@ -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" diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptWithoutKotlincTask.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptWithoutKotlincTask.kt index a254d78b922..8b3d4f89708 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptWithoutKotlincTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptWithoutKotlincTask.kt @@ -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 = objectFactory.listProperty().convention(emptyList()) + val kaptProcessJvmArgs: ListProperty = objectFactory.listPropertyWithConvention(emptyList()) private fun getAnnotationProcessorOptions(): Map { val result = mutableMapOf() diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/CompilationDetails.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/CompilationDetails.kt index 6aad4d2792d..0747d7caa82 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/CompilationDetails.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/CompilationDetails.kt @@ -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.* diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/GradleKpmLegacyMappedVariant.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/GradleKpmLegacyMappedVariant.kt index 4fca5f5168c..aa2b8ec935a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/GradleKpmLegacyMappedVariant.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/pm20/GradleKpmLegacyMappedVariant.kt @@ -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 diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinWithJavaCompilation.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinWithJavaCompilation.kt index 4d053d35645..2ead17e0f77 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinWithJavaCompilation.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinWithJavaCompilation.kt @@ -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( target: KotlinWithJavaTarget, diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/ObjectCollectionExt.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/ObjectCollectionExt.kt new file mode 100644 index 00000000000..743972a5dc8 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/ObjectCollectionExt.kt @@ -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 DomainObjectCollection.withType(): DomainObjectCollection = + withType(S::class.java) + + +@Suppress("extension_shadowed_by_member", "UNCHECKED_CAST") +inline fun TaskCollection.named(name: String): TaskProvider = + (this as TaskCollection).named(name, T::class.java) + diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/gradleConfigurationUtils.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/gradleConfigurationUtils.kt index 5253e7c2e01..4a7a3fa7579 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/gradleConfigurationUtils.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/gradleConfigurationUtils.kt @@ -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 diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/objectFactoryExt.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/objectFactoryExt.kt new file mode 100644 index 00000000000..bff161dc7fb --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/objectFactoryExt.kt @@ -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 ObjectFactory.named(name: String): T = + named(T::class.java, name) \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/providerApiUtils.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/providerApiUtils.kt index 30166fdbf4a..d0b2b27c984 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/providerApiUtils.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/providerApiUtils.kt @@ -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 Provider.getValue(thisRef: Any?, property: KProperty<*>) = get() @@ -26,16 +23,6 @@ internal operator fun Property.setValue(thisRef: Any?, property: KPropert set(value) } -private class OptionalProviderDelegate(private val provider: Provider) : ReadOnlyProperty { - override fun getValue(thisRef: Any?, property: KProperty<*>): T? = - if (provider.isPresent) - provider.get() - else null -} - -internal fun Project.optionalProvider(initialize: () -> T?): ReadOnlyProperty = - OptionalProviderDelegate(provider(initialize)) - internal fun Project.newProperty(initialize: (() -> T)? = null): Property = @Suppress("UNCHECKED_CAST") (project.objects.property(Any::class.java) as Property).apply { @@ -45,6 +32,10 @@ internal fun Project.newProperty(initialize: (() -> T)? = null): Prope internal inline fun ObjectFactory.property() = property(T::class.java) +internal inline fun ObjectFactory.listProperty() = listProperty(T::class.java) + +internal inline fun ObjectFactory.setProperty() = setProperty(T::class.java) + internal inline fun ObjectFactory.property(initialValue: T) = property().value(initialValue) internal inline fun ObjectFactory.property(initialValue: Provider) = property().value(initialValue) @@ -65,6 +56,10 @@ internal inline fun ObjectFactory.propertyWithConvention( conventionValue: T ) = property().convention(conventionValue) +internal inline fun ObjectFactory.listPropertyWithConvention( + conventionValue: Iterable +) = listProperty().convention(conventionValue) + internal inline fun ObjectFactory.providerWithLazyConvention( noinline lazyConventionValue: () -> T ) = property(lazyConventionValue).map { it.invoke() } @@ -78,9 +73,6 @@ internal inline fun ObjectFactory.propertyWithNewInstance( vararg parameters: Any ) = propertyWithConvention(newInstance(T::class.java, *parameters)) -internal inline fun ObjectFactory.propertyWithNewInstance() = - propertyWithConvention(newInstance()) - internal fun > T.chainedFinalizeValueOnRead(): T = apply { finalizeValueOnRead() diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/runProjectConfigurationHealthCheck.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/runProjectConfigurationHealthCheck.kt index aba3b523176..e0316df43d3 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/runProjectConfigurationHealthCheck.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/runProjectConfigurationHealthCheck.kt @@ -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().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 + + return exceptionsList.isNotEmpty() +} + +private val Project.providerModeSystemPropertyValue: Provider + 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