From 768c165a723bc7c241a9fbbe9f89b5aeb22b4303 Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Wed, 31 Mar 2021 11:19:53 +0200 Subject: [PATCH] Fix Gradle 7 deprecation on adding associated compilation dependencies. ^KT-45787 Fixed --- .../kotlin/gradle/KotlinGradlePluginIT.kt | 20 +++++++++++++ .../associatedDependencies/build.gradle | 29 +++++++++++++++++++ .../associatedDependencies/settings.gradle | 11 +++++++ .../gradle/plugin/mpp/kotlinCompilations.kt | 19 +++++++----- 4 files changed, 72 insertions(+), 7 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/associatedDependencies/build.gradle create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/associatedDependencies/settings.gradle 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 4b3510e3e7d..d58359d3136 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 @@ -1207,4 +1207,24 @@ class KotlinGradleIT : BaseGradleIT() { assertTrue(compiledKotlinClasses.isEmpty()) } } + + /** Regression test for KT-45787. **/ + @Test + fun testPluginDoesNotUseDeprecatedConfigurationsForAssociatedDependencies() { + with( + Project( + projectName = "associatedDependencies", + minLogLevel = LogLevel.INFO + ) + ) { + setupWorkingDir() + + build( + "tasks", + options = defaultBuildOptions().copy(warningMode = WarningMode.Fail) + ) { + assertSuccessful() + } + } + } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/associatedDependencies/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/associatedDependencies/build.gradle new file mode 100644 index 00000000000..dcea7225fea --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/associatedDependencies/build.gradle @@ -0,0 +1,29 @@ +plugins { + id "org.jetbrains.kotlin.jvm" +} + +sourceSets { + integrationTest { + kotlin { + srcDirs += "src/integrationTest/kotlin" + } + java { + srcDirs += "src/integrationTest/java" + } + resources { + srcDirs += "src/integrationTest/resources" + } + compileClasspath += main.output + test.output + runtimeClasspath += main.output + test.output + } +} + +kotlin { + target { + java + compilations.integrationTest { + associateWith compilations.main + associateWith compilations.test + } + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/associatedDependencies/settings.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/associatedDependencies/settings.gradle new file mode 100644 index 00000000000..de7969b173a --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/associatedDependencies/settings.gradle @@ -0,0 +1,11 @@ +pluginManagement { + repositories { + mavenLocal() + mavenCentral() + gradlePluginPortal() + } + + plugins { + id "org.jetbrains.kotlin.jvm" version "$kotlin_version" + } +} 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 a75801a914d..2635bdf5bed 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 @@ -253,18 +253,23 @@ abstract class AbstractKotlinCompilation( } protected open fun addAssociateCompilationDependencies(other: KotlinCompilation<*>) { - target.project.dependencies.run { - val project = target.project + with(target.project) { - add( - compileDependencyConfigurationName, - project.files(Callable { other.output.classesDirs }, Callable { other.compileDependencyFiles }) + dependencies.add( + compileOnlyConfigurationName, + project.files(Callable { other.output.classesDirs }) ) + configurations.named(compileOnlyConfigurationName).configure { + it.extendsFrom(configurations.findByName(other.compileDependencyConfigurationName)) + } + if (this@AbstractKotlinCompilation is KotlinCompilationToRunnableFiles<*>) { - add(runtimeDependencyConfigurationName, project.files(Callable { other.output.allOutputs })) + dependencies.add(runtimeOnlyConfigurationName, project.files(Callable { other.output.allOutputs })) if (other is KotlinCompilationToRunnableFiles<*>) { - add(runtimeDependencyConfigurationName, project.files(Callable { other.runtimeDependencyFiles })) + configurations.named(runtimeOnlyConfigurationName).configure { + it.extendsFrom(configurations.findByName(other.runtimeDependencyConfigurationName)) + } } } }