From 1b8c517e1eb340656bacb6edec900454b36946cb Mon Sep 17 00:00:00 2001 From: Pavel Kirpichenkov Date: Thu, 9 Feb 2023 16:05:11 +0200 Subject: [PATCH] [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 --- .../ide/IdeMultiplatformImportFactory.kt | 5 +- ...ansformedMetadataDependencyResolverTest.kt | 56 +++++++++++++++++-- 2 files changed, 54 insertions(+), 7 deletions(-) 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 aa8927915c6..b68657d352b 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 @@ internal fun IdeMultiplatformImport(extension: KotlinProjectExtension): IdeMulti registerDependencyResolver( resolver = IdeTransformedMetadataDependencyResolver, - constraint = !SourceSetConstraint.isLeaf, + constraint = !SourceSetConstraint.isLeaf and !SourceSetConstraint.isJvmAndAndroid, phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution, level = IdeMultiplatformImport.DependencyResolutionLevel.Default ) @@ -150,7 +150,8 @@ internal fun IdeMultiplatformImport(extension: KotlinProjectExtension): IdeMulti 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 4f55c3aab56..c317938d36b 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 @@ -9,13 +9,13 @@ package org.jetbrains.kotlin.gradle.dependencyResolutionTests.tcs import org.jetbrains.kotlin.gradle.dependencyResolutionTests.mavenCentralCacheRedirector 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.plugin.KotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.ide.dependencyResolvers.IdeTransformedMetadataDependencyResolver -import org.jetbrains.kotlin.gradle.util.applyMultiplatformPlugin -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.plugin.ide.kotlinIdeMultiplatformImport +import org.jetbrains.kotlin.gradle.util.* import org.junit.Test class IdeTransformedMetadataDependencyResolverTest { @@ -68,4 +68,50 @@ class IdeTransformedMetadataDependencyResolverTest { 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() + + 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"), + ) + } +}