From 38cd8ee7e76000c2d174d5da9d83dd4e2d78e803 Mon Sep 17 00:00:00 2001 From: Dmitry Savvinov Date: Wed, 26 Jul 2023 12:40:18 +0200 Subject: [PATCH] [mpp] Don't report kotlin-test as pre-HMPP dependency - Exclude kotlin-stdlib and kotlin-test from reporting - kotlin-stdlib wasn't reported, because it doesn't even have Gradle modular metadata (so no o.j.k.platform.type attribute, and check doesn't work). This commit explicitly excludes kotlin-stdlib, so that when it starts publishing Gradle Modular Metadata, nothing would break - kotlin-test was reported only when it is declared in commonMain, because we're checking only metadata compilations, and commonTest isn't compiled to metadata - Depending on kotlin-test is an odd configuration, but it arises sometimes (e.g. when people extract some test utilities in a separate Gradle project) ^KT-58872 --- .../mpp/PreHmppDependenciesDeprecationIT.kt | 5 ++++ .../build.gradle.kts | 23 +++++++++++++++++++ .../PreHmppDependenciesUsageChecker.kt | 10 ++++++++ 3 files changed, 38 insertions(+) create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/preHmppDependenciesDeprecation/noWarningsOnKotlinTestIfAddedInCommonMain/build.gradle.kts diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/PreHmppDependenciesDeprecationIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/PreHmppDependenciesDeprecationIT.kt index 49321e4219e..f37c122ae26 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/PreHmppDependenciesDeprecationIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/mpp/PreHmppDependenciesDeprecationIT.kt @@ -60,6 +60,11 @@ class PreHmppDependenciesDeprecationIT : KGPBaseTest() { checkDiagnostics(gradleVersion, "noWarningsOnPopularDependencies") } + @GradleTest + fun testNoWarningsOnKotlinTestIfAddedInCommonMain(gradleVersion: GradleVersion) { + checkDiagnostics(gradleVersion, "noWarningsOnKotlinTestIfAddedInCommonMain") + } + @GradleTest fun testNoWarningsOnProjectDependencies(gradleVersion: GradleVersion) { checkDiagnostics(gradleVersion, "noWarningsOnProjectDependencies", projectPathToCheck = ":consumer") diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/preHmppDependenciesDeprecation/noWarningsOnKotlinTestIfAddedInCommonMain/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/preHmppDependenciesDeprecation/noWarningsOnKotlinTestIfAddedInCommonMain/build.gradle.kts new file mode 100644 index 00000000000..e691e70abd8 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/preHmppDependenciesDeprecation/noWarningsOnKotlinTestIfAddedInCommonMain/build.gradle.kts @@ -0,0 +1,23 @@ +plugins { + kotlin("multiplatform") +} + +repositories { + mavenCentral() + mavenLocal() + maven("") +} + +kotlin { + jvm() { + } + linuxX64() + + sourceSets.getByName("commonMain").dependencies { + implementation(kotlin("test")) + } + + sourceSets.getByName("jvmMain").dependencies { + implementation(kotlin("test-junit")) + } +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/checkers/PreHmppDependenciesUsageChecker.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/checkers/PreHmppDependenciesUsageChecker.kt index a79d5f340ba..0cba510af94 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/checkers/PreHmppDependenciesUsageChecker.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/diagnostics/checkers/PreHmppDependenciesUsageChecker.kt @@ -72,6 +72,7 @@ internal object PreHmppDependenciesUsageChecker : KotlinGradleProjectChecker { } private fun isPreHmppDependency(dependency: ResolvedDependencyResult): Boolean { + if (isAllowedDependency(dependency.selected.id)) return false val attributes = dependency.resolvedVariant.attributes val kotlinPlatformAttribute = attributes.getAttribute(Attribute.of(KotlinPlatformType.attribute.name, String::class.java)) ?: return false @@ -79,4 +80,13 @@ internal object PreHmppDependenciesUsageChecker : KotlinGradleProjectChecker { return kotlinPlatformAttribute == KotlinPlatformType.common.name && usageAttribute != KotlinUsages.KOTLIN_METADATA } + + private fun isAllowedDependency(identifier: ComponentIdentifier): Boolean { + return when { + identifier !is ModuleComponentIdentifier -> false + identifier.group != "org.jetbrains.kotlin" -> false + identifier.module.contains("kotlin-stdlib") || identifier.module.contains("kotlin-test") -> true + else -> false + } + } }