[Gradle] Replace IdeaKotlinProjectArtifactDependency.Resolver by resolved function

^KT-55112 Verification Pending
This commit is contained in:
Sebastian Sellmair
2022-11-28 14:56:42 +01:00
committed by Space Team
parent 4c270c7f6e
commit 2f5dc93ba7
2 changed files with 21 additions and 47 deletions
@@ -5,13 +5,12 @@
package org.jetbrains.kotlin.gradle.idea.tcs
import org.jetbrains.kotlin.tooling.core.MutableExtras
import org.jetbrains.kotlin.tooling.core.HasMutableExtras
import java.io.Serializable
@IdeaKotlinModel
sealed interface IdeaKotlinDependency : Serializable {
sealed interface IdeaKotlinDependency : Serializable, HasMutableExtras {
val coordinates: IdeaKotlinDependencyCoordinates?
val extras: MutableExtras
companion object {
const val CLASSPATH_BINARY_TYPE = "org.jetbrains.kotlin.gradle.idea.tcs.IdeDependency.classpathBinaryType"
@@ -3,10 +3,11 @@
* 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("UnusedReceiverParameter")
package org.jetbrains.kotlin.gradle.idea.tcs
import org.jetbrains.kotlin.tooling.core.MutableExtras
import org.jetbrains.kotlin.tooling.core.mutableExtrasOf
import org.jetbrains.kotlin.tooling.core.*
data class IdeaKotlinProjectArtifactDependency(
val type: IdeaKotlinSourceDependency.Type,
@@ -14,52 +15,26 @@ data class IdeaKotlinProjectArtifactDependency(
override val extras: MutableExtras = mutableExtrasOf()
) : IdeaKotlinDependency {
@IdeaKotlinService
fun interface Resolver {
fun resolve(dependency: IdeaKotlinProjectArtifactDependency): IdeaKotlinSourceDependency?
companion object {
fun byName(resolveSourceSetName: (IdeaKotlinProjectArtifactDependency) -> String?): Resolver {
return DefaultProjectArtifactDependencyResolver(resolveSourceSetName)
fun resolved(sourceSetNames: Iterable<String>): Set<IdeaKotlinSourceDependency> {
return sourceSetNames.toSet()
.map { sourceSetName ->
IdeaKotlinSourceDependency(
type = type,
extras = extras.toMutableExtras(),
coordinates = IdeaKotlinSourceCoordinates(
project = coordinates.project,
sourceSetName = sourceSetName
)
)
}
fun composite(vararg resolver: Resolver?) =
composite(resolver.toList())
fun composite(resolvers: Iterable<Resolver?>): Resolver =
CompositeProjectArtifactDependencyResolver(resolvers.filterNotNull())
}
.onEach { it.projectArtifactDependencyOrigin = this }
.toSet()
}
internal companion object {
const val serialVersionUID = 0L
}
}
fun IdeaKotlinProjectArtifactDependency.resolved(resolver: IdeaKotlinProjectArtifactDependency.Resolver): IdeaKotlinSourceDependency? {
return resolver.resolve(this)
}
private class DefaultProjectArtifactDependencyResolver(
private val resolveSourceSetName: (IdeaKotlinProjectArtifactDependency) -> String?
) : IdeaKotlinProjectArtifactDependency.Resolver {
override fun resolve(dependency: IdeaKotlinProjectArtifactDependency): IdeaKotlinSourceDependency? {
return IdeaKotlinSourceDependency(
type = dependency.type,
coordinates = IdeaKotlinSourceCoordinates(
project = dependency.coordinates.project,
sourceSetName = resolveSourceSetName(dependency) ?: return null
),
extras = dependency.extras
)
}
}
private class CompositeProjectArtifactDependencyResolver(
private val resolvers: List<IdeaKotlinProjectArtifactDependency.Resolver>
) : IdeaKotlinProjectArtifactDependency.Resolver {
override fun resolve(dependency: IdeaKotlinProjectArtifactDependency): IdeaKotlinSourceDependency? {
return resolvers.firstNotNullOfOrNull { resolver -> resolver.resolve(dependency) }
var IdeaKotlinSourceDependency.projectArtifactDependencyOrigin by extrasKeyOf<IdeaKotlinProjectArtifactDependency>("origin")
private set
}
}