Skip to content

Commit

Permalink
refactor(DependencyHandler): Consume abstract but generate concrete t…
Browse files Browse the repository at this point in the history
…ypes

Change the interface to consume abstract collections but generate
concrete collection types.

Signed-off-by: Sebastian Schuberth <sebastian@doubleopen.org>
  • Loading branch information
sschuberth committed Apr 22, 2024
1 parent 2fcae57 commit d53ac0b
Show file tree
Hide file tree
Showing 8 changed files with 25 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -73,10 +73,10 @@ class PackageManagerDependencyHandler(

private val navigator = DependencyGraphNavigator(analyzerResult.dependencyGraphs)

override fun createPackage(dependency: ResolvableDependencyNode, issues: MutableList<Issue>): Package? =
override fun createPackage(dependency: ResolvableDependencyNode, issues: MutableCollection<Issue>): Package? =
analyzerResult.packages.find { it.id == dependency.id }

override fun dependenciesFor(dependency: ResolvableDependencyNode): Collection<ResolvableDependencyNode> =
override fun dependenciesFor(dependency: ResolvableDependencyNode): List<ResolvableDependencyNode> =
buildList {
dependency.visitDependencies { dependencies ->
dependencies.forEach { node ->
Expand All @@ -87,7 +87,7 @@ class PackageManagerDependencyHandler(

override fun identifierFor(dependency: ResolvableDependencyNode): Identifier = dependency.id

override fun issuesForDependency(dependency: ResolvableDependencyNode): Collection<Issue> = dependency.issues
override fun issuesForDependency(dependency: ResolvableDependencyNode): List<Issue> = dependency.issues

override fun linkageFor(dependency: ResolvableDependencyNode): PackageLinkage = dependency.linkage

Expand Down
8 changes: 4 additions & 4 deletions model/src/main/kotlin/utils/DependencyGraphConverter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -132,14 +132,14 @@ object DependencyGraphConverter {
private object ScopesDependencyHandler : DependencyHandler<PackageReference> {
override fun identifierFor(dependency: PackageReference): Identifier = dependency.id

override fun dependenciesFor(dependency: PackageReference): Collection<PackageReference> =
dependency.dependencies
override fun dependenciesFor(dependency: PackageReference): List<PackageReference> =
dependency.dependencies.toList()

override fun linkageFor(dependency: PackageReference): PackageLinkage = dependency.linkage

override fun createPackage(dependency: PackageReference, issues: MutableList<Issue>): Package? = null
override fun createPackage(dependency: PackageReference, issues: MutableCollection<Issue>): Package? = null

override fun issuesForDependency(dependency: PackageReference): Collection<Issue> = dependency.issues
override fun issuesForDependency(dependency: PackageReference): List<Issue> = dependency.issues
}
}

Expand Down
6 changes: 3 additions & 3 deletions model/src/main/kotlin/utils/DependencyHandler.kt
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ interface DependencyHandler<D> {
* Return a collection with the dependencies of the given [dependency]. [DependencyGraphBuilder] invokes this
* function to construct the whole dependency tree spawned by this [dependency].
*/
fun dependenciesFor(dependency: D): Collection<D>
fun dependenciesFor(dependency: D): List<D>

/**
* Return the [PackageLinkage] for the given [dependency].
Expand All @@ -57,12 +57,12 @@ interface DependencyHandler<D> {
* the provided [issues] list. If the [dependency] does not map to a package, an implementation should return
* *null*.
*/
fun createPackage(dependency: D, issues: MutableList<Issue>): Package?
fun createPackage(dependency: D, issues: MutableCollection<Issue>): Package?

/**
* Return a collection with known issues for the given [dependency]. Some package manager implementations may
* already encounter problems when obtaining dependency representations. These can be reported here. This base
* implementation returns an empty collection.
*/
fun issuesForDependency(dependency: D): Collection<Issue> = emptyList()
fun issuesForDependency(dependency: D): List<Issue> = emptyList()
}
7 changes: 4 additions & 3 deletions model/src/test/kotlin/utils/DependencyGraphBuilderTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -357,14 +357,15 @@ private const val NO_PACKAGE_NAMESPACE = "no-package"
private object PackageRefDependencyHandler : DependencyHandler<PackageReference> {
override fun identifierFor(dependency: PackageReference): Identifier = dependency.id

override fun dependenciesFor(dependency: PackageReference): Collection<PackageReference> = dependency.dependencies
override fun dependenciesFor(dependency: PackageReference): List<PackageReference> =
dependency.dependencies.toList()

override fun linkageFor(dependency: PackageReference): PackageLinkage = dependency.linkage

override fun createPackage(dependency: PackageReference, issues: MutableList<Issue>): Package? =
override fun createPackage(dependency: PackageReference, issues: MutableCollection<Issue>): Package? =
Package.EMPTY.copy(id = dependency.id).takeUnless { dependency.id.namespace == NO_PACKAGE_NAMESPACE }

override fun issuesForDependency(dependency: PackageReference): Collection<Issue> = dependency.issues
override fun issuesForDependency(dependency: PackageReference): List<Issue> = dependency.issues
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,9 +64,9 @@ internal class GradleDependencyHandler(
version = dependency.version
)

override fun dependenciesFor(dependency: OrtDependency): Collection<OrtDependency> = dependency.dependencies
override fun dependenciesFor(dependency: OrtDependency): List<OrtDependency> = dependency.dependencies

override fun issuesForDependency(dependency: OrtDependency): Collection<Issue> =
override fun issuesForDependency(dependency: OrtDependency): List<Issue> =
listOfNotNull(
dependency.error?.let {
createAndLogIssue(
Expand All @@ -88,7 +88,7 @@ internal class GradleDependencyHandler(
override fun linkageFor(dependency: OrtDependency): PackageLinkage =
if (dependency.isProjectDependency()) PackageLinkage.PROJECT_DYNAMIC else PackageLinkage.DYNAMIC

override fun createPackage(dependency: OrtDependency, issues: MutableList<Issue>): Package? {
override fun createPackage(dependency: OrtDependency, issues: MutableCollection<Issue>): Package? {
// Only look for a package if there was no error resolving the dependency and it is no project dependency.
if (dependency.error != null || dependency.isProjectDependency()) return null

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ class MavenDependencyHandler(
version = dependency.artifact.version
)

override fun dependenciesFor(dependency: DependencyNode): Collection<DependencyNode> {
override fun dependenciesFor(dependency: DependencyNode): List<DependencyNode> {
val childrenWithoutToolDependencies = dependency.children.filterNot { node ->
TOOL_DEPENDENCIES.any(node.artifact.identifier()::startsWith)
}
Expand All @@ -88,7 +88,7 @@ class MavenDependencyHandler(
* Create a [Package] representing a [dependency] if possible, recording any [issues]. Inter-project
* dependencies are skipped.
*/
override fun createPackage(dependency: DependencyNode, issues: MutableList<Issue>): Package? {
override fun createPackage(dependency: DependencyNode, issues: MutableCollection<Issue>): Package? {
if (isLocalProject(dependency)) return null

return runCatching {
Expand Down
6 changes: 4 additions & 2 deletions plugins/package-managers/node/src/main/kotlin/Yarn2.kt
Original file line number Diff line number Diff line change
Expand Up @@ -720,12 +720,14 @@ class Yarn2(
private class Yarn2DependencyHandler : DependencyHandler<YarnModuleInfo> {
override fun identifierFor(dependency: YarnModuleInfo): Identifier = dependency.id

override fun dependenciesFor(dependency: YarnModuleInfo): Collection<YarnModuleInfo> = dependency.dependencies
override fun dependenciesFor(dependency: YarnModuleInfo): List<YarnModuleInfo> =
dependency.dependencies.toList()

override fun linkageFor(dependency: YarnModuleInfo): PackageLinkage =
if (dependency.pkg == null) PackageLinkage.PROJECT_DYNAMIC else PackageLinkage.DYNAMIC

override fun createPackage(dependency: YarnModuleInfo, issues: MutableList<Issue>): Package? = dependency.pkg
override fun createPackage(dependency: YarnModuleInfo, issues: MutableCollection<Issue>): Package? =
dependency.pkg
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,11 +67,11 @@ internal data class NpmModuleInfo(
internal class NpmDependencyHandler(private val npm: Npm) : DependencyHandler<NpmModuleInfo> {
override fun identifierFor(dependency: NpmModuleInfo): Identifier = dependency.id

override fun dependenciesFor(dependency: NpmModuleInfo): Collection<NpmModuleInfo> = dependency.dependencies
override fun dependenciesFor(dependency: NpmModuleInfo): List<NpmModuleInfo> = dependency.dependencies.toList()

override fun linkageFor(dependency: NpmModuleInfo): PackageLinkage = PackageLinkage.DYNAMIC

override fun createPackage(dependency: NpmModuleInfo, issues: MutableList<Issue>): Package =
override fun createPackage(dependency: NpmModuleInfo, issues: MutableCollection<Issue>): Package =
runBlocking {
npm.parsePackage(dependency.workingDir, dependency.packageFile).second
}
Expand Down

0 comments on commit d53ac0b

Please sign in to comment.