diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt index b33ef668bd3..52152745c0e 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt @@ -776,7 +776,7 @@ class KotlinGradleIT : BaseGradleIT() { setupWorkingDir() // Add a dependency with an explicit lower Kotlin version that has a kotlin-stdlib transitive dependency: gradleBuildScript().appendText("\ndependencies { implementation 'org.jetbrains.kotlin:kotlin-reflect:1.2.71' }") - testResolveAllConfigurations(options = defaultBuildOptions().copy(warningMode = WarningMode.Summary)) { + testResolveAllConfigurations { assertSuccessful() assertContains(">> :compileClasspath --> kotlin-reflect-1.2.71.jar") // Check that the default newer Kotlin version still wins for 'kotlin-stdlib': 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 83dec6bfea6..169c996a960 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 @@ -1368,14 +1368,12 @@ class NewMultiplatformIT : BaseGradleIT() { fun testDependenciesDsl() = with(transformProjectWithPluginsDsl("newMppDependenciesDsl")) { val originalBuildscriptContent = gradleBuildScript("app").readText() - fun testDependencies() = - testResolveAllConfigurations("app", options = defaultBuildOptions().copy(warningMode = WarningMode.Summary)) { - assertContains(">> :app:testNonTransitiveStringNotationApiDependenciesMetadata --> junit-4.12.jar") - assertEquals( - 1, - (Regex.escape(">> :app:testNonTransitiveStringNotationApiDependenciesMetadata") + " .*").toRegex().findAll(output) - .count() - ) + fun testDependencies() = testResolveAllConfigurations("app") { + assertContains(">> :app:testNonTransitiveStringNotationApiDependenciesMetadata --> junit-4.12.jar") + assertEquals( + 1, + (Regex.escape(">> :app:testNonTransitiveStringNotationApiDependenciesMetadata") + " .*").toRegex().findAll(output).count() + ) assertContains(">> :app:testNonTransitiveDependencyNotationApiDependenciesMetadata --> kotlin-reflect-${defaultBuildOptions().kotlinVersion}.jar") assertEquals( @@ -1405,7 +1403,7 @@ class NewMultiplatformIT : BaseGradleIT() { @Test fun testMultipleTargetsSamePlatform() = with(Project("newMppMultipleTargetsSamePlatform", gradleVersion)) { - testResolveAllConfigurations("app", options = defaultBuildOptions().copy(warningMode = WarningMode.Summary)) { + testResolveAllConfigurations("app") { assertContains(">> :app:junitCompileClasspath --> lib-junit.jar") assertContains(">> :app:junitCompileClasspath --> junit-4.12.jar") diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/VariantAwareDependenciesIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/VariantAwareDependenciesIT.kt index 159771ba539..41087ec50a3 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/VariantAwareDependenciesIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/VariantAwareDependenciesIT.kt @@ -14,10 +14,6 @@ import kotlin.test.assertTrue class VariantAwareDependenciesIT : BaseGradleIT() { private val gradleVersion = GradleVersionRequired.FOR_MPP_SUPPORT - override fun defaultBuildOptions(): BuildOptions { - return super.defaultBuildOptions().copy(warningMode = WarningMode.Summary) - } - @Test fun testJvmKtAppResolvesMppLib() { val outerProject = Project("sample-lib", gradleVersion, "new-mpp-lib-and-app") @@ -25,10 +21,9 @@ class VariantAwareDependenciesIT : BaseGradleIT() { with(outerProject) { embedProject(innerProject) - gradleBuildScript(innerProject.projectName).appendText("\ndependencies { compile rootProject }") - + gradleBuildScript(innerProject.projectName).appendText("\ndependencies { implementation rootProject }") testResolveAllConfigurations(innerProject.projectName) { - assertContains(">> :${innerProject.projectName}:runtime --> sample-lib-jvm6-1.0.jar") + assertContains(">> :${innerProject.projectName}:runtimeClasspath --> sample-lib-jvm6-1.0.jar") } } } @@ -40,21 +35,23 @@ class VariantAwareDependenciesIT : BaseGradleIT() { with(outerProject) { embedProject(innerProject) - gradleBuildScript(innerProject.projectName).appendText("\nrepositories { jcenter() }; dependencies { compile rootProject }") + gradleBuildScript(innerProject.projectName).appendText("\nrepositories { jcenter() }; dependencies { implementation rootProject }") testResolveAllConfigurations( - subproject = innerProject.projectName + subproject = innerProject.projectName, + options = defaultBuildOptions().copy(warningMode = WarningMode.Summary) ) { - assertContains(">> :${innerProject.projectName}:runtime --> sample-lib-nodejs-1.0.jar") + assertContains(">> :${innerProject.projectName}:runtimeClasspath --> sample-lib-nodejs-1.0.jar") } gradleProperties().appendText(jsCompilerType(KotlinJsCompilerType.IR)) testResolveAllConfigurations( subproject = innerProject.projectName, - skipSetup = true + skipSetup = true, + options = defaultBuildOptions().copy(warningMode = WarningMode.Summary) ) { - assertContains(">> :${innerProject.projectName}:runtime --> sample-lib-nodejs-1.0.klib") + assertContains(">> :${innerProject.projectName}:runtimeClasspath --> sample-lib-nodejs-1.0.klib") } } } @@ -81,7 +78,7 @@ class VariantAwareDependenciesIT : BaseGradleIT() { embedProject(innerProject) gradleBuildScript().appendText("\ndependencies { nodeJsMainImplementation project(':${innerProject.projectName}') }") - testResolveAllConfigurations(innerProject.projectName) + testResolveAllConfigurations(innerProject.projectName, options = defaultBuildOptions().copy(warningMode = WarningMode.Summary)) } } @@ -110,7 +107,7 @@ class VariantAwareDependenciesIT : BaseGradleIT() { with(outerProject) { embedProject(innerProject) - gradleBuildScript(innerProject.projectName).appendText("\ndependencies { compile rootProject }") + gradleBuildScript(innerProject.projectName).appendText("\ndependencies { implementation rootProject }") testResolveAllConfigurations(innerProject.projectName) } @@ -123,7 +120,7 @@ class VariantAwareDependenciesIT : BaseGradleIT() { with(outerProject) { embedProject(innerProject) - gradleBuildScript(innerProject.projectName).appendText("\ndependencies { compile rootProject }") + gradleBuildScript(innerProject.projectName).appendText("\ndependencies { implementation rootProject }") testResolveAllConfigurations(innerProject.projectName) } @@ -136,7 +133,7 @@ class VariantAwareDependenciesIT : BaseGradleIT() { with(outerProject) { embedProject(innerProject) - gradleBuildScript(innerProject.projectName).appendText("\ndependencies { compile rootProject }") + gradleBuildScript(innerProject.projectName).appendText("\ndependencies { implementation rootProject }") gradleBuildScript(innerProject.projectName).appendText( // Newer Gradle versions fail to resolve the deprecated configurations because of variant-aware resolution ambiguity between @@ -150,7 +147,7 @@ class VariantAwareDependenciesIT : BaseGradleIT() { """.trimIndent() ) - testResolveAllConfigurations(innerProject.projectName) + testResolveAllConfigurations(innerProject.projectName, options = defaultBuildOptions().copy(warningMode = WarningMode.Summary)) } } @@ -175,7 +172,7 @@ class VariantAwareDependenciesIT : BaseGradleIT() { """.trimIndent() ) - testResolveAllConfigurations(innerJvmProject.projectName) + testResolveAllConfigurations(innerJvmProject.projectName, options = defaultBuildOptions().copy(warningMode = WarningMode.Summary)) } } @@ -188,12 +185,12 @@ class VariantAwareDependenciesIT : BaseGradleIT() { embedProject(innerProject) gradleBuildScript(innerProject.projectName).appendText( - "\ndependencies { testCompile project(path: ':', configuration: 'jvm6TestRuntime') }" + "\ndependencies { testImplementation project(path: ':', configuration: 'jvm6TestRuntime') }" ) testResolveAllConfigurations(innerProject.projectName) { - assertContains(">> :${innerProject.projectName}:testCompile --> sample-lib-jvm6-1.0.jar") - assertContains(">> :${innerProject.projectName}:testRuntime --> sample-lib-jvm6-1.0.jar") + assertContains(">> :${innerProject.projectName}:testCompileClasspath --> sample-lib-jvm6-1.0.jar") + assertContains(">> :${innerProject.projectName}:testRuntimeClasspath --> sample-lib-jvm6-1.0.jar") } } } @@ -220,7 +217,7 @@ class VariantAwareDependenciesIT : BaseGradleIT() { testResolveAllConfigurations( project.projectName, - excludePredicate = "it.name in ['compile', 'runtime', 'testCompile', 'testRuntime', 'default']" + options = defaultBuildOptions().copy(warningMode = WarningMode.Summary) ) } } @@ -229,7 +226,6 @@ class VariantAwareDependenciesIT : BaseGradleIT() { @Test fun testResolvesOldKotlinArtifactsPublishedWithMetadata() = with(Project("multiplatformProject", gradleVersion)) { setupWorkingDir() - projectDir.resolve("settings.gradle").appendText("\nenableFeaturePreview 'GRADLE_METADATA'") gradleBuildScript().appendText( "\n" + """ configure([project(':lib'), project(':libJvm'), project(':libJs')]) { @@ -252,13 +248,13 @@ class VariantAwareDependenciesIT : BaseGradleIT() { "\nsubprojects { repositories { maven { url \"file://${'$'}{rootDir.absolutePath.replace('\\\\', '/')}/repo\" } } }" } - gradleBuildScript("lib").appendText("\ndependencies { compile 'com.example.oldmpp:lib:1.0' }") + gradleBuildScript("lib").appendText("\ndependencies { implementation 'com.example.oldmpp:lib:1.0' }") testResolveAllConfigurations("lib") - gradleBuildScript("libJvm").appendText("\ndependencies { compile 'com.example.oldmpp:libJvm:1.0' }") + gradleBuildScript("libJvm").appendText("\ndependencies { implementation 'com.example.oldmpp:libJvm:1.0' }") testResolveAllConfigurations("libJvm") - gradleBuildScript("libJs").appendText("\ndependencies { compile 'com.example.oldmpp:libJs:1.0' }") + gradleBuildScript("libJs").appendText("\ndependencies { implementation 'com.example.oldmpp:libJs:1.0' }") testResolveAllConfigurations("libJs") embedProject(Project("sample-lib", directoryPrefix = "new-mpp-lib-and-app")) @@ -287,13 +283,22 @@ class VariantAwareDependenciesIT : BaseGradleIT() { // variants chosen over the runtime ones when resolving a configuration with no required Usage: with(Project("simpleProject")) { setupWorkingDir() - gradleBuildScript().appendText("\ndependencies { compile 'org.jetbrains.kotlin:kotlin-compiler-embeddable' }") + gradleBuildScript().appendText( + "\n" + """ + dependencies { implementation 'org.jetbrains.kotlin:kotlin-compiler-embeddable' } + + configurations { + customConfiguration.extendsFrom implementation + customConfiguration.canBeResolved(true) + } + """.trimIndent() + ) testResolveAllConfigurations { - assertContains(">> :compile --> kotlin-compiler-embeddable-${defaultBuildOptions().kotlinVersion}.jar") + assertContains(">> :customConfiguration --> kotlin-compiler-embeddable-${defaultBuildOptions().kotlinVersion}.jar") // Check that the transitive dependencies with 'runtime' scope are also available: - assertContains(">> :compile --> kotlin-script-runtime-${defaultBuildOptions().kotlinVersion}.jar") + assertContains(">> :customConfiguration --> kotlin-script-runtime-${defaultBuildOptions().kotlinVersion}.jar") } } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/testResolveAllConfigurations.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/testResolveAllConfigurations.kt index 42d9a25933d..1f26ef43648 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/testResolveAllConfigurations.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/testResolveAllConfigurations.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.gradle.util -import org.gradle.api.logging.configuration.WarningMode import org.jetbrains.kotlin.gradle.BaseGradleIT import kotlin.test.assertTrue @@ -16,7 +15,7 @@ private val unresolvedConfigurationRegex = "${Regex.escape(UNRESOLVED_MARKER)}(. fun BaseGradleIT.Project.testResolveAllConfigurations( subproject: String? = null, skipSetup: Boolean = false, - excludePredicate: String = "false", + excludeConfigurations: List = listOf(), options: BaseGradleIT.BuildOptions = testCase.defaultBuildOptions(), withUnresolvedConfigurationNames: BaseGradleIT.CompiledProject.(List) -> Unit = { assertTrue("Unresolved configurations: $it") { it.isEmpty() } } ) = with(testCase) { @@ -25,8 +24,8 @@ fun BaseGradleIT.Project.testResolveAllConfigurations( setupWorkingDir() gradleBuildScript(subproject).run { val taskCode = when (extension) { - "gradle" -> generateResolveAllConfigurationsTask(excludePredicate) - "kts" -> generateResolveAllConfigurationsTaskKts(excludePredicate) + "gradle" -> generateResolveAllConfigurationsTask(excludeConfigurations) + "kts" -> generateResolveAllConfigurationsTaskKts(excludeConfigurations) else -> error("Unexpected build script extension $extension") } appendText("\n" + taskCode) @@ -41,13 +40,16 @@ fun BaseGradleIT.Project.testResolveAllConfigurations( } } -private fun generateResolveAllConfigurationsTask(exclude: String) = +private fun generateResolveAllConfigurationsTask(excludes: List) = """ task $RESOLVE_ALL_CONFIGURATIONS_TASK_NAME { doFirst { + def excludeConfigs = ["default", "archives"] + ${computeExcludeConfigurations(excludes)} + project.configurations .matching { it.canBeResolved } - .matching { !{ $exclude }.call(it) } + .matching { !excludeConfigs.contains(it.name) } .each { configuration -> try { println "Resolving " + configuration.path @@ -66,13 +68,16 @@ private fun generateResolveAllConfigurationsTask(exclude: String) = } """.trimIndent() -private fun generateResolveAllConfigurationsTaskKts(exclude: String) = +private fun generateResolveAllConfigurationsTaskKts(excludes: List) = """ tasks.create("$RESOLVE_ALL_CONFIGURATIONS_TASK_NAME") { doFirst { + val excludeConfigs = mutableListOf("default", "archives") + ${computeExcludeConfigurations(excludes)} + project.configurations .filter { it.isCanBeResolved } - .filterNot { $exclude } + .filterNot { excludeConfigs.contains(it.name) } .forEach { configuration -> val path = (configuration as org.gradle.api.internal.artifacts.configurations.ConfigurationInternal).path try { @@ -90,4 +95,24 @@ private fun generateResolveAllConfigurationsTaskKts(exclude: String) = } } } - """.trimIndent() \ No newline at end of file + """.trimIndent() + +private fun computeExcludeConfigurations(excludes: List): String { + val deprecatedConfigurations = listOf("compile", "runtime", "compileOnly", "runtimeOnly") + return """ + sourceSets.forEach { sourceSet -> + "${deprecatedConfigurations.joinToString()}".split(", ").toList().forEach { + excludeConfigs.add(sourceSet.name + it.capitalize()) + } + } + + "${deprecatedConfigurations.joinToString()}".split(", ").toList().forEach { + excludeConfigs.add(it) + excludeConfigs.add("test" + it.capitalize()) + } + + "${excludes.joinToString()}".split(", ").toList().forEach { + excludeConfigs.add(it) + } + """.trimIndent() +} \ No newline at end of file