[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.dsl.KotlinMultiplatformExtension
import org.jetbrains.kotlin.gradle.idea.serialize.IdeaKotlinExtrasSerializer import org.jetbrains.kotlin.gradle.idea.serialize.IdeaKotlinExtrasSerializer
import org.jetbrains.kotlin.gradle.kpm.idea.kotlinDebugKey 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.ide.dependencyResolvers.*
import org.jetbrains.kotlin.gradle.plugin.sources.internal
fun IdeMultiplatformImport(extension: KotlinMultiplatformExtension): IdeMultiplatformImport { fun IdeMultiplatformImport(extension: KotlinMultiplatformExtension): IdeMultiplatformImport {
return IdeMultiplatformImportImpl(extension).apply { return IdeMultiplatformImportImpl(extension).apply {
registerDependencyResolver( registerDependencyResolver(
resolver = IdeDependsOnDependencyResolver, resolver = IdeDependsOnDependencyResolver,
constraint = IdeMultiplatformImport.SourceSetConstraint.unconstrained, constraint = SourceSetConstraint.unconstrained,
phase = IdeMultiplatformImport.DependencyResolutionPhase.SourceDependencyResolution, phase = IdeMultiplatformImport.DependencyResolutionPhase.SourceDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default level = IdeMultiplatformImport.DependencyResolutionLevel.Default
) )
registerDependencyResolver( registerDependencyResolver(
resolver = IdeFriendSourceDependencyResolver, resolver = IdeFriendSourceDependencyResolver,
constraint = IdeMultiplatformImport.SourceSetConstraint.unconstrained, constraint = SourceSetConstraint.unconstrained,
phase = IdeMultiplatformImport.DependencyResolutionPhase.SourceDependencyResolution, phase = IdeMultiplatformImport.DependencyResolutionPhase.SourceDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default level = IdeMultiplatformImport.DependencyResolutionLevel.Default
) )
registerDependencyResolver( registerDependencyResolver(
resolver = IdeVisibleMultiplatformSourceDependencyResolver, resolver = IdeVisibleMultiplatformSourceDependencyResolver,
constraint = IdeMultiplatformImport.SourceSetConstraint.unconstrained, constraint = SourceSetConstraint.unconstrained,
phase = IdeMultiplatformImport.DependencyResolutionPhase.SourceDependencyResolution, phase = IdeMultiplatformImport.DependencyResolutionPhase.SourceDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default level = IdeMultiplatformImport.DependencyResolutionLevel.Default
) )
registerDependencyResolver( registerDependencyResolver(
resolver = IdeJvmAndAndroidSourceDependencyResolver, resolver = IdeJvmAndAndroidSourceDependencyResolver,
constraint = IdeMultiplatformImport.SourceSetConstraint.unconstrained, constraint = SourceSetConstraint.unconstrained,
phase = IdeMultiplatformImport.DependencyResolutionPhase.SourceDependencyResolution, phase = IdeMultiplatformImport.DependencyResolutionPhase.SourceDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default level = IdeMultiplatformImport.DependencyResolutionLevel.Default
) )
registerDependencyResolver( registerDependencyResolver(
resolver = IdeTransformedMetadataDependencyResolver, resolver = IdeTransformedMetadataDependencyResolver,
constraint = IdeMultiplatformImport.SourceSetConstraint.isMetadata, constraint = SourceSetConstraint.isMetadata,
phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution, phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default level = IdeMultiplatformImport.DependencyResolutionLevel.Default
) )
registerDependencyResolver( registerDependencyResolver(
resolver = IdeOriginalMetadataDependencyResolver, resolver = IdeOriginalMetadataDependencyResolver,
constraint = IdeMultiplatformImport.SourceSetConstraint.isMetadata, constraint = SourceSetConstraint.isMetadata,
phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution, phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default, level = IdeMultiplatformImport.DependencyResolutionLevel.Default,
) )
registerDependencyResolver( registerDependencyResolver(
resolver = IdePlatformDependencyResolver(), resolver = IdePlatformDependencyResolver(),
constraint = IdeMultiplatformImport.SourceSetConstraint.isPlatform, constraint = SourceSetConstraint.isPlatform,
phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution, phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default level = IdeMultiplatformImport.DependencyResolutionLevel.Default
) )
@@ -68,14 +71,14 @@ fun IdeMultiplatformImport(extension: KotlinMultiplatformExtension): IdeMultipla
*/ */
registerDependencyResolver( registerDependencyResolver(
resolver = IdeJvmAndAndroidPlatformBinaryDependencyResolver(extension.project), resolver = IdeJvmAndAndroidPlatformBinaryDependencyResolver(extension.project),
constraint = IdeMultiplatformImport.SourceSetConstraint.isJvmAndAndroid, constraint = SourceSetConstraint.isJvmAndAndroid,
phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution, phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default level = IdeMultiplatformImport.DependencyResolutionLevel.Default
) )
registerDependencyResolver( registerDependencyResolver(
resolver = IdeNativePlatformDependencyResolver, resolver = IdeNativePlatformDependencyResolver,
constraint = IdeMultiplatformImport.SourceSetConstraint.isNative, constraint = SourceSetConstraint.isNative,
phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution, phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default level = IdeMultiplatformImport.DependencyResolutionLevel.Default
) )
@@ -87,6 +90,16 @@ fun IdeMultiplatformImport(extension: KotlinMultiplatformExtension): IdeMultipla
level = IdeMultiplatformImport.DependencyResolutionLevel.Default, 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 { registerExtrasSerializationExtension {
register(kotlinDebugKey, IdeaKotlinExtrasSerializer.javaIoSerializable()) register(kotlinDebugKey, IdeaKotlinExtrasSerializer.javaIoSerializable())
} }
@@ -61,7 +61,7 @@ internal class IdePlatformDependencyResolver(
val artifacts = artifactResolutionStrategy.createArtifactView(sourceSet.internal)?.artifacts ?: return emptySet() val artifacts = artifactResolutionStrategy.createArtifactView(sourceSet.internal)?.artifacts ?: return emptySet()
val unresolvedDependencies = artifacts.failures 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 -> .map { reason ->
val selector = (reason as? ModuleVersionResolveException)?.selector as? ModuleComponentSelector val selector = (reason as? ModuleVersionResolveException)?.selector as? ModuleComponentSelector
/* Can't figure out the dependency here :( */ /* Can't figure out the dependency here :( */