From 61f213c80c80e2caec3b333e482ba7c1f9413631 Mon Sep 17 00:00:00 2001 From: Sergey Rostov Date: Wed, 1 Apr 2020 14:53:03 +0300 Subject: [PATCH] KT-38250 The minimal supported Gradle version is 5.3 now Gradle integration tests: use at least OLDEST_SUPPORTED version. extract minSupportedGradleVersion for using both in check and tests avoid using Usage.JAVA_API_JARS and JAVA_RUNTIME_JARS --- build.gradle.kts | 6 +- .../build.gradle.kts | 2 +- .../AbstractKotlinAndroidGradleTests.kt | 66 ------------------- .../jetbrains/kotlin/gradle/BaseGradleIT.kt | 10 +-- .../kotlin/gradle/ConfigurationAvoidanceIT.kt | 2 +- .../kotlin/gradle/ExecutionStrategyIT.kt | 9 +-- .../kotlin/gradle/GradleVersionRequired.kt | 9 ++- .../jetbrains/kotlin/gradle/Kapt3AndroidIT.kt | 12 +--- .../org/jetbrains/kotlin/gradle/Kapt3IT.kt | 6 +- .../kotlin/gradle/Kotlin2JsGradlePluginIT.kt | 10 +-- .../kotlin/gradle/KotlinGradlePluginIT.kt | 12 ++-- .../kotlin/gradle/NewMultiplatformIT.kt | 2 +- .../jetbrains/kotlin/gradle/SubpluginsIT.kt | 25 ++----- .../gradle/VariantAwareDependenciesIT.kt | 2 +- .../kotlin/gradle/util/AGPVersion.kt | 1 + .../GradleKotlinCompilerRunner.kt | 2 +- .../internal/tasks/TaskWithLocalState.kt | 3 +- .../kotlin/gradle/plugin/KotlinPlugin.kt | 23 ++----- .../gradle/plugin/mpp/KotlinMetadataTarget.kt | 5 -- .../plugin/mpp/KotlinMultiplatformPlugin.kt | 4 +- .../kotlin/gradle/plugin/mpp/KotlinUsages.kt | 12 ++-- .../plugin/mpp/ResolvedMppVariantsProvider.kt | 13 +--- .../gradle/plugin/mpp/kotlinCompilations.kt | 3 - .../kotlin/gradle/plugin/mpp/kotlinTargets.kt | 42 +++--------- .../plugin/sources/DefaultKotlinSourceSet.kt | 33 ++-------- .../plugin/sources/KotlinSourceSetFactory.kt | 2 +- .../internal/ScriptingGradleSubplugin.kt | 27 +++----- .../targets/android/KotlinAndroidTarget.kt | 1 - .../js/ir/KotlinJsIrTargetConfigurator.kt | 3 +- .../targets/js/nodejs/NodeJsSetupTask.kt | 14 ++-- .../gradle/targets/jvm/KotlinJvmTarget.kt | 2 +- .../targets/jvm/KotlinWithJavaTarget.kt | 2 +- .../KotlinMetadataTargetConfigurator.kt | 8 +-- .../targets/native/KotlinNativeTarget.kt | 6 +- .../native/NativeCompilerDownloader.kt | 4 +- .../kotlin/gradle/tasks/CacheableTasks.kt | 4 +- .../tasks/InspectClassesForMultiModuleIC.kt | 3 - .../kotlin/gradle/tasks/KotlinTest.kt | 3 +- .../jetbrains/kotlin/gradle/tasks/Tasks.kt | 10 +-- .../kotlin/gradle/tasks/TasksProvider.kt | 4 +- .../kotlin/gradle/utils/compatibiltiy.kt | 53 ++------------- .../kotlin/gradle/utils/providerApiUtils.kt | 8 +-- 42 files changed, 105 insertions(+), 363 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 6fc47f9a63d..e1e62cfafa4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -779,15 +779,15 @@ fun CopySpec.setExecutablePermissions() { val zipCompiler by task { dependsOn(dist) - destinationDir = file(distDir) - archiveName = "kotlin-compiler-$kotlinVersion.zip" + destinationDirectory.set(file(distDir)) + archiveFileName.set("kotlin-compiler-$kotlinVersion.zip") from(distKotlinHomeDir) into("kotlinc") setExecutablePermissions() doLast { - logger.lifecycle("Compiler artifacts packed to $archivePath") + logger.lifecycle("Compiler artifacts packed to ${archiveFile.get().asFile.absolutePath}") } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/build.gradle.kts index 2d69a429dda..6ef70cc7f2c 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/build.gradle.kts @@ -52,7 +52,7 @@ val shortenTempRootName = System.getProperty("os.name")!!.contains("Windows") projectTest("test", shortenTempRootName = shortenTempRootName) {} projectTest("testAdvanceGradleVersion", shortenTempRootName = shortenTempRootName) { - val gradleVersionForTests = "5.3-rc-2" + val gradleVersionForTests = "6.3" systemProperty("kotlin.gradle.version.for.tests", gradleVersionForTests) } 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 34a0f8b4213..28dea145159 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 @@ -12,9 +12,6 @@ import kotlin.test.assertTrue open class KotlinAndroid33GradleIT : KotlinAndroid32GradleIT() { override val androidGradlePluginVersion: AGPVersion get() = AGPVersion.v3_3_2 - - override val defaultGradleVersion: GradleVersionRequired - get() = GradleVersionRequired.AtLeast("5.0") } open class KotlinAndroid36GradleIT : KotlinAndroid33GradleIT() { @@ -410,46 +407,6 @@ open class KotlinAndroid32GradleIT : KotlinAndroid3GradleIT() { } } -class KotlinAndroid30GradleIT : KotlinAndroid3GradleIT() { - override val androidGradlePluginVersion: AGPVersion - get() = AGPVersion.v3_0_0 - - override val defaultGradleVersion: GradleVersionRequired - get() = GradleVersionRequired.Until("4.10.2") - - @Test - fun testOmittedStdlibVersion() = Project("AndroidProject").run { - setupWorkingDir() - - gradleBuildScript("Lib").modify { - it.checkedReplace("kotlin-stdlib:\$kotlin_version", "kotlin-stdlib") + "\n" + """ - apply plugin: 'maven' - group 'com.example' - version '1.0' - android { - defaultPublishConfig 'flavor1Debug' - } - uploadArchives { - repositories { - mavenDeployer { - repository(url: "file://${'$'}buildDir/repo") - } - } - } - """.trimIndent() - } - - build(":Lib:assembleFlavor1Debug", ":Lib:uploadArchives") { - assertSuccessful() - assertTasksExecuted(":Lib:compileFlavor1DebugKotlin", ":Lib:uploadArchives") - val pomLines = File(projectDir, "Lib/build/repo/com/example/Lib/1.0/Lib-1.0.pom").readLines() - val stdlibVersionLineNumber = pomLines.indexOfFirst { "kotlin-stdlib" in it } + 1 - val versionLine = pomLines[stdlibVersionLineNumber] - assertTrue { "${defaultBuildOptions().kotlinVersion}" in versionLine } - } - } -} - abstract class KotlinAndroid3GradleIT : AbstractKotlinAndroidGradleTests() { @Test fun testApplyWithFeaturePlugin() { @@ -724,29 +681,6 @@ fun getSomething() = 10 val project = Project("AndroidExtensionsSpecificFeatures") val options = defaultBuildOptions().copy(incremental = false) - if (this is KotlinAndroid30GradleIT) { - project.setupWorkingDir() - project.gradleBuildScript("app").modify { - """ - def projectEvaluated = false - - configurations.all { configuration -> - incoming.beforeResolve { - if (!projectEvaluated) { - throw new RuntimeException("${'$'}configuration resolved during project configuration phase.") - } - } - } - - $it - - afterEvaluate { - projectEvaluated = true - } - """.trimIndent() - } - } - project.build("assemble", options = options) { assertFailed() assertContains("Unresolved reference: textView") diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt index 089f73e963e..bb636fdaeea 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/BaseGradleIT.kt @@ -168,17 +168,9 @@ abstract class BaseGradleIT { assert(version != runnerGradleVersion) { "Not stopping Gradle daemon v$version as it matches the runner version" } println("Stopping gradle daemon v$version") - val envVariables = if (GradleVersion.version(version) < GradleVersion.version("5.0")) { - // Gradle versions below 5.0 do not support running on JDK11, and some of the tests - // set JAVA_HOME to JDK11. This makes sure we are using JDK8 when stopping those daemons. - environmentVariables + mapOf("JAVA_HOME" to System.getenv()["JDK_18"]!!) - } else { - environmentVariables - } - val wrapperDir = gradleWrappers[version] ?: error("Was asked to stop unknown daemon $version") val cmd = createGradleCommand(wrapperDir, arrayListOf("-stop")) - val result = runProcess(cmd, wrapperDir, envVariables) + val result = runProcess(cmd, wrapperDir, environmentVariables) assert(result.isSuccessful) { "Could not stop daemon: $result" } DaemonRegistry.unregister(version) } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ConfigurationAvoidanceIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ConfigurationAvoidanceIT.kt index fc58ae3d93f..3bd389a836a 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ConfigurationAvoidanceIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ConfigurationAvoidanceIT.kt @@ -10,7 +10,7 @@ import org.junit.Test class ConfigurationAvoidanceIT : BaseGradleIT() { @Test - fun testUnrelatedTaskNotConfigured() = with(Project("simpleProject", GradleVersionRequired.AtLeast("4.10.2"))) { + fun testUnrelatedTaskNotConfigured() = with(Project("simpleProject")) { setupWorkingDir() val expensivelyConfiguredTaskName = "expensivelyConfiguredTask" diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ExecutionStrategyIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ExecutionStrategyIT.kt index a4bef833667..7cf29ec0a9c 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ExecutionStrategyIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/ExecutionStrategyIT.kt @@ -89,8 +89,6 @@ abstract class ExecutionStrategyIT : BaseGradleIT() { } private fun CompiledProject.checkCompileDaemon() { - val isGradleAtLeast50 = project.testGradleVersionAtLeast("5.0") - val m = "Kotlin compile daemon JVM options: \\[(.*?)\\]".toRegex().find(output) ?: error("Could not find Kotlin compile daemon JVM options in Gradle's output") val kotlinDaemonJvmArgs = m.groupValues[1].split(",").mapTo(LinkedHashSet()) { it.trim() } @@ -102,11 +100,8 @@ abstract class ExecutionStrategyIT : BaseGradleIT() { ) } - if (isGradleAtLeast50) { - // 256m is the default value for Gradle 5.0+ - assertDaemonArgsContain("-XX:MaxMetaspaceSize=256m") - } - + // 256m is the default value for Gradle 5.0+ + assertDaemonArgsContain("-XX:MaxMetaspaceSize=256m") assertDaemonArgsContain("-ea") } 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 f38573c165a..6e01ad20f71 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 @@ -17,11 +17,12 @@ package org.jetbrains.kotlin.gradle import org.gradle.util.GradleVersion +import org.jetbrains.kotlin.gradle.GradleVersionRequired.Companion.OLDEST_SUPPORTED import org.junit.Assume sealed class GradleVersionRequired(val minVersion: String, val maxVersion: String?) { companion object { - const val OLDEST_SUPPORTED = "4.9" + const val OLDEST_SUPPORTED = "5.3" val FOR_MPP_SUPPORT = AtLeast("6.0") } @@ -34,13 +35,13 @@ sealed class GradleVersionRequired(val minVersion: String, val maxVersion: Strin class Until(maxVersion: String) : GradleVersionRequired(OLDEST_SUPPORTED, maxVersion) - object None : GradleVersionRequired(GradleVersionRequired.OLDEST_SUPPORTED, null) + object None : GradleVersionRequired(OLDEST_SUPPORTED, null) } fun BaseGradleIT.Project.chooseWrapperVersionOrFinishTest(): String { val gradleVersionForTests = System.getProperty("kotlin.gradle.version.for.tests")?.toGradleVersion() - val minVersion = gradleVersionRequirement.minVersion.toGradleVersion() + val minVersion = max(gradleVersionRequirement.minVersion.toGradleVersion(), OLDEST_SUPPORTED.toGradleVersion()) val maxVersion = gradleVersionRequirement.maxVersion?.toGradleVersion() if (gradleVersionForTests == null) { @@ -52,4 +53,6 @@ fun BaseGradleIT.Project.chooseWrapperVersionOrFinishTest(): String { return gradleVersionForTests.version } +private fun > max(a: T, b: T): T = if (a < b) b else a + private fun String.toGradleVersion() = GradleVersion.version(this) \ No newline at end of file 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 8b23ae86ef6..842a84cd43c 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 @@ -20,9 +20,6 @@ open class Kapt3Android33IT : Kapt3AndroidIT() { override val androidGradlePluginVersion: AGPVersion get() = AGPVersion.v3_3_2 - override val defaultGradleVersion: GradleVersionRequired - get() = GradleVersionRequired.AtLeast("5.2") - @Test fun testAndroidxNavigationSafeArgs() = with(Project("androidx-navigation-safe-args", directoryPrefix = "kapt2")) { // KT-30735 @@ -72,22 +69,19 @@ open class Kapt3Android33IT : Kapt3AndroidIT() { } } -class Kapt3Android31IT : Kapt3AndroidIT() { +class Kapt3Android34IT : Kapt3AndroidIT() { override val androidGradlePluginVersion: AGPVersion - get() = AGPVersion.v3_1_0 + get() = AGPVersion.v3_4_1 // there is a weird validation exception in testICWithAnonymousClasses with 5.0 todo: fix it override val defaultGradleVersion: GradleVersionRequired - get() = GradleVersionRequired.Until("4.10.2") + get() = GradleVersionRequired.Until("5.4.1") } open class Kapt3AndroidIT : Kapt3BaseIT() { protected open val androidGradlePluginVersion: AGPVersion get() = AGPVersion.v3_0_0 - override val defaultGradleVersion: GradleVersionRequired - get() = GradleVersionRequired.Until("4.10.2") - override fun defaultBuildOptions() = super.defaultBuildOptions().copy( androidHome = KotlinTestUtils.findAndroidSdk(), 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 8fe745483bf..298e61987fb 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 @@ -69,7 +69,7 @@ class Kapt3WorkersIT : Kapt3IT() { Assume.assumeTrue("JDK 10 isn't available", javaHome.isDirectory) val options = defaultBuildOptions().copy(javaHome = javaHome) - val project = Project("simple", directoryPrefix = "kapt2", gradleVersionRequirement = GradleVersionRequired.AtLeast("4.7")) + val project = Project("simple", directoryPrefix = "kapt2") project.build("build", options = options) { assertSuccessful() assertKaptSuccessful() @@ -84,7 +84,7 @@ class Kapt3WorkersIT : Kapt3IT() { Assume.assumeTrue("JDK 11 isn't available", javaHome.isDirectory) val options = defaultBuildOptions().copy(javaHome = javaHome) - val project = Project("simple", directoryPrefix = "kapt2", gradleVersionRequirement = GradleVersionRequired.AtLeast("5.0")) + val project = Project("simple", directoryPrefix = "kapt2") project.build("build", options = options) { assertSuccessful() assertKaptSuccessful() @@ -649,7 +649,7 @@ open class Kapt3IT : Kapt3BaseIT() { Assume.assumeTrue("JDK 11 isn't available", javaHome.isDirectory) val options = defaultBuildOptions().copy(javaHome = javaHome) - val project = Project("simple", directoryPrefix = "kapt2", gradleVersionRequirement = GradleVersionRequired.AtLeast("5.0")).also { + val project = Project("simple", directoryPrefix = "kapt2").also { it.setupWorkingDir() it.gradleBuildScript().appendText("\nsourceCompatibility = '8'") } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt index f2408706559..934e111e368 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt @@ -37,7 +37,7 @@ class Kotlin2JsIrGradlePluginIT : AbstractKotlin2JsGradlePluginIT(true) { @Test fun testCleanOutputWithEmptySources() { - with(Project("kotlin-js-nodejs-project", GradleVersionRequired.AtLeast("5.3"))) { + with(Project("kotlin-js-nodejs-project")) { setupWorkingDir() gradleBuildScript().modify(::transformBuildScriptWithPluginsDsl) gradleSettingsScript().modify(::transformBuildScriptWithPluginsDsl) @@ -512,7 +512,7 @@ abstract class AbstractKotlin2JsGradlePluginIT(private val irBackend: Boolean) : } @Test - fun testNewKotlinJsPlugin() = with(Project("kotlin-js-plugin-project", GradleVersionRequired.AtLeast("5.3"))) { + fun testNewKotlinJsPlugin() = with(Project("kotlin-js-plugin-project")) { assumeFalse(irBackend) // TODO: Support IR version of kotlinx.html setupWorkingDir() gradleBuildScript().modify(::transformBuildScriptWithPluginsDsl) @@ -558,7 +558,7 @@ abstract class AbstractKotlin2JsGradlePluginIT(private val irBackend: Boolean) : } @Test - fun testYarnSetup() = with(Project("yarn-setup", GradleVersionRequired.AtLeast("5.3"))) { + fun testYarnSetup() = with(Project("yarn-setup")) { setupWorkingDir() gradleBuildScript().modify(::transformBuildScriptWithPluginsDsl) gradleSettingsScript().modify(::transformBuildScriptWithPluginsDsl) @@ -589,7 +589,7 @@ abstract class AbstractKotlin2JsGradlePluginIT(private val irBackend: Boolean) : } @Test - fun testNpmDependencies() = with(Project("npm-dependencies", GradleVersionRequired.AtLeast("5.3"))) { + fun testNpmDependencies() = with(Project("npm-dependencies")) { setupWorkingDir() gradleBuildScript().modify(::transformBuildScriptWithPluginsDsl) @@ -603,7 +603,7 @@ abstract class AbstractKotlin2JsGradlePluginIT(private val irBackend: Boolean) : } @Test - fun testBrowserDistribution() = with(Project("kotlin-js-browser-project", GradleVersionRequired.AtLeast("5.3"))) { + fun testBrowserDistribution() = with(Project("kotlin-js-browser-project")) { setupWorkingDir() gradleBuildScript().modify(::transformBuildScriptWithPluginsDsl) gradleSettingsScript().modify(::transformBuildScriptWithPluginsDsl) 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 631ee96026d..b800a0bdba7 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 @@ -588,14 +588,12 @@ class KotlinGradleIT : BaseGradleIT() { @Test fun testNoUnnamedInputsOutputs() { - // Use a new Gradle version to enable the usage of the input/output builders, which are new API: - val gradleVersionRequirement = GradleVersionRequired.AtLeast("4.4") val projects = listOf( - Project("simpleProject", gradleVersionRequirement), - Project("kotlin2JsProject", gradleVersionRequirement), - Project("multiplatformProject", gradleVersionRequirement), - Project("simple", gradleVersionRequirement, "kapt2") + Project("simpleProject"), + Project("kotlin2JsProject"), + Project("multiplatformProject"), + Project("simple", directoryPrefix = "kapt2") ) projects.forEach { @@ -894,7 +892,7 @@ class KotlinGradleIT : BaseGradleIT() { } @Test - fun testNewModelInOldJvmPlugin() = with(Project("new-model-in-old-plugin", GradleVersionRequired.AtLeast("5.0"))) { + fun testNewModelInOldJvmPlugin() = with(Project("new-model-in-old-plugin")) { setupWorkingDir() gradleBuildScript().modify(::transformBuildScriptWithPluginsDsl) 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 1fb4ddae8b8..977c153fcff 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 @@ -452,7 +452,7 @@ class NewMultiplatformIT : BaseGradleIT() { } @Test - fun testResourceProcessing() = with(Project("sample-lib", directoryPrefix = "new-mpp-lib-and-app")) { + fun testResourceProcessing() = with(Project("sample-lib", gradleVersion, "new-mpp-lib-and-app")) { val targetsWithResources = listOf("jvm6", "nodeJs", "wasm32", nativeHostTargetName) val processResourcesTasks = targetsWithResources.map { ":${it}ProcessResources" } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/SubpluginsIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/SubpluginsIT.kt index 38eccfa2092..bd625183ef6 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/SubpluginsIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/SubpluginsIT.kt @@ -149,25 +149,14 @@ class SubpluginsIT : BaseGradleIT() { var isFailed = false project.build("build", options = options) { val classesDir = kotlinClassesDir("app", "main") - if (project.testGradleVersionAtLeast("5.0")) { - assertSuccessful() - assertFileExists("${classesDir}World.class") - assertFileExists("${classesDir}Alice.class") - assertFileExists("${classesDir}Bob.class") + assertSuccessful() + assertFileExists("${classesDir}World.class") + assertFileExists("${classesDir}Alice.class") + assertFileExists("${classesDir}Bob.class") - if (withIC) { - // compile iterations are not logged when IC is disabled - assertCompiledKotlinSources(project.relativize(bobGreet, aliceGreet, worldGreet, greetScriptTemplateKt)) - } - } else { - val usedGradleVersion = - GradleVersion.version( - System.getProperty("kotlin.gradle.version.for.tests") - ?: project.gradleVersionRequirement.minVersion - ) - assertEquals(true, usedGradleVersion.version.substringBefore('.').toIntOrNull()?.let { it < 5 }, "Expected gradle version < 5, got ${usedGradleVersion.version}") - assertContains("kotlin scripting plugin: incompatible Gradle version") - isFailed = true + if (withIC) { + // compile iterations are not logged when IC is disabled + assertCompiledKotlinSources(project.relativize(bobGreet, aliceGreet, worldGreet, greetScriptTemplateKt)) } } 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 1bb36ce8983..8a458a0d6a9 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 @@ -279,7 +279,7 @@ class VariantAwareDependenciesIT : BaseGradleIT() { // Starting with Gradle 5.0, plain Maven dependencies are represented as two variants, and resolving them to the API one leads // to transitive dependencies left out of the resolution results. We need to ensure that our attributes schema does not lead to the API // variants chosen over the runtime ones when resolving a configuration with no required Usage: - with(Project("simpleProject", GradleVersionRequired.AtLeast("5.0-milestone-1"))) { + with(Project("simpleProject")) { setupWorkingDir() gradleBuildScript().appendText("\ndependencies { compile 'org.jetbrains.kotlin:kotlin-compiler-embeddable' }") diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/AGPVersion.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/AGPVersion.kt index 4c7edaddc1f..4b60d05f71a 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/AGPVersion.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/AGPVersion.kt @@ -22,6 +22,7 @@ class AGPVersion private constructor(private val versionNumber: VersionNumber) { val v3_1_0 = fromString("3.1.0") val v3_2_0 = fromString("3.2.0") val v3_3_2 = fromString("3.3.2") + val v3_4_1 = fromString("3.4.1") val v3_6_0 = fromString("3.6.0") val v4_0_ALPHA_8 = fromString("4.0.0-alpha08") } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt index 5929a963a72..796ee9cab48 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/GradleKotlinCompilerRunner.kt @@ -242,7 +242,7 @@ internal open class GradleCompilerRunner(protected val task: Task) { ?: return null val sourceSet = javaConvention.sourceSets.findByName(sourceSetName) ?: return null val jarTask = project.tasks.findByName(sourceSet.jarTaskName) as? Jar - return jarTask?.archivePath + return jarTask?.archiveFile?.get()?.asFile } @Synchronized diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/tasks/TaskWithLocalState.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/tasks/TaskWithLocalState.kt index 6a348830771..205187e7655 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/tasks/TaskWithLocalState.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/tasks/TaskWithLocalState.kt @@ -7,11 +7,10 @@ package org.jetbrains.kotlin.gradle.internal.tasks import org.gradle.api.Task import org.gradle.api.file.FileCollection -import org.jetbrains.kotlin.gradle.utils.outputsCompatible internal interface TaskWithLocalState : Task { fun localStateDirectories(): FileCollection } internal fun TaskWithLocalState.allOutputFiles(): FileCollection = - outputsCompatible.files + localStateDirectories() + outputs.files + localStateDirectories() 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 e30e4b94dc8..401635f072d 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 @@ -11,7 +11,6 @@ import com.android.build.gradle.api.BaseVariant import com.android.builder.model.SourceProvider import org.gradle.api.* import org.gradle.api.artifacts.ExternalDependency -import org.gradle.api.artifacts.MutableVersionConstraint import org.gradle.api.artifacts.maven.Conf2ScopeMappingContainer import org.gradle.api.artifacts.maven.MavenResolver import org.gradle.api.attributes.Usage @@ -224,7 +223,7 @@ internal class Kotlin2JvmSourceSetProcessor( .flatMap { it.getSubpluginKotlinTasks(project, kotlinTaskInstance) } .forEach { plugin -> kotlinCompilation.allKotlinSourceSets.forEach { sourceSet -> plugin.source(sourceSet.kotlin) } } - javaTask?.let { configureJavaTask(kotlinTaskInstance, it, logger) } + javaTask?.let { configureJavaTask(kotlinTaskInstance, it) } if (project.pluginManager.hasPlugin("java-library") && sourceSetName == SourceSet.MAIN_SOURCE_SET_NAME) { registerKotlinOutputForJavaLibrary(kotlinTaskInstance.destinationDir, kotlinTaskInstance) @@ -531,7 +530,7 @@ internal abstract class AbstractKotlinPlugin( project.registerTask("inspectClassesForKotlinIC") { it.sourceSetName = SourceSet.MAIN_SOURCE_SET_NAME it.archivePath.set(project.provider { jarTask.archivePathCompatible.canonicalPath }) - it.archiveName.set(project.provider { jarTask.archiveNameCompatible }) + it.archiveName.set(project.provider { jarTask.archiveFileName.get() }) it.dependsOn(classesTask) } jarTask.dependsOn(inspectTask) @@ -640,21 +639,11 @@ internal abstract class AbstractKotlinPlugin( internal fun configureDefaultVersionsResolutionStrategy(project: Project, kotlinPluginVersion: String) { project.configurations.all { configuration -> - 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) } } + .forEach { it.version { constraint -> constraint.require(kotlinPluginVersion) } } } } } @@ -1090,11 +1079,11 @@ abstract class AbstractAndroidProjectHandler(private val kotlinConfigurationTool } } -internal fun configureJavaTask(kotlinTask: KotlinCompile, javaTask: AbstractCompile, logger: Logger) { +internal fun configureJavaTask(kotlinTask: KotlinCompile, javaTask: AbstractCompile) { kotlinTask.javaOutputDir = javaTask.destinationDir // Make Gradle check if the javaTask is up-to-date based on the Kotlin classes - javaTask.inputsCompatible.run { + javaTask.inputs.run { dir(kotlinTask.destinationDir) .withNormalizer(CompileClasspathNormalizer::class.java) .withPropertyName("${kotlinTask.name}OutputClasses") @@ -1150,7 +1139,7 @@ internal fun Task.registerSubpluginOptionsAsInputs(subpluginId: String, subplugi }.run { /* exhaustive when */ } else -> { - inputsCompatible.propertyCompatible("$subpluginId." + option.key + indexSuffix, Callable { option.value }) + inputs.property("$subpluginId." + option.key + indexSuffix, Callable { option.value }) } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMetadataTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMetadataTarget.kt index 8362f32a7ba..860e6e2d853 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMetadataTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMetadataTarget.kt @@ -8,16 +8,11 @@ package org.jetbrains.kotlin.gradle.plugin.mpp import org.gradle.api.Project import org.gradle.api.artifacts.ConfigurablePublishArtifact import org.gradle.api.artifacts.Dependency -import org.gradle.api.attributes.Usage.JAVA_API -import org.gradle.api.attributes.Usage.USAGE_ATTRIBUTE import org.jetbrains.kotlin.gradle.dsl.kotlinExtension import org.jetbrains.kotlin.gradle.plugin.* -import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope -import org.jetbrains.kotlin.gradle.plugin.sources.sourceSetDependencyConfigurationByScope import org.jetbrains.kotlin.gradle.targets.metadata.KotlinMetadataTargetConfigurator import org.jetbrains.kotlin.gradle.targets.metadata.isCompatibilityMetadataVariantEnabled import org.jetbrains.kotlin.gradle.targets.metadata.isKotlinGranularMetadataEnabled -import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast import javax.inject.Inject internal const val COMMON_MAIN_ELEMENTS_CONFIGURATION_NAME = "commonMainMetadataElements" 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 c5420f1bcd6..7ff4055acd3 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 @@ -351,8 +351,8 @@ internal fun sourcesJarTask( (project.tasks.findByName(taskName) as? Jar)?.let { return it } val result = project.tasks.create(taskName, Jar::class.java) { sourcesJar -> - sourcesJar.setArchiveAppendixCompatible { artifactNameAppendix } - sourcesJar.setArchiveClassifierCompatible { "sources" } + sourcesJar.archiveAppendix.set(artifactNameAppendix) + sourcesJar.archiveClassifier.set("sources") } project.whenEvaluated { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinUsages.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinUsages.kt index 413fadb5d60..00dd4c8dd9a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinUsages.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinUsages.kt @@ -14,7 +14,6 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType.jvm import org.jetbrains.kotlin.gradle.plugin.KotlinTarget import org.jetbrains.kotlin.gradle.plugin.usageByName import org.jetbrains.kotlin.gradle.targets.metadata.isKotlinGranularMetadataEnabled -import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast object KotlinUsages { const val KOTLIN_API = "kotlin-api" @@ -41,15 +40,14 @@ object KotlinUsages { internal fun producerApiUsage(target: KotlinTarget) = target.project.usageByName( when (target.platformType) { - in jvmPlatformTypes -> - if (isGradleVersionAtLeast(5, 3)) "java-api-jars" else JAVA_API + in jvmPlatformTypes -> "java-api-jars" else -> KOTLIN_API } ) internal fun producerRuntimeUsage(target: KotlinTarget) = target.project.usageByName( when (target.platformType) { - in jvmPlatformTypes -> JAVA_RUNTIME_JARS + in jvmPlatformTypes -> "java-runtime-jars" else -> KOTLIN_RUNTIME } ) @@ -61,13 +59,13 @@ object KotlinUsages { when { consumerValue?.name == KOTLIN_API && producerValue?.name.let { it == JAVA_API || it == "java-api-jars" } -> compatible() - consumerValue?.name in values && producerValue?.name.let { it == JAVA_RUNTIME || it == JAVA_RUNTIME_JARS } -> + consumerValue?.name in values && producerValue?.name.let { it == JAVA_RUNTIME || it == "java-runtime-jars" } -> compatible() } } } - private val javaUsagesForKotlinMetadataConsumers = listOf("java-api-jars", JAVA_API, JAVA_RUNTIME_JARS, JAVA_RUNTIME) + private val javaUsagesForKotlinMetadataConsumers = listOf("java-api-jars", JAVA_API, "java-runtime-jars", JAVA_RUNTIME) private class KotlinMetadataCompatibility : AttributeCompatibilityRule { override fun execute(details: CompatibilityCheckDetails) = with(details) { @@ -107,7 +105,7 @@ object KotlinUsages { } val javaApiUsages = setOf(JAVA_API, "java-api-jars") - val javaRuntimeUsages = setOf(JAVA_RUNTIME_JARS, JAVA_RUNTIME) + val javaRuntimeUsages = setOf("java-runtime-jars", JAVA_RUNTIME) if (javaApiUsages.any { it in candidateNames } && javaRuntimeUsages.any { it in candidateNames } && diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/ResolvedMppVariantsProvider.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/ResolvedMppVariantsProvider.kt index 7d267dc507c..2a3b9c09bbc 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/ResolvedMppVariantsProvider.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/ResolvedMppVariantsProvider.kt @@ -16,7 +16,6 @@ import org.gradle.api.artifacts.result.ResolvedVariantResult import org.gradle.api.attributes.Usage import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.plugin.usageByName -import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast import java.io.File internal class ResolvedMppVariantsProvider private constructor(private val project: Project) { @@ -105,7 +104,7 @@ internal class ResolvedMppVariantsProvider private constructor(private val proje configuration.incoming.resolutionResult.allComponents { component -> val moduleId = ModuleIds.fromComponent(project, component) - val variants = component.variantsCompatible + val variants = component.variants val isMpp = variants.any { variant -> variant.attributes.keySet().any { it.name == KotlinPlatformType.attribute.name } } if (isMpp) { @@ -207,12 +206,4 @@ internal class ResolvedMppVariantsProvider private constructor(private val proje val resolvedMetadataArtifactByConfiguration: MutableMap = HashMap() val chosenPlatformModuleByConfiguration: MutableMap = HashMap() } -} - -private val ResolvedComponentResult.variantsCompatible: List - get() = if (isGradleVersionAtLeast(5, 2)) { - variants - } else { - @Suppress("DEPRECATION") - listOf(variant) - } \ No newline at end of file +} \ No newline at end of file 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 34c4b1d62f5..779b24c6e3d 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 @@ -26,10 +26,7 @@ import org.jetbrains.kotlin.gradle.plugin.sources.getSourceSetHierarchy import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile import org.jetbrains.kotlin.gradle.tasks.locateTask import org.jetbrains.kotlin.gradle.utils.addExtendsFromRelation -import org.jetbrains.kotlin.gradle.utils.archivePathCompatible import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName -import java.io.File -import org.jetbrains.kotlin.gradle.utils.* import org.jetbrains.kotlin.gradle.utils.* import java.util.* import java.util.concurrent.Callable 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 2beef26cf44..ea7cfc3fb51 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 @@ -10,15 +10,15 @@ import org.gradle.api.DomainObjectSet import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.Project import org.gradle.api.artifacts.ConfigurablePublishArtifact -import org.gradle.api.artifacts.Configuration import org.gradle.api.artifacts.PublishArtifact import org.gradle.api.attributes.Attribute import org.gradle.api.attributes.AttributeContainer -import org.gradle.api.attributes.Usage.JAVA_API +import org.gradle.api.attributes.Usage import org.gradle.api.attributes.Usage.JAVA_RUNTIME_JARS import org.gradle.api.component.ComponentWithCoordinates import org.gradle.api.component.ComponentWithVariants import org.gradle.api.component.SoftwareComponent +import org.gradle.api.component.SoftwareComponentFactory import org.gradle.api.internal.component.SoftwareComponentInternal import org.gradle.api.internal.component.UsageContext import org.gradle.api.internal.project.ProjectInternal @@ -29,7 +29,6 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.dsl.kotlinExtension import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.utils.dashSeparatedName -import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName internal const val PRIMARY_SINGLE_COMPONENT_NAME = "kotlin" @@ -80,32 +79,16 @@ abstract class AbstractKotlinTarget( } override val components: Set by lazy { - val kotlinVariants = kotlinComponents - if (isGradleVersionAtLeast(5, 3)) { - buildAdhocComponentsFromKotlinVariants(kotlinVariants) - } else { - kotlinVariants.also { project.components.addAll(it) } - } + buildAdhocComponentsFromKotlinVariants(kotlinComponents) } - // This API is introduced in Gradle 5.3. TODO when we build against Gradle 5.3+, rewrite this function private fun buildAdhocComponentsFromKotlinVariants(kotlinVariants: Set): Set { - val softwareComponentFactoryClass = Class.forName("org.gradle.api.component.SoftwareComponentFactory") + val softwareComponentFactoryClass = SoftwareComponentFactory::class.java // TODO replace internal API access with injection (not possible until we have this class on the compile classpath) val softwareComponentFactory = (project as ProjectInternal).services.get(softwareComponentFactoryClass) - val adhocMethod = softwareComponentFactoryClass.getMethod("adhoc", String::class.java) - val adhocSoftwareComponentClass = Class.forName("org.gradle.api.component.AdhocComponentWithVariants") - val addVariantsFromConfigurationMethod = adhocSoftwareComponentClass.getMethod( - "addVariantsFromConfiguration", Configuration::class.java, org.gradle.api.Action::class.java - ) - val configurationVariantDetailsClass = Class.forName("org.gradle.api.component.ConfigurationVariantDetails") - val mapToMavenScopeMethod = configurationVariantDetailsClass.getMethod( - "mapToMavenScope", String::class.java - ) - return kotlinVariants.map { kotlinVariant -> - val adhocVariant = adhocMethod(softwareComponentFactory, kotlinVariant.name) + val adhocVariant = softwareComponentFactory.adhoc(kotlinVariant.name) project.whenEvaluated { (kotlinVariant as SoftwareComponentInternal).usages.filterIsInstance().forEach { kotlinUsageContext -> @@ -127,16 +110,14 @@ abstract class AbstractKotlinTarget( } } - val chooseMavenScopeAction = Action { configurationVariantDetails -> + adhocVariant.addVariantsFromConfiguration(configuration) { configurationVariantDetails -> val mavenScope = when (kotlinUsageContext.usage.name) { "java-api-jars" -> "compile" - JAVA_RUNTIME_JARS -> "runtime" + "java-runtime-jars" -> "runtime" else -> error("unexpected usage value '${kotlinUsageContext.usage.name}'") } - mapToMavenScopeMethod(configurationVariantDetails, mavenScope) + configurationVariantDetails.mapToMavenScope(mavenScope) } - - addVariantsFromConfigurationMethod(adhocVariant, configuration, chooseMavenScopeAction) } } @@ -239,12 +220,7 @@ abstract class AbstractKotlinTarget( internal fun KotlinTarget.disambiguateName(simpleName: String) = lowerCamelCaseName(targetName, simpleName) -internal fun javaApiUsageForMavenScoping() = - if (isGradleVersionAtLeast(5, 3)) { - "java-api-jars" - } else { - JAVA_API - } +internal fun javaApiUsageForMavenScoping() = "java-api-jars" abstract class KotlinOnlyTarget>( project: Project, diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/DefaultKotlinSourceSet.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/DefaultKotlinSourceSet.kt index aad4a0f5286..5495bdaf09e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/DefaultKotlinSourceSet.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/DefaultKotlinSourceSet.kt @@ -9,8 +9,6 @@ import groovy.lang.Closure import org.gradle.api.InvalidUserCodeException import org.gradle.api.Project import org.gradle.api.file.SourceDirectorySet -import org.gradle.api.internal.file.DefaultSourceDirectorySet -import org.gradle.api.internal.file.FileResolver import org.gradle.util.ConfigureUtil import org.jetbrains.kotlin.build.DEFAULT_KOTLIN_SOURCE_FILES_EXTENSIONS import org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler @@ -28,8 +26,7 @@ const val METADATA_CONFIGURATION_NAME_SUFFIX = "DependenciesMetadata" class DefaultKotlinSourceSet( private val project: Project, - val displayName: String, - fileResolver: FileResolver + val displayName: String ) : KotlinSourceSet { override val apiConfigurationName: String @@ -56,7 +53,7 @@ class DefaultKotlinSourceSet( override val runtimeOnlyMetadataConfigurationName: String get() = lowerCamelCaseName(runtimeOnlyConfigurationName, METADATA_CONFIGURATION_NAME_SUFFIX) - override val kotlin: SourceDirectorySet = createDefaultSourceDirectorySet(project, "$name Kotlin source", fileResolver).apply { + override val kotlin: SourceDirectorySet = createDefaultSourceDirectorySet(project, "$name Kotlin source").apply { filter.include("**/*.java") filter.include("**/*.kt") filter.include("**/*.kts") @@ -64,7 +61,7 @@ class DefaultKotlinSourceSet( override val languageSettings: LanguageSettingsBuilder = DefaultLanguageSettingsBuilder() - override val resources: SourceDirectorySet = createDefaultSourceDirectorySet(project, "$name resources", fileResolver) + override val resources: SourceDirectorySet = createDefaultSourceDirectorySet(project, "$name resources") override fun kotlin(configureClosure: Closure): SourceDirectorySet = kotlin.apply { ConfigureUtil.configure(configureClosure, this) } @@ -226,28 +223,8 @@ internal fun KotlinSourceSet.disambiguateName(simpleName: String): String { return lowerCamelCaseName(*nameParts.toTypedArray()) } -private fun createDefaultSourceDirectorySet(project: Project, name: String?, resolver: FileResolver?): SourceDirectorySet { - if (isGradleVersionAtLeast(5, 0)) { - val objects = project.objects - val sourceDirectorySetMethod = objects.javaClass.methods.single { it.name == "sourceDirectorySet" && it.parameterCount == 2 } - return sourceDirectorySetMethod(objects, name, name) as SourceDirectorySet - } - - val klass = DefaultSourceDirectorySet::class.java - val defaultConstructor = klass.constructorOrNull(String::class.java, FileResolver::class.java) - - return if (defaultConstructor != null && defaultConstructor.getAnnotation(java.lang.Deprecated::class.java) == null) { - // TODO: drop when gradle < 2.12 are obsolete - defaultConstructor.newInstance(name, resolver) - } else { - val directoryFileTreeFactoryClass = Class.forName("org.gradle.api.internal.file.collections.DirectoryFileTreeFactory") - val alternativeConstructor = klass.getConstructor(String::class.java, FileResolver::class.java, directoryFileTreeFactoryClass) - - val defaultFileTreeFactoryClass = Class.forName("org.gradle.api.internal.file.collections.DefaultDirectoryFileTreeFactory") - val defaultFileTreeFactory = defaultFileTreeFactoryClass.getConstructor().newInstance() - alternativeConstructor.newInstance(name, resolver, defaultFileTreeFactory) - } -} +private fun createDefaultSourceDirectorySet(project: Project, name: String?): SourceDirectorySet = + project.objects.sourceDirectorySet(name, name) internal fun KotlinSourceSet.getSourceSetHierarchy(): Set { val result = mutableSetOf() diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/KotlinSourceSetFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/KotlinSourceSetFactory.kt index 45e8eec9c54..e4205c0f87f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/KotlinSourceSetFactory.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/KotlinSourceSetFactory.kt @@ -88,6 +88,6 @@ internal class DefaultKotlinSourceSetFactory( } override fun doCreateSourceSet(name: String): DefaultKotlinSourceSet { - return DefaultKotlinSourceSet(project, name, fileResolver) + return DefaultKotlinSourceSet(project, name) } } \ No newline at end of file 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 86a33c88eb0..12c71db7743 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,15 +22,11 @@ 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.utils.isGradleVersionAtLeast import org.jetbrains.kotlin.scripting.compiler.plugin.impl.reporter import org.jetbrains.kotlin.scripting.definitions.ScriptDefinitionsFromClasspathDiscoverySource import java.io.File import kotlin.script.experimental.jvm.defaultJvmScriptingHostConfiguration -private const val MIN_SUPPORTED_GRADLE_MAJOR_VERSION = 5 -private const val MIN_SUPPORTED_GRADLE_MINOR_VERSION = 0 - private const val SCRIPTING_LOG_PREFIX = "kotlin scripting plugin:" class ScriptingGradleSubplugin : Plugin { @@ -70,10 +66,7 @@ class ScriptingGradleSubplugin : Plugin { discoveryClasspathConfiguration.allDependencies.isEmpty() -> { // skip further checks - user did not configured any discovery sources } - !isGradleVersionAtLeast(MIN_SUPPORTED_GRADLE_MAJOR_VERSION, MIN_SUPPORTED_GRADLE_MINOR_VERSION) -> - project.logger.warn("$SCRIPTING_LOG_PREFIX incompatible Gradle version. Please use the plugin with Gradle version $MIN_SUPPORTED_GRADLE_MAJOR_VERSION.$MIN_SUPPORTED_GRADLE_MINOR_VERSION or newer.") - else -> - configureScriptsExtensions(project, javaPluginConvention, task.sourceSetName) + else -> configureScriptsExtensions(project, javaPluginConvention, task.sourceSetName) } } catch (e: IllegalStateException) { project.logger.warn("$SCRIPTING_LOG_PREFIX applied in the non-supported environment (error received: ${e.message})") @@ -146,16 +139,14 @@ private fun configureDiscoveryTransformation( project.configurations.maybeCreate(discoveryResultsConfigurationName).apply { isCanBeConsumed = false } - if (isGradleVersionAtLeast(MIN_SUPPORTED_GRADLE_MAJOR_VERSION, MIN_SUPPORTED_GRADLE_MINOR_VERSION)) { - project.dependencies.apply { - add( - discoveryResultsConfigurationName, - project.withRegisteredDiscoverScriptExtensionsTransform { - discoveryConfiguration.discoverScriptExtensionsFiles() - } - ) - } - } // otherwise the warning should already be reported in the ScriptingGradleSubplugin.apply + project.dependencies.apply { + add( + discoveryResultsConfigurationName, + project.withRegisteredDiscoverScriptExtensionsTransform { + discoveryConfiguration.discoverScriptExtensionsFiles() + } + ) + } } internal class DiscoverScriptExtensionsTransform : ArtifactTransform() { 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 d7c80ae6f4c..0597c24984a 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 @@ -13,7 +13,6 @@ import org.gradle.api.Project import org.gradle.api.attributes.Usage.JAVA_RUNTIME_JARS import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.utils.dashSeparatedName -import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName open class KotlinAndroidTarget( diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTargetConfigurator.kt index e6fd65b6f02..647af6eed06 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTargetConfigurator.kt @@ -55,8 +55,7 @@ open class KotlinJsIrTargetConfigurator(kotlinPluginVersion: String) : override fun createArchiveTasks(target: KotlinJsIrTarget): Zip { return super.createArchiveTasks(target).apply { - // not archiveExtension because it is since Gradle 5.1 only - extension = KLIB_TYPE + archiveExtension.set(KLIB_TYPE) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsSetupTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsSetupTask.kt index 8fcfa7eeea2..004b03336c9 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsSetupTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsSetupTask.kt @@ -1,15 +1,12 @@ package org.jetbrains.kotlin.gradle.targets.js.nodejs import org.gradle.api.DefaultTask -import org.gradle.api.artifacts.repositories.IvyPatternRepositoryLayout import org.gradle.api.tasks.CacheableTask import org.gradle.api.tasks.Input import org.gradle.api.tasks.OutputDirectory import org.gradle.api.tasks.TaskAction import org.jetbrains.kotlin.gradle.logging.kotlinInfo import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService -import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast -import org.jetbrains.kotlin.gradle.utils.patternLayoutCompatible import org.jetbrains.kotlin.statistics.metrics.NumericalMetrics import java.io.File import java.net.URI @@ -40,15 +37,12 @@ open class NodeJsSetupTask : DefaultTask() { repo.name = "Node Distributions at ${settings.nodeDownloadBaseUrl}" repo.url = URI(settings.nodeDownloadBaseUrl) - repo.patternLayoutCompatible { - artifact("v[revision]/[artifact](-v[revision]-[classifier]).[ext]") - ivy("v[revision]/ivy.xml") + repo.patternLayout { + it.artifact("v[revision]/[artifact](-v[revision]-[classifier]).[ext]") + it.ivy("v[revision]/ivy.xml") } repo.metadataSources { it.artifact() } - - if (isGradleVersionAtLeast(5, 1)) { - repo.content { it.includeModule("org.nodejs", "node") } - } + repo.content { it.includeModule("org.nodejs", "node") } } val dep = this.project.dependencies.create(ivyDependency) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTarget.kt index c532d7d80ca..04b7983dae3 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTarget.kt @@ -113,7 +113,7 @@ open class KotlinJvmTarget @Inject constructor( val targetJar = project.tasks.getByName(artifactsTaskName) as Jar val javaJar = project.tasks.getByName(javaPluginConvention.sourceSets.getByName("main").jarTaskName) as Jar (javaJar.source as? ConfigurableFileCollection)?.setFrom(targetJar.source) - javaJar.conventionMapping("archiveName") { targetJar.archiveName } + javaJar.conventionMapping("archiveName") { targetJar.archiveFileName.get() } javaJar.dependsOn(targetJar) javaJar.enabled = false diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinWithJavaTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinWithJavaTarget.kt index 2a6dcf4bc2f..7b260a6624d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinWithJavaTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinWithJavaTarget.kt @@ -46,7 +46,7 @@ open class KotlinWithJavaTarget( internal val defaultArtifactClassesListFile: File get() { val jarTask = project.tasks.getByName(artifactsTaskName) as Jar - return File(File(project.buildDir, KOTLIN_BUILD_DIR_NAME), "${sanitizeFileName(jarTask.archiveName)}-classes.txt") + return File(File(project.buildDir, KOTLIN_BUILD_DIR_NAME), "${sanitizeFileName(jarTask.archiveFileName.get())}-classes.txt") } } 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 f25369bf609..e57061e2a41 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 @@ -29,8 +29,6 @@ import org.jetbrains.kotlin.gradle.tasks.locateTask import org.jetbrains.kotlin.gradle.tasks.registerTask import org.jetbrains.kotlin.gradle.utils.addExtendsFromRelation import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName -import org.jetbrains.kotlin.gradle.utils.setArchiveAppendixCompatible -import org.jetbrains.kotlin.gradle.utils.setArchiveClassifierCompatible import org.jetbrains.kotlin.statistics.metrics.BooleanMetrics import java.util.concurrent.Callable @@ -138,7 +136,7 @@ class KotlinMetadataTargetConfigurator(kotlinPluginVersion: String) : if (target.project.isKotlinGranularMetadataEnabled) { target.project.locateTask(target.artifactsTaskName)!!.configure { if (!target.project.isCompatibilityMetadataVariantEnabled) { - it.setArchiveClassifierCompatible { "commonMain" } + it.archiveClassifier.set("commonMain") } it.onlyIf { target.project.isCompatibilityMetadataVariantEnabled } } @@ -151,10 +149,10 @@ class KotlinMetadataTargetConfigurator(kotlinPluginVersion: String) : allMetadataJar.description = "Assembles a jar archive containing the metadata for all Kotlin source sets." allMetadataJar.group = BasePlugin.BUILD_GROUP - allMetadataJar.setArchiveAppendixCompatible { target.name.toLowerCase() } + allMetadataJar.archiveAppendix.set(target.name.toLowerCase()) if (target.project.isCompatibilityMetadataVariantEnabled) { - allMetadataJar.setArchiveClassifierCompatible { "all" } + allMetadataJar.archiveClassifier.set("all") } } } 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 c37e313ca48..00412e4909b 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 @@ -25,8 +25,6 @@ import org.jetbrains.kotlin.gradle.targets.native.KotlinNativeHostTestRun import org.jetbrains.kotlin.gradle.targets.native.KotlinNativeSimulatorTestRun import org.jetbrains.kotlin.gradle.targets.native.NativeBinaryTestRunSource import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask -import org.jetbrains.kotlin.gradle.utils.setArchiveAppendixCompatible -import org.jetbrains.kotlin.gradle.utils.setArchiveClassifierCompatible import org.jetbrains.kotlin.konan.target.HostManager import org.jetbrains.kotlin.konan.target.KonanTarget import javax.inject.Inject @@ -62,8 +60,8 @@ open class KotlinNativeTarget @Inject constructor( if (hostSpecificSourceSets.isNotEmpty()) { val hostSpecificMetadataJar = project.locateOrRegisterTask(hostSpecificMetadataJarTaskName) { - it.setArchiveAppendixCompatible { disambiguationClassifier.orEmpty().toLowerCase() } - it.setArchiveClassifierCompatible { "metadata" } + it.archiveAppendix.set(project.provider { disambiguationClassifier.orEmpty().toLowerCase() }) + it.archiveClassifier.set("metadata") } project.artifacts.add(Dependency.ARCHIVES_CONFIGURATION, hostSpecificMetadataJar) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/NativeCompilerDownloader.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/NativeCompilerDownloader.kt index e96f85e5c52..e9308816501 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/NativeCompilerDownloader.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/NativeCompilerDownloader.kt @@ -82,8 +82,8 @@ class NativeCompilerDownloader( private fun setupRepo(repoUrl: String): ArtifactRepository { return project.repositories.ivy { repo -> repo.setUrl(repoUrl) - repo.patternLayoutCompatible { - artifact("[artifact]-[revision].[ext]") + repo.patternLayout { + it.artifact("[artifact]-[revision].[ext]") } repo.metadataSources { it.artifact() 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 1438c117604..dd32d754475 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 @@ -17,14 +17,12 @@ package org.jetbrains.kotlin.gradle.tasks import org.gradle.api.Task -import org.gradle.util.GradleVersion -import org.jetbrains.kotlin.gradle.utils.outputsCompatible internal fun isBuildCacheEnabledForKotlin(): Boolean = System.getProperty(KOTLIN_CACHING_ENABLED_PROPERTY)?.toBoolean() ?: true internal fun T.cacheOnlyIfEnabledForKotlin() { - outputsCompatible.cacheIf { isBuildCacheEnabledForKotlin() } + outputs.cacheIf { isBuildCacheEnabledForKotlin() } } 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/InspectClassesForMultiModuleIC.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/InspectClassesForMultiModuleIC.kt index 2abcce81281..0c3a812367a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/InspectClassesForMultiModuleIC.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/InspectClassesForMultiModuleIC.kt @@ -9,11 +9,8 @@ import org.gradle.api.DefaultTask import org.gradle.api.file.FileCollection import org.gradle.api.plugins.JavaPluginConvention import org.gradle.api.tasks.* -import org.gradle.api.tasks.bundling.AbstractArchiveTask -import org.gradle.jvm.tasks.Jar import org.jetbrains.kotlin.gradle.dsl.KotlinSingleJavaTargetExtension import org.jetbrains.kotlin.gradle.dsl.kotlinExtension -import org.jetbrains.kotlin.gradle.utils.archivePathCompatible import org.jetbrains.kotlin.gradle.utils.newProperty import java.io.File diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinTest.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinTest.kt index 69dbf96adee..63b19024656 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinTest.kt @@ -15,7 +15,6 @@ import org.gradle.process.internal.ExecHandleFactory import org.jetbrains.kotlin.gradle.internal.testing.KotlinTestRunnerListener import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesTestExecutor import org.jetbrains.kotlin.gradle.utils.injected -import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast import javax.inject.Inject abstract class KotlinTest : AbstractTestTask() { @@ -39,7 +38,7 @@ abstract class KotlinTest : AbstractTestTask() { @Suppress("DEPRECATION") val excludePatterns: Set - @Input get() = excludes + if (isGradleVersionAtLeast(5, 0)) filterExt.excludePatterns else emptySet() + @Input get() = excludes + filterExt.excludePatterns @get:Inject open val fileResolver: FileResolver diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt index c4b5e09a207..3c8bbe635d9 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt @@ -442,17 +442,9 @@ open class KotlinCompile : AbstractKotlinCompile(), Kotl private fun disableMultiModuleIC(): Boolean { if (!isIncrementalCompilationEnabled() || javaOutputDir == null) return false - fun forEachTask(fn: (Task) -> Unit) { - if (isGradleVersionAtLeast(4, 10)) { - project.tasks.configureEach(fn) - } else { - project.tasks.forEach(fn) - } - } - var illegalTaskOrNull: AbstractCompile? = null - forEachTask { + project.tasks.configureEach { if (it is AbstractCompile && it !is JavaCompile && it !is AbstractKotlinCompile<*> && 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 b63f9769d76..f84afcb39ec 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 @@ -68,7 +68,7 @@ internal inline fun Project.locateTask(name: String): TaskPro * with [name], type [T] and initialization script [body] */ internal inline fun Project.locateOrRegisterTask(name: String, noinline body: (T) -> (Unit)): TaskProvider { - return project.locateTask(name) ?: registerTask(project, name, T::class.java, body) + return project.locateTask(name) ?: project.registerTask(name, T::class.java, body = body) } internal open class KotlinTasksProvider(val targetName: String) { @@ -80,7 +80,7 @@ internal open class KotlinTasksProvider(val targetName: String) { ): TaskProvider { val properties = PropertiesProvider(project) val taskClass = taskOrWorkersTask(properties) - val result = registerTask(project, name, taskClass) { + val result = project.registerTask(name, taskClass) { configureAction(it) } configure(result, project, properties, compilation) 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 21db6a53ed6..4d07e4c3567 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 @@ -16,17 +16,16 @@ package org.jetbrains.kotlin.gradle.utils -import org.gradle.api.Action import org.gradle.api.GradleException import org.gradle.api.Task -import org.gradle.api.artifacts.repositories.IvyArtifactRepository -import org.gradle.api.artifacts.repositories.IvyPatternRepositoryLayout import org.gradle.api.tasks.TaskInputs import org.gradle.api.tasks.TaskOutputs import org.gradle.api.tasks.bundling.AbstractArchiveTask import org.gradle.util.GradleVersion import java.io.File +const val minSupportedGradleVersion = "5.4" + internal val Task.inputsCompatible: TaskInputs get() = inputs internal val Task.outputsCompatible: TaskOutputs get() = outputs @@ -53,7 +52,7 @@ internal fun TaskInputs.dirCompatible(dirPath: Any) { internal fun checkGradleCompatibility( withComponent: String = "the Kotlin Gradle plugin", - minSupportedVersion: GradleVersion = GradleVersion.version("4.9") + minSupportedVersion: GradleVersion = GradleVersion.version(minSupportedGradleVersion) ) { val currentVersion = GradleVersion.current() if (currentVersion < minSupportedVersion) { @@ -64,49 +63,5 @@ internal fun checkGradleCompatibility( } } -internal fun AbstractArchiveTask.setArchiveAppendixCompatible(appendixProvider: () -> String) { - if (isGradleVersionAtLeast(5, 2)) { - archiveAppendix.set(project.provider { appendixProvider() }) - } else { - @Suppress("DEPRECATION") - appendix = appendixProvider() - } -} - internal val AbstractArchiveTask.archivePathCompatible: File - get() = - if (isGradleVersionAtLeast(5, 1)) { - archiveFile.get().asFile - } else { - @Suppress("DEPRECATION") - archivePath - } - -internal val AbstractArchiveTask.archiveNameCompatible: String - get() = - if (isGradleVersionAtLeast(5, 1)) { - archiveFileName.get() - } else { - @Suppress("DEPRECATION") - archiveName - } - -internal fun AbstractArchiveTask.setArchiveClassifierCompatible(classifierProvider: () -> String) { - if (isGradleVersionAtLeast(5, 2)) { - archiveClassifier.set(project.provider { classifierProvider() }) - } else { - @Suppress("DEPRECATION") - classifier = classifierProvider() - } -} - -internal fun IvyArtifactRepository.patternLayoutCompatible(config: IvyPatternRepositoryLayout.() -> Unit) { - if (isGradleVersionAtLeast(5, 0)) { - patternLayout(config) - } else { - // The "layout" method is planned to be removed in Gradle 6.0. Access it using reflection. - javaClass - .getMethod("layout", String::class.java, Action::class.java) - .invoke(this, "pattern", Action { it.config() }) - } -} \ No newline at end of file + get() = archiveFile.get().asFile \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/providerApiUtils.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/providerApiUtils.kt index cda490b8400..bd5605ffded 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/providerApiUtils.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/providerApiUtils.kt @@ -41,13 +41,7 @@ internal fun Project.optionalProvider(initialize: () -> T?): ReadOnlyPropert // Before 5.0 fileProperty is created via ProjectLayout // https://docs.gradle.org/current/javadoc/org/gradle/api/model/ObjectFactory.html#fileProperty-- internal fun Project.newFileProperty(initialize: (() -> File)? = null): RegularFileProperty { - val regularFileProperty = if (isGradleVersionAtLeast(5, 0)) { - project.objects.fileProperty() - } else { - val projectLayoutClass = Class.forName("org.gradle.api.file.ProjectLayout") - val filePropertyMethod = projectLayoutClass.getMethod("fileProperty") - filePropertyMethod(project.layout) as RegularFileProperty - } + val regularFileProperty = project.objects.fileProperty() return regularFileProperty.apply { if (initialize != null) {