diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/AbstractKotlinAndroidGradleTests.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/AbstractKotlinAndroidGradleTests.kt index eacea694cec..4c33a590e87 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/AbstractKotlinAndroidGradleTests.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/AbstractKotlinAndroidGradleTests.kt @@ -21,7 +21,7 @@ open class KotlinAndroid32GradleIT : KotlinAndroid3GradleIT() { get() = AGPVersion.v3_2_0 override val defaultGradleVersion: GradleVersionRequired - get() = GradleVersionRequired.AtLeast("4.6") + get() = GradleVersionRequired.None @Test fun testAndroidWithNewMppApp() = with(Project("new-mpp-android", GradleVersionRequired.AtLeast("5.0"))) { @@ -399,10 +399,7 @@ class KotlinAndroid30GradleIT : KotlinAndroid3GradleIT() { get() = GradleVersionRequired.Until("4.10.2") @Test - fun testOmittedStdlibVersion() = Project( - "AndroidProject", - defaultGradleVersion.maxVersion?.let { GradleVersionRequired.InRange("4.4", it) } ?: GradleVersionRequired.AtLeast("4.4") - ).run { + fun testOmittedStdlibVersion() = Project("AndroidProject").run { setupWorkingDir() gradleBuildScript("Lib").modify { diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildCacheIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildCacheIT.kt index 8a0ac0e013e..6f556a38f2c 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildCacheIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildCacheIT.kt @@ -25,7 +25,7 @@ class BuildCacheIT : BaseGradleIT() { super.defaultBuildOptions().copy(withBuildCache = true) companion object { - private val GRADLE_VERSION = GradleVersionRequired.AtLeast("4.3") + private val GRADLE_VERSION = GradleVersionRequired.None } @Test diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildCacheRelocationIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildCacheRelocationIT.kt index 33d3fae00ac..a80a8bf323b 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildCacheRelocationIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BuildCacheRelocationIT.kt @@ -48,7 +48,7 @@ class BuildCacheRelocationIT : BaseGradleIT() { val (firstProject, secondProject) = (0..1).map { id -> workingDir = workingDirs[id] - Project(projectName, GradleVersionRequired.AtLeast("4.4"), projectDirectoryPrefix).apply { + Project(projectName, directoryPrefix = projectDirectoryPrefix).apply { setupWorkingDir() initProject() prepareLocalBuildCache(localBuildCacheDirectory) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CocoaPodsIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CocoaPodsIT.kt index 41f0590830a..21860022f6f 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CocoaPodsIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/CocoaPodsIT.kt @@ -17,7 +17,7 @@ import kotlin.test.fail class CocoaPodsIT : BaseGradleIT() { // We use Kotlin DSL. Earlier Gradle versions fail at accessors codegen. - val gradleVersion = GradleVersionRequired.AtLeast("4.9") + val gradleVersion = GradleVersionRequired.None val PODFILE_IMPORT_DIRECTIVE_PLACEHOLDER = "" diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/GradleVersionRequired.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/GradleVersionRequired.kt index 2afcf5f35eb..b301c4d9609 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/GradleVersionRequired.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/GradleVersionRequired.kt @@ -21,7 +21,7 @@ import org.junit.Assume sealed class GradleVersionRequired(val minVersion: String, val maxVersion: String?) { companion object { - const val OLDEST_SUPPORTED = "4.3" + const val OLDEST_SUPPORTED = "4.9" } class Exact(version: String) : GradleVersionRequired(version, version) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/JavaUpToDateIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/JavaUpToDateIT.kt index 16c29b6f22d..f8749b9c150 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/JavaUpToDateIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/JavaUpToDateIT.kt @@ -11,7 +11,7 @@ import org.junit.Test class JavaUpToDateIT : BaseGradleIT() { @Test fun testKotlinMethodBodyIsChanged() { - val project = Project("javaUpToDate", GradleVersionRequired.AtLeast("4.3")) + val project = Project("javaUpToDate") project.build("build") { assertSuccessful() @@ -33,7 +33,7 @@ class JavaUpToDateIT : BaseGradleIT() { @Test fun testKotlinNewLineAdded() { - val project = Project("javaUpToDate", GradleVersionRequired.AtLeast("4.3")) + val project = Project("javaUpToDate") project.build("build") { assertSuccessful() @@ -50,7 +50,7 @@ class JavaUpToDateIT : BaseGradleIT() { @Test fun testPrivateMethodSignatureChanged() { - val project = Project("javaUpToDate", GradleVersionRequired.AtLeast("4.3")) + val project = Project("javaUpToDate") project.build("build") { assertSuccessful() diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3AndroidIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3AndroidIT.kt index edf5717a41d..5ebe207e856 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3AndroidIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3AndroidIT.kt @@ -16,7 +16,7 @@ open class Kapt3Android32IT : Kapt3AndroidIT() { get() = AGPVersion.v3_2_0 override val defaultGradleVersion: GradleVersionRequired - get() = GradleVersionRequired.AtLeast("4.6") + get() = GradleVersionRequired.None } open class Kapt3Android33IT : Kapt3AndroidIT() { @@ -81,7 +81,7 @@ class Kapt3Android31IT : Kapt3AndroidIT() { // there is a weird validation exception in testICWithAnonymousClasses with 5.0 todo: fix it override val defaultGradleVersion: GradleVersionRequired - get() = GradleVersionRequired.InRange("4.4", "4.10.2") + get() = GradleVersionRequired.Until("4.10.2") } open class Kapt3AndroidIT : Kapt3BaseIT() { diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3IT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3IT.kt index 8fe4562e606..69d4821143c 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3IT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3IT.kt @@ -46,12 +46,8 @@ class Kapt3WorkersIT : Kapt3IT() { @Test fun testJavacIsLoadedOnce() { - // todo: actual minimum version is 4.3, but I had some problems. Investigate later. - // todo: consider minimum version for the whole class, with Gradle <4.3 all tests duplicate tests without workers - val gradleVersionRequired = GradleVersionRequired.AtLeast("4.5.1") - val project = - Project("javacIsLoadedOnce", directoryPrefix = "kapt2", gradleVersionRequirement = gradleVersionRequired) + Project("javacIsLoadedOnce", directoryPrefix = "kapt2") project.build("build") { assertSuccessful() assertSubstringCount("Loaded com.sun.tools.javac.util.Context from", 1) @@ -60,10 +56,8 @@ class Kapt3WorkersIT : Kapt3IT() { @Test fun testKaptSkipped() { - val gradleVersionRequired = GradleVersionRequired.AtLeast("4.3") - val project = - Project("kaptSkipped", directoryPrefix = "kapt2", gradleVersionRequirement = gradleVersionRequired) + Project("kaptSkipped", directoryPrefix = "kapt2") project.build("build") { assertSuccessful() } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalIT.kt index 1191415305c..9c51178b7e3 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KaptIncrementalIT.kt @@ -36,13 +36,7 @@ open class KaptIncrementalIT : BaseGradleIT() { assertSuccessful() assertTasksExecuted(":kaptGenerateStubsKotlin", ":compileKotlin") assertTasksUpToDate(":kaptKotlin") - - // compileJava is up-to-date with Gradle >= 4.3, executed otherwise - if (project.testGradleVersionAtLeast("4.3")) { - assertTasksUpToDate(":compileJava") - } else { - assertTasksExecuted(":compileJava") - } + assertTasksUpToDate(":compileJava") } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt index 679dc6cd656..76989a9a3cb 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt @@ -366,7 +366,7 @@ class KotlinGradleIT : BaseGradleIT() { @Test fun testOmittedStdlibVersion() { - val project = Project("kotlinProject", GradleVersionRequired.AtLeast("4.4")) + val project = Project("kotlinProject") project.setupWorkingDir() File(project.projectDir, "build.gradle").modify { it.replace("kotlin-stdlib:\$kotlin_version", "kotlin-stdlib").apply { check(!equals(it)) } + "\n" + """ @@ -739,7 +739,7 @@ class KotlinGradleIT : BaseGradleIT() { @Test fun testDefaultKotlinVersionIsNotAffectedByTransitiveDependencies() = - with(Project("simpleProject", GradleVersionRequired.AtLeast("4.4"))) { + with(Project("simpleProject")) { setupWorkingDir() // Add a dependency with an explicit lower Kotlin version that has a kotlin-stdlib transitive dependency: gradleBuildScript().appendText("\ndependencies { compile 'org.jetbrains.kotlin:kotlin-reflect:1.2.71' }") @@ -753,7 +753,7 @@ class KotlinGradleIT : BaseGradleIT() { @Test fun testKotlinJvmProjectPublishesKotlinApiDependenciesAsCompile() = - with(Project("simpleProject", GradleVersionRequired.AtLeast("4.4"))) { + with(Project("simpleProject")) { setupWorkingDir() gradleBuildScript().appendText( "\n" + """ @@ -786,11 +786,10 @@ class KotlinGradleIT : BaseGradleIT() { @Test fun testNoTaskConfigurationForcing() { - val gradleVersionRequirement = GradleVersionRequired.AtLeast("4.9") val projects = listOf( - Project("simpleProject", gradleVersionRequirement), - Project("kotlin2JsNoOutputFileProject", gradleVersionRequirement), - Project("sample-app", gradleVersionRequirement, "new-mpp-lib-and-app") + Project("simpleProject"), + Project("kotlin2JsNoOutputFileProject"), + Project("sample-app", directoryPrefix = "new-mpp-lib-and-app") ) projects.forEach { @@ -925,7 +924,7 @@ class KotlinGradleIT : BaseGradleIT() { @Test fun testUserDefinedAttributesInSinglePlatformProject() = - with(Project("multiprojectWithDependency", GradleVersionRequired.AtLeast("4.7"))) { + with(Project("multiprojectWithDependency")) { setupWorkingDir() gradleBuildScript("projA").appendText( "\n" + """ diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt index 9d84829bc8c..3b919534c32 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt @@ -52,7 +52,7 @@ fun configure(): NativeTargets { } class NewMultiplatformIT : BaseGradleIT() { - val gradleVersion = GradleVersionRequired.AtLeast("4.7") + val gradleVersion = GradleVersionRequired.None val nativeHostTargetName = configure().current val supportedNativeTargets = configure().supported @@ -70,17 +70,15 @@ class NewMultiplatformIT : BaseGradleIT() { @Test fun testLibAndAppWithGradleKotlinDsl() = doTestLibAndApp( "sample-lib-gradle-kotlin-dsl", - "sample-app-gradle-kotlin-dsl", - GradleVersionRequired.AtLeast("4.9") // earlier Gradle versions fail at accessors codegen + "sample-app-gradle-kotlin-dsl" ) private fun doTestLibAndApp( - libProjectName: String, appProjectName: String, - gradleVersionRequired: GradleVersionRequired = gradleVersion + libProjectName: String, appProjectName: String ) { - val libProject = transformProjectWithPluginsDsl(libProjectName, gradleVersionRequired, "new-mpp-lib-and-app") - val appProject = transformProjectWithPluginsDsl(appProjectName, gradleVersionRequired, "new-mpp-lib-and-app") - val oldStyleAppProject = Project("sample-old-style-app", gradleVersionRequired, "new-mpp-lib-and-app") + val libProject = transformProjectWithPluginsDsl(libProjectName, directoryPrefix = "new-mpp-lib-and-app") + val appProject = transformProjectWithPluginsDsl(appProjectName, directoryPrefix = "new-mpp-lib-and-app") + val oldStyleAppProject = Project("sample-old-style-app", directoryPrefix = "new-mpp-lib-and-app") val compileTasksNames = listOf("Jvm6", "NodeJs", "Metadata", "Wasm32", nativeHostTargetName.capitalize()).map { ":compileKotlin$it" } @@ -2017,7 +2015,7 @@ class NewMultiplatformIT : BaseGradleIT() { } @Test - fun testSuggestionToEnableMetadata() = with(Project("sample-lib", GradleVersionRequired.AtLeast("4.7"), "new-mpp-lib-and-app")) { + fun testSuggestionToEnableMetadata() = with(Project("sample-lib", directoryPrefix = "new-mpp-lib-and-app")) { build { assertNotContains(GRADLE_NO_METADATA_WARNING) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/VariantAwareDependenciesIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/VariantAwareDependenciesIT.kt index 9056204dd03..3f4cd264ebe 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/VariantAwareDependenciesIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/VariantAwareDependenciesIT.kt @@ -10,7 +10,7 @@ import org.jetbrains.kotlin.gradle.util.testResolveAllConfigurations import org.junit.Test class VariantAwareDependenciesIT : BaseGradleIT() { - private val gradleVersion = GradleVersionRequired.AtLeast("4.8") + private val gradleVersion = GradleVersionRequired.None @Test fun testJvmKtAppResolvesMppLib() { @@ -245,7 +245,7 @@ class VariantAwareDependenciesIT : BaseGradleIT() { @Test fun testJvmWithJavaProjectCanBeResolvedInAllConfigurations() = - with(Project("new-mpp-jvm-with-java-multi-module", GradleVersionRequired.AtLeast("4.7"))) { + with(Project("new-mpp-jvm-with-java-multi-module")) { testResolveAllConfigurations("app") } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/WorkersIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/WorkersIT.kt index bde1452436d..fdb32811326 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/WorkersIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/WorkersIT.kt @@ -19,7 +19,7 @@ class WorkersIT : BaseGradleIT() { } private fun parallelTasksImpl(isParallel: Boolean) = - with(Project("new-mpp-parallel", GradleVersionRequired.AtLeast("4.7"))) { + with(Project("new-mpp-parallel")) { val options = defaultBuildOptions().copy(parallelTasksInProject = isParallel, withDaemon = false) val traceLoading = "-Dorg.jetbrains.kotlin.compilerRunner.GradleKotlinCompilerWork.trace.loading=true" build("assemble", traceLoading, options = options) { diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/model/KotlinAndroidExtensionIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/model/KotlinAndroidExtensionIT.kt index a43ae531af8..1c3060e3aa0 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/model/KotlinAndroidExtensionIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/model/KotlinAndroidExtensionIT.kt @@ -17,7 +17,7 @@ import kotlin.test.assertTrue class KotlinAndroidExtensionIT : BaseGradleIT() { override val defaultGradleVersion: GradleVersionRequired - get() = GradleVersionRequired.AtLeast("4.4") + get() = GradleVersionRequired.None override fun defaultBuildOptions(): BuildOptions { return super.defaultBuildOptions().copy( diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/model/KotlinProjectIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/model/KotlinProjectIT.kt index b596ab8f54c..5d9598a9d11 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/model/KotlinProjectIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/model/KotlinProjectIT.kt @@ -17,7 +17,7 @@ import kotlin.test.assertTrue class KotlinProjectIT : BaseGradleIT() { override val defaultGradleVersion: GradleVersionRequired - get() = GradleVersionRequired.AtLeast("4.4") + get() = GradleVersionRequired.None override fun defaultBuildOptions(): BuildOptions { return super.defaultBuildOptions().copy( diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformExtension.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformExtension.kt index 12f334f5676..4a3aff4ca94 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformExtension.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformExtension.kt @@ -47,11 +47,7 @@ open class KotlinMultiplatformExtension : KotlinProjectExtension(), KotlinTarget fun targetFromPreset(preset: KotlinTargetPreset<*>, configure: Closure<*>) = targetFromPreset(preset, preset.name, configure) internal val rootSoftwareComponent: KotlinSoftwareComponent by lazy { - if (isGradleVersionAtLeast(4, 7)) { - KotlinSoftwareComponentWithCoordinatesAndPublication("kotlin", targets) - } else { - KotlinSoftwareComponent("kotlin", targets) - } + KotlinSoftwareComponentWithCoordinatesAndPublication("kotlin", targets) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt index 2e85752949f..0727c644899 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt @@ -31,7 +31,6 @@ import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.tasks.CompilerPluginOptions import org.jetbrains.kotlin.gradle.tasks.KotlinCompileTaskData import org.jetbrains.kotlin.gradle.tasks.KotlinCompile -import org.jetbrains.kotlin.gradle.tasks.isWorkerAPISupported import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast import java.io.ByteArrayOutputStream import java.io.File @@ -121,7 +120,7 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin { } fun Project.isUseWorkerApi(): Boolean { - return isWorkerAPISupported() && hasProperty(USE_WORKER_API) && property(USE_WORKER_API) == "true" + return hasProperty(USE_WORKER_API) && property(USE_WORKER_API) == "true" } fun Project.isIncrementalKapt(): Boolean { @@ -302,12 +301,9 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin { val androidOptions = kaptVariantData?.annotationProcessorOptions ?: emptyMap() val apOptionsFromProviders = - if (isGradleVersionAtLeast(4, 6)) - kaptVariantData?.annotationProcessorOptionProviders - ?.flatMap { (it as CommandLineArgumentProvider).asArguments() } - .orEmpty() - else - emptyList() + kaptVariantData?.annotationProcessorOptionProviders + ?.flatMap { (it as CommandLineArgumentProvider).asArguments() } + .orEmpty() val subluginOptionsFromProvidedApOptions = apOptionsFromProviders.map { // Use the internal subplugin option type to exclude them from Gradle input/output checks, as their providers are already @@ -394,11 +390,7 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin { kaptTask.isIncremental = project.isIncrementalKapt() if (kaptTask.isIncremental) { kaptTask.incAptCache = getKaptIncrementalAnnotationProcessingCache() - if (isGradleVersionAtLeast(4, 3)) { - kaptTask.localState.register(kaptTask.incAptCache) - } else { - kaptTask.outputs.files(kaptTask.incAptCache).withPropertyName("incrementalAptCache") - } + kaptTask.localState.register(kaptTask.incAptCache) maybeRegisterTransform(project) val classStructure = project.configurations.create("_classStructure${taskName}") @@ -522,13 +514,11 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin { @Suppress("UNCHECKED_CAST") options.compilerArgs = newCompilerArgs as List - if (isGradleVersionAtLeast(4, 6)) { - // Filter out the argument providers that are related to annotation processing and therefore already used by Kapt. - // This is done to avoid outputs intersections between Kapt and and javaCompile and make the up-to-date check for - // javaCompile more granular as it does not perform annotation processing: - if (kaptVariantData != null) { - options.compilerArgumentProviders.removeAll(kaptVariantData.annotationProcessorOptionProviders) - } + // Filter out the argument providers that are related to annotation processing and therefore already used by Kapt. + // This is done to avoid outputs intersections between Kapt and and javaCompile and make the up-to-date check for + // javaCompile more granular as it does not perform annotation processing: + if (kaptVariantData != null) { + options.compilerArgumentProviders.removeAll(kaptVariantData.annotationProcessorOptionProviders) } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptTask.kt index e12dc262e31..baa641e14a5 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptTask.kt @@ -14,7 +14,6 @@ import org.jetbrains.kotlin.gradle.internal.tasks.TaskWithLocalState import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jetbrains.kotlin.gradle.tasks.cacheOnlyIfEnabledForKotlin import org.jetbrains.kotlin.gradle.tasks.clearLocalState -import org.jetbrains.kotlin.gradle.tasks.isBuildCacheSupported import org.jetbrains.kotlin.gradle.utils.isJavaFile import java.io.File import java.util.jar.JarFile @@ -24,10 +23,8 @@ abstract class KaptTask : ConventionTask(), TaskWithLocalState { init { cacheOnlyIfEnabledForKotlin() - if (isBuildCacheSupported()) { - val reason = "Caching is disabled for kapt with 'kapt.useBuildCache'" - outputs.cacheIf(reason) { useBuildCache } - } + val reason = "Caching is disabled for kapt with 'kapt.useBuildCache'" + outputs.cacheIf(reason) { useBuildCache } } override fun localStateDirectories(): FileCollection = project.files() diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt index 884d707988c..9f8ae3b06d4 100755 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt @@ -22,10 +22,7 @@ import org.gradle.api.plugins.JavaPluginConvention import org.gradle.api.plugins.MavenPluginConvention import org.gradle.api.publish.PublishingExtension import org.gradle.api.publish.maven.MavenPublication -import org.gradle.api.tasks.CompileClasspathNormalizer -import org.gradle.api.tasks.Delete -import org.gradle.api.tasks.SourceSet -import org.gradle.api.tasks.Upload +import org.gradle.api.tasks.* import org.gradle.api.tasks.compile.AbstractCompile import org.gradle.api.tasks.compile.JavaCompile import org.gradle.jvm.tasks.Jar @@ -65,7 +62,7 @@ internal abstract class KotlinSourceSetProcessor>( protected val sourceSetName: String = kotlinCompilation.compilationName - protected val kotlinTask: TaskHolder = registerKotlinCompileTask() + protected val kotlinTask: TaskProvider = registerKotlinCompileTask() protected val javaSourceSet: SourceSet? = (kotlinCompilation as? KotlinWithJavaCompilation<*>)?.javaSourceSet @@ -80,7 +77,7 @@ internal abstract class KotlinSourceSetProcessor>( return File(project.buildDir, "classes/kotlin/$targetSubDirectory${kotlinCompilation.compilationName}") } - private fun registerKotlinCompileTask(): TaskHolder { + private fun registerKotlinCompileTask(): TaskProvider { val name = kotlinCompilation.compileKotlinTaskName logger.kotlinDebug("Creating kotlin compile task $name") @@ -91,7 +88,7 @@ internal abstract class KotlinSourceSetProcessor>( return doRegisterTask(project, name) { it.description = taskDescription it.mapClasspath { kotlinCompilation.compileDependencyFiles } - kotlinCompilation.output.addClassesDir { project.files(kotlinTask.doGetTask().destinationDir).builtBy(kotlinTask.doGetTask()) } + kotlinCompilation.output.addClassesDir { project.files(kotlinTask.get().destinationDir).builtBy(kotlinTask.get()) } } } @@ -142,24 +139,20 @@ internal abstract class KotlinSourceSetProcessor>( val expectedClassesTaskName = "${kotlinCompilation.defaultSourceSetName}Classes" project.tasks.run { var shouldCreateTask = false - if (useLazyTaskConfiguration) { - try { - named(expectedClassesTaskName) - } catch (e: Exception) { - shouldCreateTask = true - } - } else { - shouldCreateTask = findByName(expectedClassesTaskName) == null + try { + named(expectedClassesTaskName) + } catch (e: UnknownDomainObjectException) { + shouldCreateTask = true } if (shouldCreateTask) { - registerTask(project, expectedClassesTaskName, IDEClassesTask::class.java) { + project.createOrRegisterTask(expectedClassesTaskName, IDEClassesTask::class.java) { it.dependsOn(getByName(kotlinCompilation.compileAllTaskName)) } } } } - protected abstract fun doRegisterTask(project: Project, taskName: String, configureAction: (T) -> (Unit)): TaskHolder + protected abstract fun doRegisterTask(project: Project, taskName: String, configureAction: (T) -> (Unit)): TaskProvider } internal class Kotlin2JvmSourceSetProcessor( @@ -170,7 +163,11 @@ internal class Kotlin2JvmSourceSetProcessor( ) : KotlinSourceSetProcessor( project, tasksProvider, "Compiles the $kotlinCompilation.", kotlinCompilation ) { - override fun doRegisterTask(project: Project, taskName: String, configureAction: (KotlinCompile)->(Unit)): TaskHolder = + override fun doRegisterTask( + project: Project, + taskName: String, + configureAction: (KotlinCompile) -> (Unit) + ): TaskProvider = tasksProvider.registerKotlinJVMTask(project, taskName, kotlinCompilation, configureAction) override fun doTargetSpecificProcessing() { @@ -181,7 +178,7 @@ internal class Kotlin2JvmSourceSetProcessor( ScriptingGradleSubplugin.configureForSourceSet(project, kotlinCompilation.compilationName) project.runOnceAfterEvaluated("Kotlin2JvmSourceSetProcessor.doTargetSpecificProcessing", kotlinTask) { - val kotlinTaskInstance = kotlinTask.doGetTask() + val kotlinTaskInstance = kotlinTask.get() val javaTask = javaSourceSet?.let { project.tasks.findByName(it.compileJavaTaskName) as JavaCompile } val subpluginEnvironment = SubpluginEnvironment.loadSubplugins(project, kotlinPluginVersion) @@ -249,11 +246,13 @@ internal class Kotlin2JsSourceSetProcessor( project: Project, taskName: String, configureAction: (Kotlin2JsCompile) -> (Unit) - ): TaskHolder = + ): TaskProvider = tasksProvider.registerKotlinJSTask(project, taskName, kotlinCompilation, configureAction) override fun doTargetSpecificProcessing() { - project.tasks.findByName(kotlinCompilation.compileAllTaskName)!!.dependsOn(kotlinTask.getTaskOrProvider()) + project.tasks.named(kotlinCompilation.compileAllTaskName).configure { + it.dependsOn(kotlinTask) + } registerCleanSourceMapTask() @@ -263,7 +262,7 @@ internal class Kotlin2JsSourceSetProcessor( // outputFile can be set later during the configuration phase, get it only after the phase: project.runOnceAfterEvaluated("Kotlin2JsSourceSetProcessor.doTargetSpecificProcessing", kotlinTask) { - val kotlinTaskInstance = kotlinTask.doGetTask() + val kotlinTaskInstance = kotlinTask.get() kotlinTaskInstance.kotlinOptions.outputFile = kotlinTaskInstance.outputFile.absolutePath val outputDir = kotlinTaskInstance.outputFile.parentFile @@ -291,9 +290,9 @@ internal class Kotlin2JsSourceSetProcessor( private fun registerCleanSourceMapTask() { val taskName = kotlinCompilation.composeName("clean", "sourceMap") registerTask(project, taskName, Delete::class.java) { - it.onlyIf { kotlinTask.doGetTask().kotlinOptions.sourceMap } + it.onlyIf { kotlinTask.get().kotlinOptions.sourceMap } it.delete(object : Closure(this) { - override fun call(): String? = (kotlinTask.doGetTask().property("outputFile") as File).canonicalPath + ".map" + override fun call(): String? = (kotlinTask.get().property("outputFile") as File).canonicalPath + ".map" }) } project.tasks.findByName("clean")?.dependsOn(taskName) @@ -310,14 +309,14 @@ internal class KotlinCommonSourceSetProcessor( kotlinCompilation = compilation ) { override fun doTargetSpecificProcessing() { - project.tasks.findByName(kotlinCompilation.compileAllTaskName)!!.dependsOn(kotlinTask.getTaskOrProvider()) + project.tasks.findByName(kotlinCompilation.compileAllTaskName)!!.dependsOn(kotlinTask) // can be missing (e.g. in case of tests) if (kotlinCompilation.compilationName == KotlinCompilation.MAIN_COMPILATION_NAME) { - project.tasks.findByName(kotlinCompilation.target.artifactsTaskName)?.dependsOn(kotlinTask.getTaskOrProvider()) + project.tasks.findByName(kotlinCompilation.target.artifactsTaskName)?.dependsOn(kotlinTask) } project.runOnceAfterEvaluated("KotlinCommonSourceSetProcessor.doTargetSpecificProcessing", kotlinTask) { - val kotlinTaskInstance = kotlinTask.doGetTask() + val kotlinTaskInstance = kotlinTask.get() val subpluginEnvironment: SubpluginEnvironment = SubpluginEnvironment.loadSubplugins(project, kotlinPluginVersion) val appliedPlugins = subpluginEnvironment.addSubpluginOptions( project, kotlinTaskInstance, null, null, null, kotlinCompilation @@ -329,7 +328,11 @@ internal class KotlinCommonSourceSetProcessor( } // protected abstract fun doRegisterTask(project: Project, taskName: String, configureAction: (T) -> (Unit)): TaskHolder - override fun doRegisterTask(project: Project, taskName: String, configureAction: (KotlinCompileCommon) -> (Unit)): TaskHolder = + override fun doRegisterTask( + project: Project, + taskName: String, + configureAction: (KotlinCompileCommon) -> (Unit) + ): TaskProvider = tasksProvider.registerKotlinCommonTask(project, taskName, kotlinCompilation, configureAction) } @@ -430,7 +433,7 @@ internal abstract class AbstractKotlinPlugin( it.jarTask = jarTask it.dependsOn(classesTask) } - jarTask.dependsOn(inspectTask.getTaskOrProvider()) + jarTask.dependsOn(inspectTask) } internal fun setUpJavaSourceSets( @@ -532,30 +535,21 @@ internal abstract class AbstractKotlinPlugin( internal fun configureDefaultVersionsResolutionStrategy(project: Project, kotlinPluginVersion: String) { project.configurations.all { configuration -> - if (isGradleVersionAtLeast(4, 4)) { - fun MutableVersionConstraint.chooseVersion(version: String) { - if (isGradleVersionAtLeast(5, 0)) { - // In Gradle 5.0, the semantics of 'prefer' has changed to be much less imperative, and now it's 'require' that we need: - val requireMethod = javaClass.getMethod("require", String::class.java) - requireMethod(this, version) - } else { - prefer(version) - } + fun MutableVersionConstraint.chooseVersion(version: String) { + if (isGradleVersionAtLeast(5, 0)) { + // In Gradle 5.0, the semantics of 'prefer' has changed to be much less imperative, and now it's 'require' that we need: + val requireMethod = javaClass.getMethod("require", String::class.java) + requireMethod(this, version) + } else { + prefer(version) } + } - // Use the API introduced in Gradle 4.4 to modify the dependencies directly before they are resolved: - configuration.withDependencies { dependencySet -> - dependencySet.filterIsInstance() - .filter { it.group == "org.jetbrains.kotlin" && it.version.isNullOrEmpty() } - .forEach { it.version { constraint -> constraint.chooseVersion(kotlinPluginVersion) } } - } - } else { - configuration.resolutionStrategy.eachDependency { details -> - val requested = details.requested - if (requested.group == "org.jetbrains.kotlin" && requested.version.isNullOrEmpty()) { - details.useVersion(kotlinPluginVersion) - } - } + // Use the API introduced in Gradle 4.4 to modify the dependencies directly before they are resolved: + configuration.withDependencies { dependencySet -> + dependencySet.filterIsInstance() + .filter { it.group == "org.jetbrains.kotlin" && it.version.isNullOrEmpty() } + .forEach { it.version { constraint -> constraint.chooseVersion(kotlinPluginVersion) } } } } } @@ -995,13 +989,9 @@ internal fun configureJavaTask(kotlinTask: KotlinCompile, javaTask: AbstractComp // Make Gradle check if the javaTask is up-to-date based on the Kotlin classes javaTask.inputsCompatible.run { - if (isBuildCacheSupported()) { - dir(kotlinTask.destinationDir) - .withNormalizer(CompileClasspathNormalizer::class.java) - .withPropertyName("${kotlinTask.name}OutputClasses") - } else { - dirCompatible(kotlinTask.destinationDir) - } + dir(kotlinTask.destinationDir) + .withNormalizer(CompileClasspathNormalizer::class.java) + .withPropertyName("${kotlinTask.name}OutputClasses") } // Also, use kapt1 annotations file for up-to-date check since annotation processing is done with javac javaTask.dependsOn(kotlinTask) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/LegacyTaskHolder.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/LegacyTaskHolder.kt deleted file mode 100644 index 1418e72d0de..00000000000 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/LegacyTaskHolder.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2010-2019 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.plugin - -import org.gradle.api.Project -import org.gradle.api.Task - -class LegacyTaskHolder(private val task: T) : TaskHolder { - override val project: Project - get() = task.project - - override val name: String - get() = task.name - - override fun doGetTask() = task - - override fun getTaskOrProvider(): Any = task - - override fun configure(action: (T) -> (Unit)) { - with(task, action) - } - - override fun toString(): String { - return "TaskHolder instance: [className: ${javaClass.name}, task name: '${doGetTask().name}']" - } -} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/RunOnceAfterEvaluated.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/RunOnceAfterEvaluated.kt index c8c0a2ddbbf..cd92b89a3ce 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/RunOnceAfterEvaluated.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/RunOnceAfterEvaluated.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.gradle.plugin import org.gradle.api.Project import org.gradle.api.logging.Logging +import org.gradle.api.tasks.TaskProvider /** * This class encapsulated logic which should be invoked during not before the script evaluation is ready and @@ -44,12 +45,12 @@ internal class RunOnceAfterEvaluated(private val name: String, private val actio } } -internal fun Project.runOnceAfterEvaluated(name: String, task: TaskHolder<*>, action: () -> (Unit)) { +internal fun Project.runOnceAfterEvaluated(name: String, task: TaskProvider<*>, action: () -> (Unit)) { val runOnce = RunOnceAfterEvaluated(name, action) runOnceAfterEvaluated(runOnce, task) } -internal fun Project.runOnceAfterEvaluated(runOnce: RunOnceAfterEvaluated, task: TaskHolder<*>) { +internal fun Project.runOnceAfterEvaluated(runOnce: RunOnceAfterEvaluated, task: TaskProvider<*>) { if (state.executed) { runOnce.onEvaluated() } else { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/TaskHolder.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/TaskHolder.kt deleted file mode 100644 index c1fcb0e312d..00000000000 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/TaskHolder.kt +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2010-2018 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.gradle.plugin - -import org.gradle.api.Task -import org.gradle.api.Project - - -/** - * Reference to a org.gradle.api.Task or org.gradle.api.TaskProvider necessary in order to support flexible creation of tasks. - * For gradle versions < 4.9 tasks are created meanwhile for gradle with version >= 4.9 tasks are registered - */ -interface TaskHolder { - val project: Project - val name: String - - /** - * Returns Task itself if task was created or TaskProvider if task was registered. - */ - fun getTaskOrProvider(): Any - - /** - * Returns instance of task. If task created using lazy api, it will be instantiated - */ - fun doGetTask(): T - - - /** - * Invokes task configuration. If task was registered the configuration action is added but not invoked - */ - fun configure(action: (T) -> (Unit)) -} diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/TaskProviderHolder.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/TaskProviderHolder.kt deleted file mode 100644 index 04816d4254b..00000000000 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/TaskProviderHolder.kt +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2010-2018 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.gradle.plugin - -import org.gradle.api.Project -import org.gradle.api.Task -import org.gradle.api.tasks.TaskProvider - -class TaskProviderHolder( - override val name: String, - override val project: Project, - private val provider: TaskProvider -) : TaskHolder { - override fun getTaskOrProvider(): Any = provider - - override fun doGetTask(): T = provider.get() - - override fun configure(action: (T) -> (Unit)) { - provider.configure(action) - } - - override fun toString(): String { - return "TaskProviderHolder instance: [className: ${javaClass.name}, task name: '$name']" - } -} diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt index 1401a84b06f..d2c7a216938 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt @@ -161,10 +161,6 @@ class KotlinMultiplatformPlugin( SingleWarningPerBuild.show(project, GRADLE_NO_METADATA_WARNING) } - if (!isGradleVersionAtLeast(4, 8) && project.multiplatformExtension.isGradleMetadataAvailable) { - SingleWarningPerBuild.show(project, GRADLE_OLD_METADATA_WARNING) - } - val targets = project.multiplatformExtension.targets val kotlinSoftwareComponent = project.multiplatformExtension.rootSoftwareComponent @@ -178,7 +174,7 @@ class KotlinMultiplatformPlugin( } // Publish the root publication only if Gradle metadata publishing is enabled: - project.tasks.withType(AbstractPublishToMaven::class.java).all { publishTask -> + project.tasks.withType(AbstractPublishToMaven::class.java).configureEach { publishTask -> publishTask.onlyIf { publishTask.publication != rootPublication || project.multiplatformExtension.isGradleMetadataAvailable } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinSoftwareComponent.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinSoftwareComponent.kt index 5bf1818e3ec..ccb74a56ee7 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinSoftwareComponent.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinSoftwareComponent.kt @@ -21,7 +21,7 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.KotlinTarget import org.jetbrains.kotlin.gradle.plugin.ProjectLocalConfigurations -open class KotlinSoftwareComponent( +abstract class KotlinSoftwareComponent( private val name: String, protected val kotlinTargets: Iterable ) : SoftwareComponentInternal, ComponentWithVariants { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilations.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilations.kt index 082e54ac7c3..6f18c155208 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilations.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinCompilations.kt @@ -10,6 +10,7 @@ import org.gradle.api.Project import org.gradle.api.attributes.AttributeContainer import org.gradle.api.file.FileCollection import org.gradle.api.plugins.BasePluginConvention +import org.gradle.api.tasks.TaskProvider import org.gradle.util.ConfigureUtil import org.jetbrains.kotlin.gradle.dsl.* import org.jetbrains.kotlin.gradle.plugin.* @@ -47,7 +48,7 @@ abstract class AbstractKotlinCompilation( override val compileKotlinTask: KotlinCompile get() = (target.project.tasks.getByName(compileKotlinTaskName) as KotlinCompile) - val compileKotlinTaskHolder: TaskHolder> + val compileKotlinTaskHolder: TaskProvider> get() = target.project.locateTask(compileKotlinTaskName)!! // Don't declare this property in the constructor to avoid NPE diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargets.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargets.kt index ef7b30cc563..66504534b2d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargets.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargets.kt @@ -67,11 +67,7 @@ abstract class AbstractKotlinTarget( targetName else PRIMARY_SINGLE_COMPONENT_NAME - val result = if (isGradleVersionAtLeast(4, 7)) { - createKotlinVariant(componentName, mainCompilation, usageContexts) - } else { - KotlinVariant(mainCompilation, usageContexts) - } + val result = createKotlinVariant(componentName, mainCompilation, usageContexts) result.sourcesArtifacts = setOf( sourcesJarArtifact(mainCompilation, componentName, dashSeparatedName(targetName.toLowerCase())) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/DefaultLanguageSettingsBuilder.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/DefaultLanguageSettingsBuilder.kt index 5c6512c92bc..faa6d14599e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/DefaultLanguageSettingsBuilder.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/DefaultLanguageSettingsBuilder.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.gradle.plugin.sources import org.gradle.api.InvalidUserDataException import org.gradle.api.file.FileCollection +import org.gradle.api.tasks.TaskProvider import org.gradle.api.tasks.compile.AbstractCompile import org.jetbrains.kotlin.config.ApiVersion import org.jetbrains.kotlin.config.LanguageFeature diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/scripting/internal/ScriptingGradleSubplugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/scripting/internal/ScriptingGradleSubplugin.kt index 264767da86c..86a33c88eb0 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/scripting/internal/ScriptingGradleSubplugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/scripting/internal/ScriptingGradleSubplugin.kt @@ -22,7 +22,6 @@ import org.jetbrains.kotlin.gradle.internal.KaptGenerateStubsTask import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.scripting.ScriptingExtension import org.jetbrains.kotlin.gradle.tasks.KotlinCompile -import org.jetbrains.kotlin.gradle.tasks.useLazyTaskConfiguration import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast import org.jetbrains.kotlin.scripting.compiler.plugin.impl.reporter import org.jetbrains.kotlin.scripting.definitions.ScriptDefinitionsFromClasspathDiscoverySource @@ -81,11 +80,8 @@ class ScriptingGradleSubplugin : Plugin { } } } - if (useLazyTaskConfiguration) { - project.tasks.withType(KotlinCompile::class.java).configureEach(configureAction) - } else { - project.tasks.withType(KotlinCompile::class.java, configureAction) - } + + project.tasks.withType(KotlinCompile::class.java).configureEach(configureAction) } else { // TODO: implement support for discovery in MPP project: use KotlinSourceSet directly and do not rely on java convevtion sourcesets if (project.multiplatformExtensionOrNull == null) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/Android25ProjectHandler.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/Android25ProjectHandler.kt index 98af1ca1e4f..974bdf61d23 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/Android25ProjectHandler.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/Android25ProjectHandler.kt @@ -129,12 +129,12 @@ class Android25ProjectHandler( } // TODO the return type is actually `AbstractArchiveTask | TaskProvider`; - // change the signature once the Gradle versions that don't support task providers (< 4.8) are dropped + // change the signature once the Android Gradle plugin versions that don't support task providers are dropped override fun getLibraryOutputTask(variant: BaseVariant): Any? { val getPackageLibraryProvider = variant.javaClass.methods .find { it.name == "getPackageLibraryProvider" && it.parameterCount == 0 } - return if (getPackageLibraryProvider != null && isGradleVersionAtLeast(4, 8)) { + return if (getPackageLibraryProvider != null) { @Suppress("UNCHECKED_CAST") getPackageLibraryProvider(variant) as TaskProvider } else { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/KotlinAndroidTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/KotlinAndroidTarget.kt index 1212715a71a..275872d9bd5 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/KotlinAndroidTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/KotlinAndroidTarget.kt @@ -94,9 +94,6 @@ open class KotlinAndroidTarget( // Capture the type parameter T for `AbstractAndroidProjectHandler` private fun AbstractAndroidProjectHandler.doCreateComponents(): Set { - if (!isGradleVersionAtLeast(4, 7)) - return emptySet() - val publishableVariants = mutableListOf() .apply { forEachVariant(project) { add(it) } } .toList() // Defensive copy against unlikely modification by the lambda that captures the list above in forEachVariant { } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt index 3f88cf35168..aa371623086 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.gradle.targets.js import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.Project +import org.gradle.api.tasks.TaskProvider import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.AbstractKotlinTargetConfigurator.Companion.runTaskNameSuffix import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation @@ -30,7 +31,7 @@ class KotlinJsTarget(project: Project, platformType: KotlinPlatformType) : internal set val testTaskName get() = testRuns.getByName(KotlinTargetWithTests.DEFAULT_TEST_RUN_NAME).testTaskName - val testTask: TaskHolder + val testTask: TaskProvider get() = checkNotNull(project.locateTask(testTaskName)) val runTaskName get() = lowerCamelCaseName(disambiguationClassifier, runTaskNameSuffix) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetConfigurator.kt index c69e009da77..e9f587dec0e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetConfigurator.kt @@ -40,8 +40,7 @@ open class KotlinJsTargetConfigurator(kotlinPluginVersion: String) : } } - @Suppress("UNCHECKED_CAST") - result.executionTask = testTask.getTaskOrProvider() as TaskProvider + result.executionTask = testTask return result } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatCompilationResolverPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatCompilationResolverPlugin.kt index 0de4b92f846..42867784539 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatCompilationResolverPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatCompilationResolverPlugin.kt @@ -32,7 +32,7 @@ internal class DukatCompilationResolverPlugin( it.dependsOn(nodeJs.npmInstallTask, npmProject.packageJsonTask) } - compilation.compileKotlinTask.dependsOn(task.getTaskOrProvider()) + compilation.compileKotlinTask.dependsOn(task) } override fun hookDependencies( diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsExec.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsExec.kt index 253cad66edc..f7c9991de62 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsExec.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsExec.kt @@ -8,7 +8,7 @@ package org.jetbrains.kotlin.gradle.targets.js.nodejs import org.gradle.api.tasks.AbstractExecTask import org.gradle.api.tasks.Input import org.gradle.api.tasks.Internal -import org.jetbrains.kotlin.gradle.plugin.TaskHolder +import org.gradle.api.tasks.TaskProvider import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.targets.js.RequiredKotlinJsDependency import org.jetbrains.kotlin.gradle.targets.js.npm.RequiresNpmDependencies @@ -53,7 +53,7 @@ open class NodeJsExec : AbstractExecTask(NodeJsExec::class.java), Re compilation: KotlinJsCompilation, name: String, configuration: NodeJsExec.() -> Unit = {} - ): TaskHolder { + ): TaskProvider { val target = compilation.target val project = target.project val nodeJs = NodeJsRootPlugin.apply(project.rootProject) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt index 7032c1746d3..b1f6969a48c 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt @@ -74,7 +74,7 @@ internal class KotlinCompilationNpmResolver( @Synchronized fun getResolutionOrResolveIfForced(): KotlinCompilationNpmResolution? { if (resolution != null) return resolution - if (packageJsonTaskHolder.doGetTask().state.upToDate) return resolve(skipWriting = true) + if (packageJsonTaskHolder.get().state.upToDate) return resolve(skipWriting = true) if (resolver.forceFullResolve && resolution == null) return resolve() return null } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinProjectNpmResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinProjectNpmResolver.kt index d3d5465a23c..80c3ee32961 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinProjectNpmResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinProjectNpmResolver.kt @@ -105,7 +105,7 @@ internal class KotlinProjectNpmResolver( projectNpmResolver.project.tasks.forEach { task -> if (task.enabled && task is RequiresNpmDependencies) { addTaskRequirements(task) - task.dependsOn(projectNpmResolver[task.compilation].packageJsonTaskHolder.getTaskOrProvider()) + task.dependsOn(projectNpmResolver[task.compilation].packageJsonTaskHolder) task.dependsOn(projectNpmResolver.resolver.nodeJs.npmInstallTask) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinPackageJsonTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinPackageJsonTask.kt index 79b8f34e5ff..f1db85cc390 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinPackageJsonTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinPackageJsonTask.kt @@ -7,11 +7,7 @@ package org.jetbrains.kotlin.gradle.targets.js.npm.tasks import org.gradle.api.DefaultTask import org.gradle.api.plugins.BasePlugin -import org.gradle.api.tasks.Input -import org.gradle.api.tasks.Nested -import org.gradle.api.tasks.OutputFile -import org.gradle.api.tasks.TaskAction -import org.jetbrains.kotlin.gradle.plugin.TaskHolder +import org.gradle.api.tasks.* import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin @@ -49,7 +45,7 @@ open class KotlinPackageJsonTask : DefaultTask() { } companion object { - fun create(compilation: KotlinJsCompilation): TaskHolder { + fun create(compilation: KotlinJsCompilation): TaskProvider { val target = compilation.target val project = target.project val npmProject = compilation.npmProject @@ -68,11 +64,11 @@ open class KotlinPackageJsonTask : DefaultTask() { task.mustRunAfter(rootClean) } - npmInstallTask.mustRunAfter(rootClean, packageJsonTask.getTaskOrProvider()) + npmInstallTask.mustRunAfter(rootClean, packageJsonTask) compilation.compileKotlinTask.dependsOn( npmInstallTask, - packageJsonTask.getTaskOrProvider() + packageJsonTask ) return packageJsonTask diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt index 654a4ae69fc..805d4b1aed9 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt @@ -75,6 +75,6 @@ class KotlinBrowserJs(target: KotlinJsTarget) : it.outputs.upToDateWhen { false } } - target.runTask.dependsOn(run.getTaskOrProvider()) + target.runTask.dependsOn(run) } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinJsSubTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinJsSubTarget.kt index 4722c8b13f1..e43f8085833 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinJsSubTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinJsSubTarget.kt @@ -93,12 +93,13 @@ abstract class KotlinJsSubTarget( testJs.configureConventions() } - testRun.executionTask = testJs.getTaskOrProvider() as TaskProvider + testRun.executionTask = testJs target.testRuns.matching { it.name == testRun.name }.all { parentTestRun -> target.project.kotlinTestRegistry.registerTestTask( + project, testJs, - parentTestRun.executionTask.get() + parentTestRun.executionTask ) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinNodeJs.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinNodeJs.kt index 3b70565a1e2..828888e5f44 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinNodeJs.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinNodeJs.kt @@ -28,6 +28,6 @@ class KotlinNodeJs(target: KotlinJsTarget) : override fun configureRun(compilation: KotlinJsCompilation) { val runTaskHolder = NodeJsExec.create(compilation, disambiguateCamelCased("run")) - target.runTask.dependsOn(runTaskHolder.getTaskOrProvider()) + target.runTask.dependsOn(runTaskHolder) } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTargetConfigurator.kt index 09cfa5b4b2b..aa2a68a8eb0 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTargetConfigurator.kt @@ -33,7 +33,7 @@ class KotlinJvmTargetConfigurator(kotlinPluginVersion: String) : testTask.project.tasks.findByName(JavaBasePlugin.CHECK_TASK_NAME)?.dependsOn(testTask) } - executionTask = testTaskOrProvider.getTaskOrProvider() as TaskProvider + executionTask = testTaskOrProvider val testCompilation = target.compilations.getByName(KotlinCompilation.TEST_COMPILATION_NAME) @@ -47,7 +47,7 @@ class KotlinJvmTargetConfigurator(kotlinPluginVersion: String) : } } - target.project.kotlinTestRegistry.registerTestTask(testTaskOrProvider) + target.project.kotlinTestRegistry.registerTestTask(target.project, testTaskOrProvider) } override fun buildCompilationProcessor(compilation: KotlinJvmCompilation): KotlinSourceSetProcessor<*> { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt index 7026426a13b..3c3c9113945 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt @@ -11,6 +11,7 @@ import org.gradle.api.attributes.Usage import org.gradle.api.file.FileCollection import org.gradle.api.internal.component.SoftwareComponentInternal import org.gradle.api.plugins.BasePlugin +import org.gradle.api.tasks.TaskProvider import org.gradle.api.tasks.bundling.Jar import org.jetbrains.kotlin.gradle.dsl.KotlinCommonOptions import org.jetbrains.kotlin.gradle.dsl.kotlinExtension @@ -132,7 +133,7 @@ class KotlinMetadataTargetConfigurator(kotlinPluginVersion: String) : } sourceSetsWithMetadataCompilations.forEach { (sourceSet, metadataCompilation) -> - val compileMetadataTransformationTasksForHierarchy = mutableSetOf>() + val compileMetadataTransformationTasksForHierarchy = mutableSetOf>() // Adjust metadata compilation to support source set hierarchies, i.e. use both the outputs of dependsOn source set compilation // and their dependencies metadata transformed for compilation: @@ -156,8 +157,8 @@ class KotlinMetadataTargetConfigurator(kotlinPluginVersion: String) : val generateMetadata = createGenerateProjectStructureMetadataTask() allMetadataJar.from(project.files(Callable { - generateMetadata.doGetTask().resultXmlFile - }).builtBy(generateMetadata.getTaskOrProvider())) { spec -> + generateMetadata.get().resultXmlFile + }).builtBy(generateMetadata)) { spec -> spec.into("META-INF").rename { MULTIPLATFORM_PROJECT_METADATA_FILE_NAME } } } @@ -286,13 +287,13 @@ class KotlinMetadataTargetConfigurator(kotlinPluginVersion: String) : private fun createTransformedMetadataClasspath( fromFiles: Iterable, project: Project, - transformationTaskHolders: Set> + transformationTaskHolders: Set> ): FileCollection { return project.files(Callable { val allResolutionsByArtifactFile: Map> = mutableMapOf>().apply { transformationTaskHolders.forEach { - val resolutions = it.doGetTask().metadataDependencyResolutions + val resolutions = it.get().metadataDependencyResolutions resolutions.forEach { resolution -> val artifacts = resolution.dependency.moduleArtifacts.map { it.file } @@ -305,7 +306,7 @@ class KotlinMetadataTargetConfigurator(kotlinPluginVersion: String) : } val transformedFilesByResolution: Map = - transformationTaskHolders.flatMap { it.doGetTask().filesByResolution.toList() }.toMap() + transformationTaskHolders.flatMap { it.get().filesByResolution.toList() }.toMap() mutableSetOf().apply { fromFiles.forEach { file -> @@ -324,7 +325,7 @@ class KotlinMetadataTargetConfigurator(kotlinPluginVersion: String) : } } } - }).builtBy(transformationTaskHolders.map { it.getTaskOrProvider() }) + }).builtBy(transformationTaskHolders) } private fun getPublishedCommonSourceSets(project: Project): Set { @@ -346,7 +347,7 @@ class KotlinMetadataTargetConfigurator(kotlinPluginVersion: String) : .keys } - private fun Project.createGenerateProjectStructureMetadataTask(): TaskHolder = + private fun Project.createGenerateProjectStructureMetadataTask(): TaskProvider = project.createOrRegisterTask("generateProjectStructureMetadata") { task -> task.lazyKotlinProjectStructureMetadata = lazy { checkNotNull(buildKotlinProjectStructureMetadata(project)) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetPreset.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetPreset.kt index 47a6188f0e7..9bdf65bfaa6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetPreset.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetPreset.kt @@ -9,10 +9,7 @@ package org.jetbrains.kotlin.gradle.plugin.mpp import org.gradle.api.Project import org.jetbrains.kotlin.gradle.dsl.KotlinCompile import org.jetbrains.kotlin.gradle.dsl.kotlinExtension -import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation -import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType -import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet -import org.jetbrains.kotlin.gradle.plugin.KotlinOnlyTargetConfigurator +import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.sources.applyLanguageSettingsToKotlinTask import org.jetbrains.kotlin.gradle.targets.metadata.KotlinMetadataTargetConfigurator @@ -49,9 +46,9 @@ class KotlinMetadataTargetPreset( mainCompilation.source(commonMainSourceSet) - project.afterEvaluate { + project.whenEvaluated { // Since there's no default source set, apply language settings from commonMain: - val compileKotlinMetadata = project.tasks.getByName(mainCompilation.compileKotlinTaskName) as KotlinCompile<*> + val compileKotlinMetadata = mainCompilation.compileKotlinTask applyLanguageSettingsToKotlinTask(commonMainSourceSet.languageSettings, compileKotlinMetadata) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTarget.kt index e99ed56d9c2..5b0481147d3 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTarget.kt @@ -29,12 +29,9 @@ open class KotlinNativeTarget( attributes.attribute(konanTargetAttribute, konanTarget.name) } - val binaries = if(isGradleVersionAtLeast(4, 2)) { + val binaries = // Use newInstance to allow accessing binaries by their names in Groovy using the extension mechanism. project.objects.newInstance(KotlinNativeBinaryContainer::class.java, this, WrapUtil.toDomainObjectSet(NativeBinary::class.java)) - } else { - KotlinNativeBinaryContainer(this, WrapUtil.toDomainObjectSet(NativeBinary::class.java)) - } fun binaries(configure: KotlinNativeBinaryContainer.() -> Unit) { binaries.configure() diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt index 431f4c4e2aa..8cf6b233c70 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTargetConfigurator.kt @@ -412,11 +412,10 @@ class KotlinNativeTargetWithTestsConfigurator(kotlinPluginVersion: String) testTask.configureConventions() } - @Suppress("UNCHECKED_CAST") - executionTask = testTaskOrProvider.getTaskOrProvider() as TaskProvider + executionTask = testTaskOrProvider setExecutionSourceFrom(target.binaries.getTest(NativeBuildType.DEBUG)) - project.kotlinTestRegistry.registerTestTask(testTaskOrProvider) + project.kotlinTestRegistry.registerTestTask(project, testTaskOrProvider) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/CacheableTasks.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/CacheableTasks.kt index f1f61f65313..1438c117604 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/CacheableTasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/CacheableTasks.kt @@ -20,24 +20,11 @@ import org.gradle.api.Task import org.gradle.util.GradleVersion import org.jetbrains.kotlin.gradle.utils.outputsCompatible -internal fun isBuildCacheSupported(): Boolean = - gradleVersion >= GradleVersion.version("4.3") - -internal fun isWorkerAPISupported(): Boolean = - gradleVersion >= GradleVersion.version("4.3") - internal fun isBuildCacheEnabledForKotlin(): Boolean = - isBuildCacheSupported() && - System.getProperty(KOTLIN_CACHING_ENABLED_PROPERTY)?.toBoolean() ?: true + System.getProperty(KOTLIN_CACHING_ENABLED_PROPERTY)?.toBoolean() ?: true internal fun T.cacheOnlyIfEnabledForKotlin() { - // The `cacheIf` method may be missing if the Gradle version is too low: - try { - outputsCompatible.cacheIf { isBuildCacheEnabledForKotlin() } - } catch (_: NoSuchMethodError) { - } + outputsCompatible.cacheIf { isBuildCacheEnabledForKotlin() } } -private val gradleVersion = GradleVersion.current() - private const val KOTLIN_CACHING_ENABLED_PROPERTY = "kotlin.caching.enabled" diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/TasksProvider.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/TasksProvider.kt index 9e50c6e8568..6ad69e3e0f3 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/TasksProvider.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/TasksProvider.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.gradle.tasks import org.gradle.api.Project import org.gradle.api.Task import org.gradle.api.UnknownTaskException +import org.gradle.api.tasks.TaskProvider import org.jetbrains.kotlin.gradle.dsl.kotlinExtension import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.mpp.AbstractKotlinCompilation @@ -26,73 +27,46 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.defaultSourceSetName import org.jetbrains.kotlin.gradle.plugin.sources.applyLanguageSettingsToKotlinTask import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast -internal val useLazyTaskConfiguration = org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast(4, 9) -internal val canLocateTask = org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast(5, 0) - /** * Registers the task with [name] and [type] and initialization script [body] - * If Gradle with version <4.9 is used the task will be created */ @JvmName("registerTaskOld") @Deprecated("please use Project.createOrRegisterTask", ReplaceWith("project.createOrRegisterTask(name, body)")) -internal fun registerTask(project: Project, name: String, type: Class, body: (T) -> (Unit)): TaskHolder = +internal fun registerTask(project: Project, name: String, type: Class, body: (T) -> (Unit)): TaskProvider = project.createOrRegisterTask(name, type, emptyList(), body) internal inline fun Project.createOrRegisterTask( name: String, args: List = emptyList(), noinline body: (T) -> (Unit) -): TaskHolder = +): TaskProvider = createOrRegisterTask(name, T::class.java, args, body) internal fun Project.createOrRegisterTask( name: String, type: Class, - constructorArgs: List = emptyList(), // note: args are only allowed with Gradle 4.7+ + constructorArgs: List = emptyList(), body: (T) -> (Unit) -): TaskHolder { - return if (useLazyTaskConfiguration) { - val provider = project.tasks.register(name, type, *constructorArgs.toTypedArray()).apply { configure(body) } - TaskProviderHolder(name, project, provider) - } else { - val result = LegacyTaskHolder(if (constructorArgs.isEmpty()) { - project.tasks.create(name, type) - } else { - if (!isGradleVersionAtLeast(4, 7)) { - error("Cannot inject the arguments list into a task. This requires Gradle 4.7+.") - } - project.tasks.create(name, type, *constructorArgs.toTypedArray()) - }) - with(result.doGetTask(), body) - result - } +): TaskProvider { + return project.tasks.register(name, type, *constructorArgs.toTypedArray()).apply { configure(body) } } /** * Locates a task by [name] and [type], without triggering its creation or configuration. */ -internal inline fun Project.locateTask(name: String): TaskHolder? = - if (canLocateTask) { - try { - TaskProviderHolder(name, this, tasks.named(name, T::class.java)) - } catch (e: UnknownTaskException) { - null - } - } else { - tasks.findByName(name)?.let { - check(T::class.java.isInstance(it)) - - @Suppress("UNCHECKED_CAST") - LegacyTaskHolder(it as T) - } +internal inline fun Project.locateTask(name: String): TaskProvider? = + try { + tasks.withType(T::class.java).named(name) + } catch (e: UnknownTaskException) { + null } /** * Locates a task by [name] and [type], without triggering its creation or configuration or registers new task * with [name], type [T] and initialization script [body] */ -internal inline fun Project.locateOrRegisterTask(name: String, noinline body: (T) -> (Unit)): TaskHolder { +internal inline fun Project.locateOrRegisterTask(name: String, noinline body: (T) -> (Unit)): TaskProvider { return project.locateTask(name) ?: registerTask(project, name, T::class.java, body) } @@ -102,7 +76,7 @@ internal open class KotlinTasksProvider(val targetName: String) { name: String, compilation: AbstractKotlinCompilation<*>, configureAction: (KotlinCompile) -> (Unit) - ): TaskHolder { + ): TaskProvider { val properties = PropertiesProvider(project) val taskClass = taskOrWorkersTask(properties) val result = registerTask(project, name, taskClass) { @@ -117,10 +91,10 @@ internal open class KotlinTasksProvider(val targetName: String) { name: String, compilation: AbstractKotlinCompilation<*>, configureAction: (Kotlin2JsCompile) -> Unit - ): TaskHolder { + ): TaskProvider { val properties = PropertiesProvider(project) val taskClass = taskOrWorkersTask(properties) - val result = registerTask(project, name, taskClass) { + val result = project.createOrRegisterTask(name, taskClass) { configureAction(it) } configure(result, project, properties, compilation) @@ -132,10 +106,10 @@ internal open class KotlinTasksProvider(val targetName: String) { name: String, compilation: AbstractKotlinCompilation<*>, configureAction: (KotlinCompileCommon) -> (Unit) - ): TaskHolder { + ): TaskProvider { val properties = PropertiesProvider(project) val taskClass = taskOrWorkersTask(properties) - val result = registerTask(project, name, taskClass) { + val result = project.createOrRegisterTask(name, taskClass) { configureAction(it) } configure(result, project, properties, compilation) @@ -143,25 +117,23 @@ internal open class KotlinTasksProvider(val targetName: String) { } open fun configure( - kotlinTaskHolder: TaskHolder>, + kotlinTaskHolder: TaskProvider>, project: Project, propertiesProvider: PropertiesProvider, compilation: AbstractKotlinCompilation<*> ) { - val configureAfterEvaluated = RunOnceAfterEvaluated("TaskProvider.configure") { - val languageSettings = project.kotlinExtension.sourceSets.findByName(compilation.defaultSourceSetName)?.languageSettings - ?: return@RunOnceAfterEvaluated - - val kotlinTask = kotlinTaskHolder.doGetTask() - kotlinTask as org.jetbrains.kotlin.gradle.dsl.KotlinCompile<*> - applyLanguageSettingsToKotlinTask(languageSettings, kotlinTask) - } kotlinTaskHolder.configure { it.friendTaskName = taskToFriendTaskMapper[it] - propertiesProvider.mapKotlinTaskProperties(it) - configureAfterEvaluated.onConfigure() } - project.runOnceAfterEvaluated(configureAfterEvaluated, kotlinTaskHolder) + + project.runOnceAfterEvaluated("apply properties and language settings to ${kotlinTaskHolder.name}", kotlinTaskHolder) { + propertiesProvider.mapKotlinTaskProperties(kotlinTaskHolder.get()) + + applyLanguageSettingsToKotlinTask( + compilation.defaultSourceSet.languageSettings, + kotlinTaskHolder.get() as org.jetbrains.kotlin.gradle.dsl.KotlinCompile<*> + ) + } } protected open val taskToFriendTaskMapper: TaskToFriendTaskMapper = @@ -176,7 +148,7 @@ internal class AndroidTasksProvider(targetName: String) : KotlinTasksProvider(ta RegexTaskToFriendTaskMapper.Android(targetName) override fun configure( - kotlinTaskHolder: TaskHolder>, + kotlinTaskHolder: TaskProvider>, project: Project, propertiesProvider: PropertiesProvider, compilation: AbstractKotlinCompilation<*> diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/testing/internal/KotlinTestReport.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/testing/internal/KotlinTestReport.kt index 098131e59b7..c723a3b337d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/testing/internal/KotlinTestReport.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/testing/internal/KotlinTestReport.kt @@ -10,6 +10,7 @@ import org.gradle.api.execution.TaskExecutionGraph import org.gradle.api.tasks.Input import org.gradle.api.tasks.Internal import org.gradle.api.tasks.TaskAction +import org.gradle.api.tasks.TaskProvider import org.gradle.api.tasks.testing.* import org.jetbrains.kotlin.gradle.internal.testing.KotlinTestRunnerListener import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider @@ -41,12 +42,12 @@ import java.net.URI */ open class KotlinTestReport : TestReport() { @Internal - val testTasks = mutableListOf() + val testTasks = mutableListOf>() private var parent: KotlinTestReport? = null @Internal - val children = mutableListOf() + val children = mutableListOf>() private val projectProperties = PropertiesProvider(project) @@ -61,7 +62,7 @@ open class KotlinTestReport : TestReport() { private var hasOwnFailedTests = false private val hasFailedTests: Boolean - get() = hasOwnFailedTests || children.any { it.hasFailedTests } + get() = hasOwnFailedTests || children.map { it.get() }.any { it.hasFailedTests } private val ownSuppressedRunningFailures = mutableListOf>() @@ -82,15 +83,19 @@ open class KotlinTestReport : TestReport() { } } - fun addChild(child: KotlinTestReport) { + fun addChild(childProvider: TaskProvider) { + val child = childProvider.get() + check(child.parent == null) { "$child already registers as child of ${child.parent}" } child.parent = this - children.add(child) - reportOnChildTasks(child) + children.add(childProvider) + reportOnChildTasks(childProvider) } - private fun reportOnChildTasks(child: KotlinTestReport) { + private fun reportOnChildTasks(childProvider: TaskProvider): Unit { + val child = childProvider.get() + child.testTasks.forEach { reportOn(it) } @@ -99,8 +104,11 @@ open class KotlinTestReport : TestReport() { } } - fun registerTestTask(task: AbstractTestTask) { - testTasks.add(task) + fun registerTestTask(taskProvider: TaskProvider) { + testTasks.add(taskProvider) + + val task = taskProvider.get() + task.addTestListener(failedTestsListener) if (task is KotlinTest) task.addRunListener(object : KotlinTestRunnerListener { override fun runningFailure(failure: Error) { @@ -165,7 +173,7 @@ open class KotlinTestReport : TestReport() { } report.children.forEach { - visitSuppressedRunningFailures(it) + visitSuppressedRunningFailures(it.get()) } } @@ -227,13 +235,17 @@ open class KotlinTestReport : TestReport() { disableTestReporting(it) } - children.forEach { - it.checkFailedTests = false - it.disableIndividualTestTaskReportingAndFailing() + children.forEach { child -> + child.configure { + it.checkFailedTests = false + it.disableIndividualTestTaskReportingAndFailing() + } } } - private fun disableTestReporting(task: AbstractTestTask) { + private fun disableTestReporting(taskProvider: TaskProvider) { + val task = taskProvider.get() + task.ignoreFailures = true if (task is KotlinTest) { task.ignoreRunFailures = true diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/testing/internal/KotlinTestsRegistry.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/testing/internal/KotlinTestsRegistry.kt index 46fe56db362..0134713bbae 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/testing/internal/KotlinTestsRegistry.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/testing/internal/KotlinTestsRegistry.kt @@ -8,9 +8,9 @@ package org.jetbrains.kotlin.gradle.testing.internal import org.gradle.api.Project import org.gradle.api.Task import org.gradle.api.plugins.JavaBasePlugin +import org.gradle.api.tasks.TaskProvider import org.gradle.api.tasks.testing.AbstractTestTask import org.gradle.language.base.plugins.LifecycleBasePlugin -import org.jetbrains.kotlin.gradle.plugin.TaskHolder import org.jetbrains.kotlin.gradle.tasks.createOrRegisterTask import org.jetbrains.kotlin.gradle.tasks.locateTask @@ -19,27 +19,28 @@ import org.jetbrains.kotlin.gradle.tasks.locateTask * See [KotlinTestReport] for more details about aggregated test tasks. */ class KotlinTestsRegistry(val project: Project, val allTestsTaskName: String = "allTests") { - val allTestsTask: TaskHolder + val allTestsTask: TaskProvider get() = doGetOrCreateAggregatedTestTask( name = allTestsTaskName, description = "Runs the tests for all targets and create aggregated report" ) { project.tasks.maybeCreate(LifecycleBasePlugin.CHECK_TASK_NAME) - .dependsOn(it.getTaskOrProvider()) + .dependsOn(it) } fun registerTestTask( - taskHolder: TaskHolder, - aggregate: KotlinTestReport = allTestsTask.doGetTask() + project: Project, + taskHolder: TaskProvider, + aggregate: TaskProvider = allTestsTask ) { - val project = taskHolder.project - project.tasks.getByName(LifecycleBasePlugin.CHECK_TASK_NAME).dependsOn(taskHolder.name) project.cleanAllTestTask.dependsOn(cleanTaskName(taskHolder.name)) - aggregate.dependsOn(taskHolder.name) + aggregate.configure { + it.dependsOn(taskHolder.name) + it.registerTestTask(taskHolder) + } taskHolder.configure { task -> - aggregate.registerTestTask(task) ijListenTestTask(task) } } @@ -47,25 +48,25 @@ class KotlinTestsRegistry(val project: Project, val allTestsTaskName: String = " fun getOrCreateAggregatedTestTask( name: String, description: String, - parent: TaskHolder? = allTestsTask - ): TaskHolder { + parent: TaskProvider? = allTestsTask + ): TaskProvider { if (name == parent?.name) return parent - return doGetOrCreateAggregatedTestTask(name, description, parent?.doGetTask()) + return doGetOrCreateAggregatedTestTask(name, description, parent) } private fun doGetOrCreateAggregatedTestTask( name: String, description: String, - parent: KotlinTestReport? = null, - configure: (TaskHolder) -> Unit = {} - ): TaskHolder { + parent: TaskProvider? = null, + configure: (TaskProvider) -> Unit = {} + ): TaskProvider { val existed = project.locateTask(name) if (existed != null) return existed val reportName = name - val aggregate: TaskHolder = project.createOrRegisterTask(name) { aggregate -> + val aggregate: TaskProvider = project.createOrRegisterTask(name) { aggregate -> aggregate.description = description aggregate.group = JavaBasePlugin.VERIFICATION_GROUP @@ -78,11 +79,12 @@ class KotlinTestsRegistry(val project: Project, val allTestsTaskName: String = " project.gradle.taskGraph.whenReady { graph -> aggregate.maybeOverrideReporting(graph) } - - parent?.addChild(aggregate) } - parent?.dependsOn(aggregate.getTaskOrProvider()) + parent?.configure { + it.addChild(aggregate) + it.dependsOn(aggregate) + } configure(aggregate) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/compatibiltiy.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/compatibiltiy.kt index c2051741b6d..2ecd0063e20 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/compatibiltiy.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/compatibiltiy.kt @@ -51,7 +51,7 @@ internal fun TaskInputs.dirCompatible(dirPath: Any) { inputsDirMethod(this, dirPath) } -internal fun checkGradleCompatibility(minSupportedVersion: GradleVersion = GradleVersion.version("4.3")) { +internal fun checkGradleCompatibility(minSupportedVersion: GradleVersion = GradleVersion.version("4.9")) { val currentVersion = GradleVersion.current() if (currentVersion < minSupportedVersion) { throw GradleException(