From 723ebb4f578c2d8bebaea1e97edf33f25555c0a6 Mon Sep 17 00:00:00 2001 From: Sergey Igushkin Date: Mon, 10 Feb 2020 18:15:50 +0300 Subject: [PATCH] Fix compileOnly dependencies in HMPP (KT-36469) The `compileOnly` configuration of a source set was not included in the granular dependency transformation, which led to the dependencies from the configuration being excluded as unrequested during dependency processing. Fix this by properly including the compileOnly scope into the dependencies transformation. Issue #KT-36469 Fixed --- .../kotlin/gradle/HierarchicalMppIT.kt | 23 +++++++++++++++++++ .../mpp/TransformKotlinGranularMetadata.kt | 5 ++-- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/HierarchicalMppIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/HierarchicalMppIT.kt index 87b87f530a6..b90ba403f4e 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/HierarchicalMppIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/HierarchicalMppIT.kt @@ -395,6 +395,29 @@ class HierarchicalMppIT : BaseGradleIT() { return checkNotNull(parseKotlinSourceSetMetadataFromXml(document)) } + @Test + fun testCompileOnlyDependencyProcessingForMetadataCompilations() = with(Project("hierarchical-mpp-project-dependency")) { + publishThirdPartyLib(withGranularMetadata = true) + setupWorkingDir() + gradleBuildScript().modify(::transformBuildScriptWithPluginsDsl) + + gradleBuildScript("my-lib-foo").appendText("\ndependencies { \"jvmAndJsMainCompileOnly\"(kotlin(\"test-annotations-common\")) }") + projectDir.resolve("my-lib-foo/src/jvmAndJsMain/kotlin/UseCompileOnlyDependency.kt").writeText( + """ + import kotlin.test.Test + + class UseCompileOnlyDependency { + @Test + fun myTest() = Unit + } + """.trimIndent() + ) + + build(":my-lib-foo:compileJvmAndJsMainKotlinMetadata") { + assertSuccessful() + } + } + @Test fun testProcessingDependencyDeclaredInNonRootSourceSet() { publishThirdPartyLib(withGranularMetadata = true) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/TransformKotlinGranularMetadata.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/TransformKotlinGranularMetadata.kt index 9162359282b..ba7d30eb119 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/TransformKotlinGranularMetadata.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/TransformKotlinGranularMetadata.kt @@ -11,8 +11,7 @@ import org.gradle.api.tasks.* import org.jetbrains.kotlin.gradle.dsl.kotlinExtension import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet -import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope.API_SCOPE -import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope.IMPLEMENTATION_SCOPE +import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope.* import org.jetbrains.kotlin.gradle.plugin.sources.getSourceSetHierarchy import org.jetbrains.kotlin.gradle.targets.metadata.ALL_COMPILE_METADATA_CONFIGURATION_NAME import org.jetbrains.kotlin.gradle.targets.metadata.KotlinMetadataTargetConfigurator @@ -70,7 +69,7 @@ open class TransformKotlinGranularMetadata GranularMetadataTransformation( project, kotlinSourceSet, - listOf(API_SCOPE, IMPLEMENTATION_SCOPE), + listOf(API_SCOPE, IMPLEMENTATION_SCOPE, COMPILE_ONLY_SCOPE), project.configurations.getByName(ALL_COMPILE_METADATA_CONFIGURATION_NAME), lazy { KotlinMetadataTargetConfigurator.dependsOnWithInterCompilationDependencies(project, kotlinSourceSet).map {