[Gradle] IdeMultiplatformImport: Force empty binary resolve for Android dependencies

KT-55112
This commit is contained in:
Sebastian Sellmair
2022-11-25 12:42:40 +01:00
committed by Space Team
parent 90248f4e44
commit 0aad848757
2 changed files with 23 additions and 10 deletions
@@ -8,56 +8,59 @@ package org.jetbrains.kotlin.gradle.plugin.ide
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
import org.jetbrains.kotlin.gradle.idea.serialize.IdeaKotlinExtrasSerializer
import org.jetbrains.kotlin.gradle.kpm.idea.kotlinDebugKey
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType.androidJvm
import org.jetbrains.kotlin.gradle.plugin.ide.IdeMultiplatformImport.SourceSetConstraint
import org.jetbrains.kotlin.gradle.plugin.ide.dependencyResolvers.*
import org.jetbrains.kotlin.gradle.plugin.sources.internal
fun IdeMultiplatformImport(extension: KotlinMultiplatformExtension): IdeMultiplatformImport {
return IdeMultiplatformImportImpl(extension).apply {
registerDependencyResolver(
resolver = IdeDependsOnDependencyResolver,
constraint = IdeMultiplatformImport.SourceSetConstraint.unconstrained,
constraint = SourceSetConstraint.unconstrained,
phase = IdeMultiplatformImport.DependencyResolutionPhase.SourceDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default
)
registerDependencyResolver(
resolver = IdeFriendSourceDependencyResolver,
constraint = IdeMultiplatformImport.SourceSetConstraint.unconstrained,
constraint = SourceSetConstraint.unconstrained,
phase = IdeMultiplatformImport.DependencyResolutionPhase.SourceDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default
)
registerDependencyResolver(
resolver = IdeVisibleMultiplatformSourceDependencyResolver,
constraint = IdeMultiplatformImport.SourceSetConstraint.unconstrained,
constraint = SourceSetConstraint.unconstrained,
phase = IdeMultiplatformImport.DependencyResolutionPhase.SourceDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default
)
registerDependencyResolver(
resolver = IdeJvmAndAndroidSourceDependencyResolver,
constraint = IdeMultiplatformImport.SourceSetConstraint.unconstrained,
constraint = SourceSetConstraint.unconstrained,
phase = IdeMultiplatformImport.DependencyResolutionPhase.SourceDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default
)
registerDependencyResolver(
resolver = IdeTransformedMetadataDependencyResolver,
constraint = IdeMultiplatformImport.SourceSetConstraint.isMetadata,
constraint = SourceSetConstraint.isMetadata,
phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default
)
registerDependencyResolver(
resolver = IdeOriginalMetadataDependencyResolver,
constraint = IdeMultiplatformImport.SourceSetConstraint.isMetadata,
constraint = SourceSetConstraint.isMetadata,
phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default,
)
registerDependencyResolver(
resolver = IdePlatformDependencyResolver(),
constraint = IdeMultiplatformImport.SourceSetConstraint.isPlatform,
constraint = SourceSetConstraint.isPlatform,
phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default
)
@@ -68,14 +71,14 @@ fun IdeMultiplatformImport(extension: KotlinMultiplatformExtension): IdeMultipla
*/
registerDependencyResolver(
resolver = IdeJvmAndAndroidPlatformBinaryDependencyResolver(extension.project),
constraint = IdeMultiplatformImport.SourceSetConstraint.isJvmAndAndroid,
constraint = SourceSetConstraint.isJvmAndAndroid,
phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default
)
registerDependencyResolver(
resolver = IdeNativePlatformDependencyResolver,
constraint = IdeMultiplatformImport.SourceSetConstraint.isNative,
constraint = SourceSetConstraint.isNative,
phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default
)
@@ -87,6 +90,16 @@ fun IdeMultiplatformImport(extension: KotlinMultiplatformExtension): IdeMultipla
level = IdeMultiplatformImport.DependencyResolutionLevel.Default,
)
/* Overwrite android dependencies by empty resolver */
registerDependencyResolver(
resolver = IdeDependencyResolver.Empty,
constraint = SourceSetConstraint { sourceSet ->
sourceSet.internal.compilations.map { it.platformType }.toSet() == setOf(androidJvm)
},
phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Overwrite
)
registerExtrasSerializationExtension {
register(kotlinDebugKey, IdeaKotlinExtrasSerializer.javaIoSerializable())
}
@@ -61,7 +61,7 @@ internal class IdePlatformDependencyResolver(
val artifacts = artifactResolutionStrategy.createArtifactView(sourceSet.internal)?.artifacts ?: return emptySet()
val unresolvedDependencies = artifacts.failures
.onEach { reason -> sourceSet.project.logger.error("Failed to resolve dependency", reason) }
.onEach { reason -> sourceSet.project.logger.error("Failed to resolve platform dependency on ${sourceSet.name}", reason) }
.map { reason ->
val selector = (reason as? ModuleVersionResolveException)?.selector as? ModuleComponentSelector
/* Can't figure out the dependency here :( */