From 0830977d1606f6eaa60e454086ac4f842e67d495 Mon Sep 17 00:00:00 2001 From: Sergey Igushkin Date: Mon, 11 Mar 2019 17:26:22 +0300 Subject: [PATCH] Exclude the configurations of source sets from dependency resolution The `*Api`, `*Implementation`, `*CompileOnly`, and `*RuntimeOnly` configurations of a `KotlinSourceSet` must not be resolved directly, as they lack attributes needed to choose a Kotlin MPP variant, and they must not be candidates in variant-aware resolution of a project dependency either. With Gradle 5.3, these configurations failed to resolve anyway, as they had no proper `org.gradle.usage` attribute, and the disambiguation rules of the 'java-base' plugin conflicted with the Kotlin rules. --- .../kotlin/gradle/NewMultiplatformIT.kt | 18 +++++++++--------- .../plugin/sources/KotlinSourceSetFactory.kt | 7 ++++++- 2 files changed, 15 insertions(+), 10 deletions(-) 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 d4c52066e3a..fe36cb5bd47 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 @@ -1499,18 +1499,18 @@ class NewMultiplatformIT : BaseGradleIT() { val originalBuildscriptContent = gradleBuildScript("app").readText() fun testDependencies() = testResolveAllConfigurations("app") { - assertContains(">> :app:testNonTransitiveStringNotationApi --> junit-4.12.jar") - assertEquals(1, (Regex.escape(">> :app:testNonTransitiveStringNotationApi") + " .*").toRegex().findAll(output).count()) + assertContains(">> :app:testNonTransitiveStringNotationApiDependenciesMetadata --> junit-4.12.jar") + assertEquals(1, (Regex.escape(">> :app:testNonTransitiveStringNotationApiDependenciesMetadata") + " .*").toRegex().findAll(output).count()) - assertContains(">> :app:testNonTransitiveDependencyNotationApi --> kotlin-reflect-${defaultBuildOptions().kotlinVersion}.jar") - assertEquals(1, (Regex.escape(">> :app:testNonTransitiveStringNotationApi") + " .*").toRegex().findAll(output).count()) + assertContains(">> :app:testNonTransitiveDependencyNotationApiDependenciesMetadata --> kotlin-reflect-${defaultBuildOptions().kotlinVersion}.jar") + assertEquals(1, (Regex.escape(">> :app:testNonTransitiveStringNotationApiDependenciesMetadata") + " .*").toRegex().findAll(output).count()) - assertContains(">> :app:testExplicitKotlinVersionApi --> kotlin-reflect-1.3.0.jar") - assertContains(">> :app:testExplicitKotlinVersionImplementation --> kotlin-reflect-1.2.71.jar") - assertContains(">> :app:testExplicitKotlinVersionCompileOnly --> kotlin-reflect-1.2.70.jar") - assertContains(">> :app:testExplicitKotlinVersionRuntimeOnly --> kotlin-reflect-1.2.60.jar") + assertContains(">> :app:testExplicitKotlinVersionApiDependenciesMetadata --> kotlin-reflect-1.3.0.jar") + assertContains(">> :app:testExplicitKotlinVersionImplementationDependenciesMetadata --> kotlin-reflect-1.2.71.jar") + assertContains(">> :app:testExplicitKotlinVersionCompileOnlyDependenciesMetadata --> kotlin-reflect-1.2.70.jar") + assertContains(">> :app:testExplicitKotlinVersionRuntimeOnlyDependenciesMetadata --> kotlin-reflect-1.2.60.jar") - assertContains(">> :app:testProjectWithConfigurationApi --> output.txt") + assertContains(">> :app:testProjectWithConfigurationApiDependenciesMetadata --> output.txt") } testDependencies() 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 bf0265b92a6..fc91716998c 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 @@ -38,7 +38,12 @@ internal abstract class KotlinSourceSetFactory internal con private fun defineSourceSetConfigurations(project: Project, sourceSet: KotlinSourceSet) = with(project.configurations) { sourceSet.relatedConfigurationNames.forEach { configurationName -> - maybeCreate(configurationName) + maybeCreate(configurationName).apply { + if (!configurationName.endsWith(METADATA_CONFIGURATION_NAME_SUFFIX)) { + isCanBeResolved = false + } + isCanBeConsumed = false + } } }