diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/VariantAwareDependenciesMppIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/VariantAwareDependenciesMppIT.kt index 3e502fb3d86..563389edd2f 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/VariantAwareDependenciesMppIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/VariantAwareDependenciesMppIT.kt @@ -163,10 +163,10 @@ class VariantAwareDependenciesMppIT : BaseGradleIT() { gradleBuildScript().appendText( "\n" + """ dependencies { - jvm6Implementation project(':${innerJvmProject.projectName}') - jvm6TestRuntimeOnly project(':${innerJvmProject.projectName}') - nodeJsImplementation project(':${innerJsProject.projectName}') - nodeJsTestRuntimeOnly project(':${innerJsProject.projectName}') + jvm6CompilationImplementation project(':${innerJvmProject.projectName}') + jvm6TestCompilationRuntimeOnly project(':${innerJvmProject.projectName}') + nodeJsCompilationImplementation project(':${innerJsProject.projectName}') + nodeJsTestCompilationRuntimeOnly project(':${innerJsProject.projectName}') } """.trimIndent() ) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-js-dce/mainProject/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-js-dce/mainProject/build.gradle index 08c6f3b7990..117de65adf7 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-js-dce/mainProject/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-js-dce/mainProject/build.gradle @@ -20,9 +20,9 @@ kotlin.targets.fromPreset(kotlin.presets.js, 'browser') { } dependencies { - browserImplementation project(":libraryProject") - browserImplementation "org.jetbrains.kotlin:kotlin-stdlib-js" - browserImplementation "org.mozilla:rhino:1.7.7.1" + browserCompilationImplementation project(":libraryProject") + browserCompilationImplementation "org.jetbrains.kotlin:kotlin-stdlib-js" + browserCompilationImplementation "org.mozilla:rhino:1.7.7.1" } tasks.named('compileKotlinBrowser') { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/CompilationDetails.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/CompilationDetails.kt index 90e9e3cda86..e5573dd18c3 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/CompilationDetails.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/CompilationDetails.kt @@ -96,6 +96,7 @@ open class DefaultCompilationDetails( lowerCamelCaseName( target.disambiguationClassifier, compilationPurpose.takeIf { it != KotlinCompilation.MAIN_COMPILATION_NAME }, + "compilation", ) ) @@ -592,6 +593,7 @@ internal open class JsCompilationDetails( return lowerCamelCaseName( disambiguationClassifierInPlatform, compilationPurpose.takeIf { it != KotlinCompilation.MAIN_COMPILATION_NAME }, + "compilation", simpleName ) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/ConfigurationsTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/ConfigurationsTest.kt index a637dddacb0..6d4542b9199 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/ConfigurationsTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/ConfigurationsTest.kt @@ -10,12 +10,14 @@ package org.jetbrains.kotlin.gradle import org.gradle.api.attributes.Category import org.gradle.api.attributes.Usage import org.gradle.kotlin.dsl.withType +import org.jetbrains.kotlin.gradle.dsl.kotlinExtension import org.jetbrains.kotlin.gradle.mpp.buildProjectWithMPP import org.jetbrains.kotlin.gradle.mpp.kotlin import org.jetbrains.kotlin.gradle.plugin.KotlinJsCompilerType import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsages +import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.targets import org.jetbrains.kotlin.gradle.targets.js.KotlinJsCompilerAttribute import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl @@ -145,10 +147,72 @@ class ConfigurationsTest : MultiplatformExtensionTest() { } } } - with(project.evaluate()) { - assertContainsDependencies("jsApi", "test:compilation-dependency", "test:source-set-dependency") + + project.evaluate() + + with(project) { + assertContainsDependencies("jsCompilationApi", "test:compilation-dependency", "test:source-set-dependency") assertContainsDependencies("jsMainApi", "test:source-set-dependency") assertNotContainsDependencies("jsMainApi", "test:compilation-dependency") } } + + @Test + fun `test compilation and source set configurations don't clash`() { + val project = buildProjectWithMPP { + kotlin { + jvm() + js(BOTH) + linuxX64("linux") + } + } + + project.evaluate() + + project.kotlinExtension.targets.flatMap { it.compilations }.forEach { compilation -> + val compilationSourceSets = compilation.allKotlinSourceSets + val compilationConfigurationNames = compilation.relatedConfigurationNames + val sourceSetConfigurationNames = compilationSourceSets.flatMapTo(mutableSetOf()) { it.relatedConfigurationNames } + + assert(compilationConfigurationNames.none { it in sourceSetConfigurationNames }) { + """A name clash between source set and compilation configurations detected for the following configurations: + |${compilationConfigurationNames.filter { it in sourceSetConfigurationNames }.joinToString()} + """.trimMargin() + } + } + } + + @Test + fun `test scoped sourceSet's configurations don't extend other configurations`() { + val project = buildProjectWithMPP { + kotlin { + jvm() + js(BOTH) + linuxX64("linux") + } + } + + project.evaluate() + + for (sourceSet in project.kotlinExtension.sourceSets) { + val configurationNames = listOf( + sourceSet.implementationConfigurationName, + sourceSet.apiConfigurationName, + sourceSet.compileOnlyConfigurationName, + sourceSet.runtimeOnlyConfigurationName, + ) + + for (name in configurationNames) { + val extendsFrom = project.configurations.getByName(name).extendsFrom + assert(extendsFrom.isEmpty()) { + "Configuration $name is not expected to be extending anything, but it extends: ${ + extendsFrom.joinToString( + prefix = "[", + postfix = "]" + ) { it.name } + }" + } + } + } + } } \ No newline at end of file