From 38fd9c3d1a9343065b18446967a544ab803bb551 Mon Sep 17 00:00:00 2001 From: Sergey Igushkin Date: Wed, 20 May 2020 04:33:16 +0300 Subject: [PATCH] Fix KT-39063 by not adding extendsFrom with metadata configurations Issue #KT-39063 Fixed --- .../kotlin/gradle/HierarchicalMppIT.kt | 12 ++++ .../hierarchical-mpp-js-test/build.gradle.kts | 60 +++++++++++++++++++ .../gradle.properties | 1 + .../settings.gradle.kts | 12 ++++ .../src/jsTest/kotlin/TestUseThirdPartyLib.kt | 11 ++++ .../resolver/KotlinCompilationNpmResolver.kt | 6 +- 6 files changed, 100 insertions(+), 2 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/hierarchical-mpp-js-test/build.gradle.kts create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/hierarchical-mpp-js-test/gradle.properties create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/hierarchical-mpp-js-test/settings.gradle.kts create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/hierarchical-mpp-js-test/src/jsTest/kotlin/TestUseThirdPartyLib.kt 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 66f79138bb4..e7dcc2709dd 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 @@ -422,6 +422,18 @@ class HierarchicalMppIT : BaseGradleIT() { } } + @Test + fun testHmppDependenciesInJsTests() { + val thirdPartyRepo = publishThirdPartyLib(withGranularMetadata = true).projectDir.parentFile.resolve("repo") + with(Project("hierarchical-mpp-js-test")) { + val taskToExecute = ":jsNodeTest" + build(taskToExecute, "-PthirdPartyRepo=$thirdPartyRepo") { + assertSuccessful() + assertTasksExecuted(taskToExecute) + } + } + } + @Test fun testProcessingDependencyDeclaredInNonRootSourceSet() { publishThirdPartyLib(withGranularMetadata = true) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/hierarchical-mpp-js-test/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/hierarchical-mpp-js-test/build.gradle.kts new file mode 100644 index 00000000000..3faa21a445b --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/hierarchical-mpp-js-test/build.gradle.kts @@ -0,0 +1,60 @@ +group = "com.h0tk3y.mpp.demo" +version = "1.0" + +plugins { + kotlin("multiplatform") +} + +repositories { + val thirdPartyRepo: String by project + maven(thirdPartyRepo) + mavenLocal() + jcenter() +} + +kotlin { + sourceSets { + val commonMain by getting { + dependencies { + implementation("com.example.thirdparty:third-party-lib:1.0") + implementation(kotlin("stdlib-common")) + } + } + + val commonTest by getting { + dependencies { + implementation(kotlin("test-common")) + implementation(kotlin("test-annotations-common")) + } + } + } + + jvm { + compilations["main"].defaultSourceSet { + dependencies { + implementation(kotlin("stdlib")) + } + } + compilations["test"].defaultSourceSet { + dependencies { + implementation(kotlin("test-junit")) + } + } + } + + js { + nodejs() + browser() + + compilations["main"].defaultSourceSet { + dependencies { + implementation(kotlin("stdlib-js")) + } + } + compilations["test"].defaultSourceSet { + dependencies { + implementation(kotlin("test-js")) + } + } + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/hierarchical-mpp-js-test/gradle.properties b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/hierarchical-mpp-js-test/gradle.properties new file mode 100644 index 00000000000..2a391fe78b0 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/hierarchical-mpp-js-test/gradle.properties @@ -0,0 +1 @@ +kotlin.mpp.enableGranularSourceSetsMetadata=true \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/hierarchical-mpp-js-test/settings.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/hierarchical-mpp-js-test/settings.gradle.kts new file mode 100644 index 00000000000..0f81f6b3861 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/hierarchical-mpp-js-test/settings.gradle.kts @@ -0,0 +1,12 @@ +pluginManagement { + repositories { + mavenLocal() + gradlePluginPortal() + } + val kotlin_version: String by settings + plugins { + kotlin("multiplatform").version(kotlin_version) + } +} + +rootProject.name = "my-lib-foo" \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/hierarchical-mpp-js-test/src/jsTest/kotlin/TestUseThirdPartyLib.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/hierarchical-mpp-js-test/src/jsTest/kotlin/TestUseThirdPartyLib.kt new file mode 100644 index 00000000000..34619938a0e --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/hierarchical-mpp-js-test/src/jsTest/kotlin/TestUseThirdPartyLib.kt @@ -0,0 +1,11 @@ +package com.example + +import com.example.thirdparty.thirdPartyFun +import kotlin.test.* + +class TestUseCoroutines { + @Test + fun testThirdPartyLibAvailable() { + assertEquals("thirdPartyFun @ js", thirdPartyFun()) + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt index 33036bdd0e5..cd112eedb2b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt @@ -20,6 +20,8 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsages import org.jetbrains.kotlin.gradle.plugin.mpp.disambiguateName +import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope +import org.jetbrains.kotlin.gradle.plugin.sources.sourceSetDependencyConfigurationByScope import org.jetbrains.kotlin.gradle.plugin.usesPlatformOf import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget import org.jetbrains.kotlin.gradle.targets.js.npm.* @@ -123,8 +125,8 @@ internal class KotlinCompilationNpmResolver( all.description = "NPM configuration for $compilation." compilation.allKotlinSourceSets.forEach { sourceSet -> - sourceSet.relatedConfigurationNames.forEach { configurationName -> - val configuration = project.configurations.getByName(configurationName) + KotlinDependencyScope.values().forEach { scope -> + val configuration = project.sourceSetDependencyConfigurationByScope(sourceSet, scope) all.extendsFrom(configuration) } }