diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeJvmAndAndroidSourceDependencyResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeJvmAndAndroidSourceDependencyResolver.kt index abdf1da5b35..bcc843aea96 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeJvmAndAndroidSourceDependencyResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeJvmAndAndroidSourceDependencyResolver.kt @@ -15,17 +15,13 @@ import org.jetbrains.kotlin.gradle.plugin.ide.IdeDependencyResolver import org.jetbrains.kotlin.gradle.plugin.ide.IdeaKotlinSourceCoordinates import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataDependencyResolution import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSet -import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope.* import org.jetbrains.kotlin.gradle.plugin.sources.internal object IdeJvmAndAndroidSourceDependencyResolver : IdeDependencyResolver { override fun resolve(sourceSet: KotlinSourceSet): Set { if (!sourceSet.isJvmAndAndroid) return emptySet() if (sourceSet !is DefaultKotlinSourceSet) return emptySet() - return sourceSet.dependencyTransformations[API_SCOPE]?.metadataDependencyResolutions?.toList().orEmpty() - .plus(sourceSet.dependencyTransformations[IMPLEMENTATION_SCOPE]?.metadataDependencyResolutions?.toList().orEmpty()) - .plus(sourceSet.dependencyTransformations[COMPILE_ONLY_SCOPE]?.metadataDependencyResolutions?.toList().orEmpty()) - .filterIsInstance() + return sourceSet.resolveMetadata() .flatMap { chooseVisibleSourceSets -> val projectDependency = chooseVisibleSourceSets.projectDependency ?: return@flatMap emptyList() val kotlin = projectDependency.multiplatformExtensionOrNull ?: return@flatMap emptyList() @@ -38,4 +34,4 @@ object IdeJvmAndAndroidSourceDependencyResolver : IdeDependencyResolver { private val KotlinSourceSet.isJvmAndAndroid: Boolean get() = internal.compilations.map { it.platformType }.toSet() == setOf(KotlinPlatformType.androidJvm, KotlinPlatformType.jvm) -} \ No newline at end of file +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeOriginalMetadataDependencyResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeOriginalMetadataDependencyResolver.kt new file mode 100644 index 00000000000..69f0d4ad548 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeOriginalMetadataDependencyResolver.kt @@ -0,0 +1,39 @@ +/* + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.gradle.plugin.ide.dependencyResolvers + +import org.gradle.api.artifacts.component.ModuleComponentIdentifier +import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinDependency +import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinResolvedBinaryDependency +import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet +import org.jetbrains.kotlin.gradle.plugin.ide.IdeDependencyResolver +import org.jetbrains.kotlin.gradle.plugin.ide.IdeaKotlinBinaryCoordinates +import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataDependencyResolution +import org.jetbrains.kotlin.gradle.plugin.mpp.resolvableMetadataConfiguration +import org.jetbrains.kotlin.gradle.plugin.sources.project + +object IdeOriginalMetadataDependencyResolver : IdeDependencyResolver { + override fun resolve(sourceSet: KotlinSourceSet): Set { + val metadataDependenciesConfiguration = resolvableMetadataConfiguration(sourceSet.project, listOf(sourceSet),) + + val keptOriginalDependencyResolutionIds = sourceSet.resolveMetadata() + .map { it.dependency.id }.toSet() + + val artifactsView = metadataDependenciesConfiguration.incoming.artifactView { view -> + view.componentFilter { id -> id in keptOriginalDependencyResolutionIds } + view.isLenient = true + } + + return artifactsView.artifacts.mapNotNull { artifact -> + val moduleId = artifact.id.componentIdentifier as? ModuleComponentIdentifier ?: return@mapNotNull null + IdeaKotlinResolvedBinaryDependency( + binaryType = IdeaKotlinDependency.CLASSPATH_BINARY_TYPE, + binaryFile = artifact.file, + coordinates = IdeaKotlinBinaryCoordinates(moduleId) + ) + }.toSet() + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeMetadataDependencyResolvers.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeTransformedMetadataDependencyResolver.kt similarity index 58% rename from libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeMetadataDependencyResolvers.kt rename to libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeTransformedMetadataDependencyResolver.kt index ca02b4fa9b8..8dba1962a5d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeMetadataDependencyResolvers.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeTransformedMetadataDependencyResolver.kt @@ -5,29 +5,22 @@ package org.jetbrains.kotlin.gradle.plugin.ide.dependencyResolvers -import org.gradle.api.artifacts.component.ModuleComponentIdentifier import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinBinaryCoordinates import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinDependency import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinResolvedBinaryDependency import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.ide.IdeDependencyResolver -import org.jetbrains.kotlin.gradle.plugin.ide.IdeaKotlinBinaryCoordinates import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataDependencyResolution import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataDependencyResolution.ChooseVisibleSourceSets import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataDependencyResolution.ChooseVisibleSourceSets.MetadataProvider.ArtifactMetadataProvider -import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataDependencyResolution.KeepOriginalDependency import org.jetbrains.kotlin.gradle.plugin.mpp.kotlinTransformedMetadataLibraryDirectoryForIde import org.jetbrains.kotlin.gradle.plugin.mpp.read -import org.jetbrains.kotlin.gradle.plugin.mpp.resolvableMetadataConfiguration -import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSet -import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope.* import org.jetbrains.kotlin.gradle.plugin.sources.internal -import org.jetbrains.kotlin.gradle.plugin.sources.project import org.jetbrains.kotlin.tooling.core.mutableExtrasOf internal object IdeTransformedMetadataDependencyResolver : IdeDependencyResolver { override fun resolve(sourceSet: KotlinSourceSet): Set = - collectMetadataDependencyResolutions(sourceSet) + sourceSet.resolveMetadata() .flatMap { resolution -> resolve(sourceSet, resolution) } .toSet() @@ -62,44 +55,4 @@ internal object IdeTransformedMetadataDependencyResolver : IdeDependencyResolver } } } -} - -object IdeOriginalMetadataDependencyResolver : IdeDependencyResolver { - override fun resolve(sourceSet: KotlinSourceSet): Set { - val metadataDependenciesConfiguration = resolvableMetadataConfiguration( - sourceSet.project, - listOf(sourceSet), - metadataDependencyScopes, - ) - - val keptOriginalDependencyResolutionIds = collectMetadataDependencyResolutions(sourceSet) - .map { it.dependency.id }.toSet() - - val artifactsView = metadataDependenciesConfiguration.incoming.artifactView { view -> - view.componentFilter { id -> id in keptOriginalDependencyResolutionIds } - view.isLenient = true - } - - return artifactsView.artifacts.mapNotNull { artifact -> - val moduleId = artifact.id.componentIdentifier as? ModuleComponentIdentifier ?: return@mapNotNull null - IdeaKotlinResolvedBinaryDependency( - binaryType = IdeaKotlinDependency.CLASSPATH_BINARY_TYPE, - binaryFile = artifact.file, - coordinates = IdeaKotlinBinaryCoordinates(moduleId) - ) - }.toSet() - } -} - -private inline fun collectMetadataDependencyResolutions(sourceSet: KotlinSourceSet): List { - if (sourceSet !is DefaultKotlinSourceSet) return emptyList() - return metadataDependencyScopes.flatMap { scope -> - sourceSet.dependencyTransformations[scope]?.metadataDependencyResolutions?.toList().orEmpty() - }.filterIsInstance() -} - -private val metadataDependencyScopes = listOf( - API_SCOPE, - IMPLEMENTATION_SCOPE, - COMPILE_ONLY_SCOPE, -) +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/utils.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/utils.kt new file mode 100644 index 00000000000..ee1df1eb474 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/utils.kt @@ -0,0 +1,21 @@ +/* + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.gradle.plugin.ide.dependencyResolvers + +import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet +import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataDependencyResolution +import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSet +import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope +import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope.* + +internal inline fun KotlinSourceSet.resolveMetadata( + scopes: Set = setOf(API_SCOPE, IMPLEMENTATION_SCOPE, COMPILE_ONLY_SCOPE) +): List { + if (this !is DefaultKotlinSourceSet) return emptyList() + return scopes + .flatMap { scope -> dependencyTransformations[scope]?.metadataDependencyResolutions?.toList().orEmpty() } + .filterIsInstance() +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/GranularMetadataTransformation.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/GranularMetadataTransformation.kt index 15dcdb35be9..74c6ff3cf42 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/GranularMetadataTransformation.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/GranularMetadataTransformation.kt @@ -308,8 +308,12 @@ internal fun ResolvedComponentResult.toProjectOrNull(currentProject: Project): P internal fun resolvableMetadataConfiguration( project: Project, sourceSets: Iterable, - scopes: Iterable -) = resolvableMetadataConfiguration( + scopes: Iterable = setOf( + KotlinDependencyScope.API_SCOPE, + KotlinDependencyScope.IMPLEMENTATION_SCOPE, + KotlinDependencyScope.COMPILE_ONLY_SCOPE + ) +): Configuration = resolvableMetadataConfiguration( project, commonMetadataDependenciesConfigurationForScopes(project, scopes), sourceSets.flatMapTo(mutableListOf()) { requestedDependencies(project, it, scopes) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/ide/IdePlatformBinaryDependencyResolverTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/ide/IdePlatformDependencyResolverTest.kt similarity index 100% rename from libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/ide/IdePlatformBinaryDependencyResolverTest.kt rename to libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/ide/IdePlatformDependencyResolverTest.kt