[Gradle] Replace IdeMultiplatformImport.*Level enums with simpler IdeMultiplatformImport.Priority

KT-58601
This commit is contained in:
Sebastian Sellmair
2023-05-10 15:10:30 +02:00
committed by Space Team
parent d4e1321c65
commit e1e2c04044
6 changed files with 161 additions and 72 deletions
@@ -98,7 +98,7 @@ fun KotlinMultiplatformExtension.androidTargetPrototype(): PrototypeAndroidTarge
AndroidBootClasspathIdeDependencyResolver(project),
constraint = IdeMultiplatformImport.SourceSetConstraint { sourceSet -> sourceSet.android != null },
phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default
priority = IdeMultiplatformImport.Priority.normal
)
}
}
@@ -54,9 +54,9 @@ public final class org/jetbrains/kotlin/gradle/plugin/ide/IdeDependencyTransform
public abstract interface class org/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport {
public static final field Companion Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$Companion;
public static fun instance (Lorg/gradle/api/Project;)Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport;
public abstract fun registerAdditionalArtifactResolver (Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeAdditionalArtifactResolver;Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$SourceSetConstraint;Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$AdditionalArtifactResolutionPhase;Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$AdditionalArtifactResolutionLevel;)V
public abstract fun registerAdditionalArtifactResolver (Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeAdditionalArtifactResolver;Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$SourceSetConstraint;Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$AdditionalArtifactResolutionPhase;Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$Priority;)V
public abstract fun registerDependencyEffect (Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeDependencyEffect;Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$SourceSetConstraint;)V
public abstract fun registerDependencyResolver (Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeDependencyResolver;Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$SourceSetConstraint;Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$DependencyResolutionPhase;Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$DependencyResolutionLevel;)V
public abstract fun registerDependencyResolver (Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeDependencyResolver;Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$SourceSetConstraint;Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$DependencyResolutionPhase;Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$Priority;)V
public abstract fun registerDependencyTransformer (Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeDependencyTransformer;Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$SourceSetConstraint;Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$DependencyTransformationPhase;)V
public abstract fun registerExtrasSerializationExtension (Lorg/jetbrains/kotlin/gradle/idea/serialize/IdeaKotlinExtrasSerializationExtension;)V
public abstract fun resolveDependencies (Ljava/lang/String;)Ljava/util/Set;
@@ -67,13 +67,6 @@ public abstract interface class org/jetbrains/kotlin/gradle/plugin/ide/IdeMultip
public abstract fun serialize (Lorg/jetbrains/kotlin/tooling/core/Extras$Key;Ljava/lang/Object;)[B
}
public final class org/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$AdditionalArtifactResolutionLevel : java/lang/Enum {
public static final field Default Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$AdditionalArtifactResolutionLevel;
public static final field Overwrite Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$AdditionalArtifactResolutionLevel;
public static fun valueOf (Ljava/lang/String;)Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$AdditionalArtifactResolutionLevel;
public static fun values ()[Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$AdditionalArtifactResolutionLevel;
}
public final class org/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$AdditionalArtifactResolutionPhase : java/lang/Enum {
public static final field PostAdditionalArtifactResolution Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$AdditionalArtifactResolutionPhase;
public static final field PreAdditionalArtifactResolution Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$AdditionalArtifactResolutionPhase;
@@ -86,13 +79,6 @@ public final class org/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport
public final fun instance (Lorg/gradle/api/Project;)Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport;
}
public final class org/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$DependencyResolutionLevel : java/lang/Enum {
public static final field Default Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$DependencyResolutionLevel;
public static final field Overwrite Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$DependencyResolutionLevel;
public static fun valueOf (Ljava/lang/String;)Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$DependencyResolutionLevel;
public static fun values ()[Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$DependencyResolutionLevel;
}
public final class org/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$DependencyResolutionPhase : java/lang/Enum {
public static final field BinaryDependencyResolution Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$DependencyResolutionPhase;
public static final field PostDependencyResolution Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$DependencyResolutionPhase;
@@ -112,6 +98,23 @@ public final class org/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport
public static fun values ()[Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$DependencyTransformationPhase;
}
public final class org/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$Priority : java/lang/Comparable {
public static final field Companion Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$Priority$Companion;
public fun <init> (I)V
public synthetic fun compareTo (Ljava/lang/Object;)I
public fun compareTo (Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$Priority;)I
public fun equals (Ljava/lang/Object;)Z
public final fun getValue ()I
public fun hashCode ()I
}
public final class org/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$Priority$Companion {
public final fun getHigh ()Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$Priority;
public final fun getLow ()Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$Priority;
public final fun getNormal ()Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$Priority;
public final fun getVeryHigh ()Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$Priority;
}
public abstract interface class org/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$SourceSetConstraint {
public static final field Companion Lorg/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport$SourceSetConstraint$Companion;
public abstract fun invoke (Lorg/jetbrains/kotlin/gradle/plugin/KotlinSourceSet;)Z
@@ -10,7 +10,6 @@ import org.gradle.api.Project
import org.gradle.api.logging.Logger
import org.gradle.api.logging.Logging
import org.jetbrains.kotlin.gradle.ExternalKotlinTargetApi
import org.jetbrains.kotlin.gradle.InternalKotlinGradlePluginApi
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
import org.jetbrains.kotlin.gradle.idea.serialize.IdeaKotlinExtrasSerializationExtension
@@ -21,8 +20,6 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType.*
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
import org.jetbrains.kotlin.gradle.plugin.extraProperties
import org.jetbrains.kotlin.gradle.plugin.ide.IdeMultiplatformImport.DependencyResolutionLevel.Default
import org.jetbrains.kotlin.gradle.plugin.ide.IdeMultiplatformImport.DependencyResolutionLevel.Overwrite
import org.jetbrains.kotlin.gradle.plugin.ide.IdeMultiplatformImport.SourceSetConstraint
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeCompilation
import org.jetbrains.kotlin.gradle.plugin.sources.internal
@@ -60,28 +57,28 @@ interface IdeMultiplatformImport {
/**
* Registers a given [resolver] to run during Gradle import:
* The given resolver will only run if [constraint] matches and if not overwritten by another
* resolver registered in the same [phase] and level=[DependencyResolutionLevel.Overwrite]
* The given resolver will only run if the [constraint] matches a given SourceSet and if not overwritten by another
* resolver registered in the same [phase] and higher [Priority]
*/
@ExternalKotlinTargetApi
fun registerDependencyResolver(
resolver: IdeDependencyResolver,
constraint: SourceSetConstraint,
phase: DependencyResolutionPhase,
level: DependencyResolutionLevel = Default,
priority: Priority = Priority.normal,
)
/**
* Registers a given [resolver] to run during Gradle import:
* The given resolver will only run if [constraint] matches and if not overwritten by another
* resolver registered in the same [phase] and level [AdditionalArtifactResolutionLevel.Overwrite]
* The given resolver will only run if the [constraint] matches a given SourceSet and if not overwritten by another
* resolver registered in the same [phase] and higher [Priority]
*/
@ExternalKotlinTargetApi
fun registerAdditionalArtifactResolver(
resolver: IdeAdditionalArtifactResolver,
constraint: SourceSetConstraint,
phase: AdditionalArtifactResolutionPhase,
level: AdditionalArtifactResolutionLevel = AdditionalArtifactResolutionLevel.Default,
priority: Priority = Priority.normal,
)
/**
@@ -155,19 +152,60 @@ interface IdeMultiplatformImport {
}
/**
* Any [IdeDependencyResolver] has to be registered specifying a certain resolution level.
* Generally, all resolvers registered in a given resolution level will work collaboratively, meaning the dependency resolution
* result is the aggregation of all resolvers running.
* Indicating the 'priority' of a given [IdeDependencyResolver] or [IdeAdditionalArtifactResolver]:
* When resolving dependencies, only the highest priority resolver will be selected and executed.
* If there are multiple resolvers with the same [Priority] registered, then all of them will be executed
* and the result will be merged.
*
* However, only the resolvers in the highest resolution result will run e.g.
* If resolvers with level [Overwrite] are found, then only those will contribute to the dependency resolution.
* Otherwise, all [Default] resolvers will run.
* By 'default' resolvers are registered using [Priority.normal].
* The Kotlin Gradle Plugin is not expected to register resolvers outside the [normal] or [high] priorities
* External Kotlin Target maintainers _(such as Google)_ can therefore use [veryHigh] to overwrite all resolvers
* from the Kotlin Gradle plugin or [low] to only register a resolver if there is nothing available by default
* from the Kotlin Gradle plugin.
*/
@ExternalKotlinTargetApi
enum class DependencyResolutionLevel {
Default, Overwrite
class Priority(val value: Int) : Comparable<Priority> {
override fun equals(other: Any?): Boolean {
if (other !is Priority) return false
return other.value == value
}
override fun hashCode(): Int {
return value.hashCode()
}
override fun compareTo(other: Priority): Int {
return this.value.compareTo(other.value)
}
@ExternalKotlinTargetApi
companion object {
/**
* Not used by the Kotlin Gradle plugin: Can be used by external Kotlin Target maintainers to
* provide resolvers only if KGP does not offer any out of the box.
*/
val low = Priority(-10)
/**
* Default [Priority] used to register resolvers.
* Used by the Kotlin Gradle plugin.
*/
val normal = Priority(0)
/**
* Used by the Kotlin Gradle plugin for special cases (like android, jvmAndAndroid, ...)
*/
val high = Priority(10)
/**
* Not used by the Kotlin Gradle plugin: Can be used by external Kotlin Target maintainers to
* overwrite the Kotlin Gradle plugin
*/
val veryHigh = Priority(100)
}
}
@ExternalKotlinTargetApi
enum class AdditionalArtifactResolutionPhase {
PreAdditionalArtifactResolution,
@@ -175,11 +213,6 @@ interface IdeMultiplatformImport {
PostAdditionalArtifactResolution
}
@ExternalKotlinTargetApi
enum class AdditionalArtifactResolutionLevel {
Default, Overwrite
}
/**
* Any [IdeDependencyResolver] has to be registered for a given transformation phase.
* The phases will be executed in the order of this enums ordinal.
@@ -20,98 +20,98 @@ internal fun IdeMultiplatformImport(extension: KotlinProjectExtension): IdeMulti
resolver = IdeDependsOnDependencyResolver,
constraint = SourceSetConstraint.unconstrained,
phase = IdeMultiplatformImport.DependencyResolutionPhase.SourceDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default
priority = IdeMultiplatformImport.Priority.normal
)
registerDependencyResolver(
resolver = IdeFriendSourceDependencyResolver,
constraint = SourceSetConstraint.unconstrained,
phase = IdeMultiplatformImport.DependencyResolutionPhase.SourceDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default
priority = IdeMultiplatformImport.Priority.normal
)
registerDependencyResolver(
resolver = IdeVisibleMultiplatformSourceDependencyResolver,
constraint = !SourceSetConstraint.isLeaf,
phase = IdeMultiplatformImport.DependencyResolutionPhase.SourceDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default
priority = IdeMultiplatformImport.Priority.normal
)
registerDependencyResolver(
resolver = IdeJvmAndAndroidSourceDependencyResolver,
constraint = SourceSetConstraint.isJvmAndAndroid,
phase = IdeMultiplatformImport.DependencyResolutionPhase.SourceDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default
priority = IdeMultiplatformImport.Priority.normal
)
registerDependencyResolver(
resolver = IdeNativeStdlibDependencyResolver,
constraint = SourceSetConstraint.isNative,
phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default,
priority = IdeMultiplatformImport.Priority.normal
)
registerDependencyResolver(
resolver = IdeNativePlatformDependencyResolver,
constraint = SourceSetConstraint.isNative,
phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default
priority = IdeMultiplatformImport.Priority.normal
)
registerDependencyResolver(
resolver = IdeCommonizedNativePlatformDependencyResolver,
constraint = SourceSetConstraint.isNative,
phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default
priority = IdeMultiplatformImport.Priority.normal
)
registerDependencyResolver(
resolver = IdeTransformedMetadataDependencyResolver,
constraint = !SourceSetConstraint.isLeaf and !SourceSetConstraint.isJvmAndAndroid,
phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default
priority = IdeMultiplatformImport.Priority.normal
)
registerDependencyResolver(
resolver = IdeOriginalMetadataDependencyResolver,
constraint = !SourceSetConstraint.isLeaf,
phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default,
priority = IdeMultiplatformImport.Priority.normal
)
registerDependencyResolver(
resolver = IdeBinaryDependencyResolver(),
constraint = SourceSetConstraint.isSinglePlatformType,
phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default
priority = IdeMultiplatformImport.Priority.normal
)
registerDependencyResolver(
resolver = IdePlatformCinteropDependencyResolver,
constraint = SourceSetConstraint.isSingleKotlinTarget and SourceSetConstraint.isNative,
phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default,
priority = IdeMultiplatformImport.Priority.normal
)
registerDependencyResolver(
resolver = IdeCommonizedCinteropDependencyResolver,
constraint = { sourceSet -> sourceSet.commonizerTarget.getOrThrow() is SharedCommonizerTarget },
phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default,
priority = IdeMultiplatformImport.Priority.normal
)
registerDependencyResolver(
resolver = IdeCInteropMetadataDependencyClasspathResolver,
constraint = SourceSetConstraint.isNative and !SourceSetConstraint.isSingleKotlinTarget,
phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default,
priority = IdeMultiplatformImport.Priority.normal
)
registerDependencyResolver(
resolver = IdeProjectToProjectCInteropDependencyResolver,
constraint = SourceSetConstraint.isNative and SourceSetConstraint.isSingleKotlinTarget,
phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default,
priority = IdeMultiplatformImport.Priority.normal
)
/*
@@ -122,21 +122,21 @@ internal fun IdeMultiplatformImport(extension: KotlinProjectExtension): IdeMulti
resolver = IdeJvmAndAndroidPlatformBinaryDependencyResolver(extension.project),
constraint = SourceSetConstraint.isJvmAndAndroid,
phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default
priority = IdeMultiplatformImport.Priority.normal
)
registerDependencyResolver(
resolver = IdePlatformSourcesResolver(),
constraint = SourceSetConstraint.isSinglePlatformType,
phase = IdeMultiplatformImport.DependencyResolutionPhase.SourcesAndDocumentationResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default
priority = IdeMultiplatformImport.Priority.normal
)
registerAdditionalArtifactResolver(
resolver = IdeMetadataSourcesResolver(),
constraint = !SourceSetConstraint.isSinglePlatformType,
phase = IdeMultiplatformImport.AdditionalArtifactResolutionPhase.SourcesAndDocumentationResolution,
level = IdeMultiplatformImport.AdditionalArtifactResolutionLevel.Default
priority = IdeMultiplatformImport.Priority.normal
)
if (extension.project.kotlinPropertiesProvider.enableSlowIdeSourcesJarResolver) {
@@ -144,7 +144,7 @@ internal fun IdeMultiplatformImport(extension: KotlinProjectExtension): IdeMulti
resolver = IdeArtifactResolutionQuerySourcesAndDocumentationResolver,
constraint = SourceSetConstraint.unconstrained,
phase = IdeMultiplatformImport.AdditionalArtifactResolutionPhase.SourcesAndDocumentationResolution,
level = IdeMultiplatformImport.AdditionalArtifactResolutionLevel.Default
priority = IdeMultiplatformImport.Priority.normal
)
}
@@ -167,21 +167,21 @@ internal fun IdeMultiplatformImport(extension: KotlinProjectExtension): IdeMulti
resolver = IdeDependencyResolver.empty,
constraint = SourceSetConstraint.isAndroid,
phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Overwrite
priority = IdeMultiplatformImport.Priority.high
)
registerDependencyResolver(
resolver = IdeDependencyResolver.empty,
constraint = SourceSetConstraint.isAndroid,
phase = IdeMultiplatformImport.DependencyResolutionPhase.SourcesAndDocumentationResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Overwrite
priority = IdeMultiplatformImport.Priority.high
)
registerAdditionalArtifactResolver(
resolver = IdeAdditionalArtifactResolver.empty,
constraint = SourceSetConstraint.isAndroid,
phase = IdeMultiplatformImport.AdditionalArtifactResolutionPhase.SourcesAndDocumentationResolution,
level = IdeMultiplatformImport.AdditionalArtifactResolutionLevel.Overwrite
priority = IdeMultiplatformImport.Priority.high
)
}
}
@@ -63,10 +63,10 @@ internal class IdeMultiplatformImportImpl(
resolver: IdeDependencyResolver,
constraint: SourceSetConstraint,
phase: DependencyResolutionPhase,
level: DependencyResolutionLevel
priority: Priority,
) {
registeredDependencyResolvers.add(
RegisteredDependencyResolver(extension.project.kotlinIdeMultiplatformImportStatistics, resolver, constraint, phase, level)
RegisteredDependencyResolver(extension.project.kotlinIdeMultiplatformImportStatistics, resolver, constraint, phase, priority)
)
if (resolver is IdeDependencyResolver.WithBuildDependencies) {
@@ -91,11 +91,11 @@ internal class IdeMultiplatformImportImpl(
resolver: IdeAdditionalArtifactResolver,
constraint: SourceSetConstraint,
phase: AdditionalArtifactResolutionPhase,
level: AdditionalArtifactResolutionLevel
priority: Priority
) {
registeredAdditionalArtifactResolvers.add(
RegisteredAdditionalArtifactResolver(
extension.project.kotlinIdeMultiplatformImportStatistics, resolver, constraint, phase, level
extension.project.kotlinIdeMultiplatformImportStatistics, resolver, constraint, phase, priority
)
)
}
@@ -123,11 +123,11 @@ internal class IdeMultiplatformImportImpl(
val applicableResolvers = registeredDependencyResolvers
.filter { it.phase == phase }
.filter { it.constraint(sourceSet) }
.groupBy { it.level }
.groupBy { it.priority }
/* Find resolvers in the highest resolution level and only consider those */
DependencyResolutionLevel.values().reversed().forEach { level ->
val resolvers = applicableResolvers[level].orEmpty()
applicableResolvers.keys.sortedDescending().forEach { priority ->
val resolvers = applicableResolvers[priority].orEmpty()
if (resolvers.isNotEmpty()) {
return@resolve IdeDependencyResolver(resolvers).resolve(sourceSet)
}
@@ -145,10 +145,10 @@ internal class IdeMultiplatformImportImpl(
val applicableResolvers = registeredAdditionalArtifactResolvers
.filter { it.phase == phase }
.filter { it.constraint(sourceSet) }
.groupBy { it.level }
.groupBy { it.priority }
AdditionalArtifactResolutionLevel.values().reversed().forEach { level ->
val resolvers = applicableResolvers[level].orEmpty()
applicableResolvers.keys.sortedDescending().forEach { priority ->
val resolvers = applicableResolvers[priority].orEmpty()
if (resolvers.isNotEmpty()) {
resolvers.forEach { resolver -> resolver.resolve(sourceSet, dependencies) }
return@resolve
@@ -202,7 +202,7 @@ internal class IdeMultiplatformImportImpl(
private val resolver: IdeDependencyResolver,
val constraint: SourceSetConstraint,
val phase: DependencyResolutionPhase,
val level: DependencyResolutionLevel,
val priority: Priority,
) : IdeDependencyResolver {
private class TimeMeasuredResult(val timeInMillis: Long, val dependencies: Set<IdeaKotlinDependency>)
@@ -245,7 +245,7 @@ internal class IdeMultiplatformImportImpl(
private val resolver: IdeAdditionalArtifactResolver,
val constraint: SourceSetConstraint,
val phase: AdditionalArtifactResolutionPhase,
val level: AdditionalArtifactResolutionLevel
val priority: Priority,
) : IdeAdditionalArtifactResolver {
override fun resolve(sourceSet: KotlinSourceSet, dependencies: Set<IdeaKotlinDependency>) {
runCatching { measureTimeMillis { resolver.resolve(sourceSet, dependencies) } }
@@ -0,0 +1,53 @@
/*
* Copyright 2010-2023 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.
*/
@file:Suppress("FunctionName")
package org.jetbrains.kotlin.gradle.unitTests
import org.jetbrains.kotlin.gradle.plugin.ide.IdeMultiplatformImport.Priority
import org.junit.Test
import kotlin.test.assertEquals
import kotlin.test.assertNotEquals
import kotlin.test.assertTrue
class IdeMultiplatformImportPriorityTest {
@Test
fun `test - equals and hashCode`() {
assertEquals(Priority(10), Priority(10))
assertEquals(Priority(10).hashCode(), Priority(10).hashCode())
assertNotEquals(Priority(10), Priority(11))
assertNotEquals(Priority(10).hashCode(), Priority(11).hashCode())
}
@Test
fun `test - compareTo`() {
assertTrue(Priority(10) > Priority(9))
assertTrue(Priority(9) < Priority(10))
assertTrue(Priority(9) < Priority(10))
assertTrue(Priority(10) <= Priority(10))
assertTrue(Priority(10) >= Priority(10))
}
@Test
fun `test - predefined values`() {
val predefinedValues = listOf(
Priority.low,
Priority.normal,
Priority.high,
Priority.veryHigh
)
assertEquals(predefinedValues, predefinedValues.sorted())
assertEquals(predefinedValues.reversed(), predefinedValues.sortedDescending())
predefinedValues.zipWithNext { lower, higher ->
assertNotEquals(lower, higher)
assertTrue(lower < higher)
}
}
}