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
This commit is contained in:
Sergey Igushkin
2020-02-10 18:15:50 +03:00
parent 9b861739cd
commit 723ebb4f57
2 changed files with 25 additions and 3 deletions
@@ -395,6 +395,29 @@ class HierarchicalMppIT : BaseGradleIT() {
return checkNotNull(parseKotlinSourceSetMetadataFromXml(document)) 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 @Test
fun testProcessingDependencyDeclaredInNonRootSourceSet() { fun testProcessingDependencyDeclaredInNonRootSourceSet() {
publishThirdPartyLib(withGranularMetadata = true) publishThirdPartyLib(withGranularMetadata = true)
@@ -11,8 +11,7 @@ import org.gradle.api.tasks.*
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet 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.*
import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope.IMPLEMENTATION_SCOPE
import org.jetbrains.kotlin.gradle.plugin.sources.getSourceSetHierarchy 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.ALL_COMPILE_METADATA_CONFIGURATION_NAME
import org.jetbrains.kotlin.gradle.targets.metadata.KotlinMetadataTargetConfigurator import org.jetbrains.kotlin.gradle.targets.metadata.KotlinMetadataTargetConfigurator
@@ -70,7 +69,7 @@ open class TransformKotlinGranularMetadata
GranularMetadataTransformation( GranularMetadataTransformation(
project, project,
kotlinSourceSet, kotlinSourceSet,
listOf(API_SCOPE, IMPLEMENTATION_SCOPE), listOf(API_SCOPE, IMPLEMENTATION_SCOPE, COMPILE_ONLY_SCOPE),
project.configurations.getByName(ALL_COMPILE_METADATA_CONFIGURATION_NAME), project.configurations.getByName(ALL_COMPILE_METADATA_CONFIGURATION_NAME),
lazy { lazy {
KotlinMetadataTargetConfigurator.dependsOnWithInterCompilationDependencies(project, kotlinSourceSet).map { KotlinMetadataTargetConfigurator.dependsOnWithInterCompilationDependencies(project, kotlinSourceSet).map {