[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 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 import java.io.Serializable
@IdeaKotlinModel @IdeaKotlinModel
sealed interface IdeaKotlinDependency : Serializable { sealed interface IdeaKotlinDependency : Serializable, HasMutableExtras {
val coordinates: IdeaKotlinDependencyCoordinates? val coordinates: IdeaKotlinDependencyCoordinates?
val extras: MutableExtras
companion object { companion object {
const val CLASSPATH_BINARY_TYPE = "org.jetbrains.kotlin.gradle.idea.tcs.IdeDependency.classpathBinaryType" 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. * 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 package org.jetbrains.kotlin.gradle.idea.tcs
import org.jetbrains.kotlin.tooling.core.MutableExtras import org.jetbrains.kotlin.tooling.core.*
import org.jetbrains.kotlin.tooling.core.mutableExtrasOf
data class IdeaKotlinProjectArtifactDependency( data class IdeaKotlinProjectArtifactDependency(
val type: IdeaKotlinSourceDependency.Type, val type: IdeaKotlinSourceDependency.Type,
@@ -14,52 +15,26 @@ data class IdeaKotlinProjectArtifactDependency(
override val extras: MutableExtras = mutableExtrasOf() override val extras: MutableExtras = mutableExtrasOf()
) : IdeaKotlinDependency { ) : IdeaKotlinDependency {
@IdeaKotlinService fun resolved(sourceSetNames: Iterable<String>): Set<IdeaKotlinSourceDependency> {
fun interface Resolver { return sourceSetNames.toSet()
fun resolve(dependency: IdeaKotlinProjectArtifactDependency): IdeaKotlinSourceDependency? .map { sourceSetName ->
IdeaKotlinSourceDependency(
companion object { type = type,
fun byName(resolveSourceSetName: (IdeaKotlinProjectArtifactDependency) -> String?): Resolver { extras = extras.toMutableExtras(),
return DefaultProjectArtifactDependencyResolver(resolveSourceSetName) coordinates = IdeaKotlinSourceCoordinates(
project = coordinates.project,
sourceSetName = sourceSetName
)
)
} }
.onEach { it.projectArtifactDependencyOrigin = this }
fun composite(vararg resolver: Resolver?) = .toSet()
composite(resolver.toList())
fun composite(resolvers: Iterable<Resolver?>): Resolver =
CompositeProjectArtifactDependencyResolver(resolvers.filterNotNull())
}
} }
internal companion object { internal companion object {
const val serialVersionUID = 0L const val serialVersionUID = 0L
}
} var IdeaKotlinSourceDependency.projectArtifactDependencyOrigin by extrasKeyOf<IdeaKotlinProjectArtifactDependency>("origin")
private set
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) }
} }
} }