[MPP] Don't apply common parts of IDE import resolution for JVM+Android
- Don't resolve common parts of MPP libraries
- Filter out kotlin-stdlib-common
KT-56453
(cherry picked from commit 1b8c517e1eb340656bacb6edec900454b36946cb)
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImportFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImportFactory.kt
index aa89279..b68657d 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImportFactory.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImportFactory.kt
@@ -67,7 +67,7 @@
registerDependencyResolver(
resolver = IdeTransformedMetadataDependencyResolver,
- constraint = !SourceSetConstraint.isLeaf,
+ constraint = !SourceSetConstraint.isLeaf and !SourceSetConstraint.isJvmAndAndroid,
phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default
)
@@ -150,7 +150,8 @@
registerDependencyTransformer(
transformer = IdePlatformStdlibCommonDependencyFilter,
- constraint = SourceSetConstraint.isSinglePlatformType and !SourceSetConstraint.isSharedNative,
+ constraint = SourceSetConstraint.isSinglePlatformType and !SourceSetConstraint.isSharedNative
+ or SourceSetConstraint.isJvmAndAndroid,
phase = IdeMultiplatformImport.DependencyTransformationPhase.DependencyFilteringPhase,
)
diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeTransformedMetadataDependencyResolverTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeTransformedMetadataDependencyResolverTest.kt
index 610be4a..3f01239 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeTransformedMetadataDependencyResolverTest.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeTransformedMetadataDependencyResolverTest.kt
@@ -8,14 +8,18 @@
package org.jetbrains.kotlin.gradle.dependencyResolutionTests.tcs
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
+import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinBinaryDependency
import org.jetbrains.kotlin.gradle.idea.testFixtures.tcs.assertMatches
import org.jetbrains.kotlin.gradle.idea.testFixtures.tcs.binaryCoordinates
import org.jetbrains.kotlin.gradle.dependencyResolutionTests.kpm.mavenCentralCacheRedirector
+import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
import org.jetbrains.kotlin.gradle.plugin.ide.dependencyResolvers.IdeTransformedMetadataDependencyResolver
import org.jetbrains.kotlin.gradle.util.buildProject
import org.jetbrains.kotlin.gradle.util.enableDefaultStdlibDependency
import org.jetbrains.kotlin.gradle.util.enableDependencyVerification
import org.jetbrains.kotlin.gradle.util.applyMultiplatformPlugin
+import org.jetbrains.kotlin.gradle.plugin.ide.kotlinIdeMultiplatformImport
+import org.jetbrains.kotlin.gradle.util.*
import org.junit.Test
class IdeTransformedMetadataDependencyResolverTest {
@@ -68,4 +72,50 @@
binaryCoordinates("com.arkivanov.essenty:instance-keeper:0.4.2:commonMain")
)
}
-}
\ No newline at end of file
+
+ @Test
+ fun `test OKIO in JVM + Android project`() {
+ val project = buildProject {
+ enableDependencyVerification(false)
+ applyMultiplatformPlugin()
+ repositories.mavenLocal()
+ repositories.mavenCentralCacheRedirector()
+ repositories.google()
+ androidLibrary {
+ compileSdkVersion = "android-31"
+ }
+ }
+ val kotlin = project.multiplatformExtension
+
+ kotlin.jvm()
+ kotlin.android()
+
+ val commonMain = kotlin.sourceSets.getByName("commonMain")
+ val commonTest = kotlin.sourceSets.getByName("commonTest")
+
+ commonMain.dependencies {
+ implementation("com.squareup.okio:okio:3.2.0")
+ }
+
+ project.evaluate()
+
+ fun KotlinSourceSet.binaryDependencies() =
+ project.kotlinIdeMultiplatformImport.resolveDependencies(this).filterIsInstance<IdeaKotlinBinaryDependency>()
+
+ commonMain.binaryDependencies().assertMatches(
+ binaryCoordinates("com.squareup.okio:okio-jvm:3.2.0"),
+ binaryCoordinates("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.20"),
+ binaryCoordinates("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.20"),
+ binaryCoordinates("org.jetbrains.kotlin:kotlin-stdlib:1.6.20"),
+ binaryCoordinates("org.jetbrains:annotations:13.0"),
+ )
+
+ commonTest.binaryDependencies().assertMatches(
+ binaryCoordinates("com.squareup.okio:okio-jvm:3.2.0"),
+ binaryCoordinates("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.20"),
+ binaryCoordinates("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.20"),
+ binaryCoordinates("org.jetbrains.kotlin:kotlin-stdlib:1.6.20"),
+ binaryCoordinates("org.jetbrains:annotations:13.0"),
+ )
+ }
+}