Skip to content

Commit 07797c3

Browse files
committed
refactor(analyzer): Move Graph.toPackageReferenceForest()
Prepare for making the graph operate on (name, version) tuples. Signed-off-by: Frank Viernau <[email protected]>
1 parent 723694d commit 07797c3

File tree

2 files changed

+24
-23
lines changed

2 files changed

+24
-23
lines changed

analyzer/src/main/kotlin/managers/GoMod.kt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ import org.ossreviewtoolkit.downloader.VersionControlSystem
3737
import org.ossreviewtoolkit.model.Hash
3838
import org.ossreviewtoolkit.model.Identifier
3939
import org.ossreviewtoolkit.model.Package
40+
import org.ossreviewtoolkit.model.PackageLinkage
41+
import org.ossreviewtoolkit.model.PackageReference
4042
import org.ossreviewtoolkit.model.Project
4143
import org.ossreviewtoolkit.model.ProjectAnalyzerResult
4244
import org.ossreviewtoolkit.model.RemoteArtifact
@@ -337,6 +339,27 @@ class GoMod(
337339
run(args = args, workingDir = workingDir, environment = environment)
338340

339341
private fun Map<String, ModuleInfo>.getMainModuleId(): Identifier = values.single { it.main }.toId()
342+
343+
/**
344+
* Convert this [Graph] to a set of [PackageReference]s that spawn the dependency trees of the direct dependencies
345+
* of the given [root] package. The graph must not contain any cycles, so [Graph.breakCycles] should be called
346+
* before.
347+
*/
348+
private fun Graph.toPackageReferenceForest(root: Identifier): Set<PackageReference> {
349+
fun getPackageReference(id: Identifier): PackageReference {
350+
val dependencies = getDependencies(id).mapTo(mutableSetOf()) {
351+
getPackageReference(it)
352+
}
353+
354+
return PackageReference(
355+
id = id,
356+
linkage = PackageLinkage.PROJECT_STATIC,
357+
dependencies = dependencies
358+
)
359+
}
360+
361+
return getDependencies(root).mapTo(mutableSetOf()) { getPackageReference(it) }
362+
}
340363
}
341364

342365
/** Separator string indicating that data of a new package follows in the output of the go mod why command. */

analyzer/src/main/kotlin/managers/utils/Graph.kt

Lines changed: 1 addition & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@ import java.util.LinkedList
2424
import org.apache.logging.log4j.kotlin.logger
2525

2626
import org.ossreviewtoolkit.model.Identifier
27-
import org.ossreviewtoolkit.model.PackageLinkage
28-
import org.ossreviewtoolkit.model.PackageReference
2927

3028
/**
3129
* A class to represent a graph with dependencies. This representation is basically an adjacency list implemented by a
@@ -115,30 +113,10 @@ internal class Graph private constructor(private val nodeMap: MutableMap<Identif
115113
return Graph(outgoingEdgesForNodes.mapValuesTo(mutableMapOf()) { it.value.toMutableSet() })
116114
}
117115

118-
/**
119-
* Convert this [Graph] to a set of [PackageReference]s that spawn the dependency trees of the direct dependencies
120-
* of the given [root] package. The graph must not contain any cycles, so [breakCycles] should be called before.
121-
*/
122-
fun toPackageReferenceForest(root: Identifier): Set<PackageReference> {
123-
fun getPackageReference(id: Identifier): PackageReference {
124-
val dependencies = getDependencies(id).mapTo(mutableSetOf()) {
125-
getPackageReference(it)
126-
}
127-
128-
return PackageReference(
129-
id = id,
130-
linkage = PackageLinkage.PROJECT_STATIC,
131-
dependencies = dependencies
132-
)
133-
}
134-
135-
return getDependencies(root).mapTo(mutableSetOf()) { getPackageReference(it) }
136-
}
137-
138116
/**
139117
* Return the identifiers of the direct dependencies of the package denoted by [id].
140118
*/
141-
private fun getDependencies(id: Identifier): Set<Identifier> = nodeMap[id].orEmpty()
119+
fun getDependencies(id: Identifier): Set<Identifier> = nodeMap[id].orEmpty()
142120
}
143121

144122
private enum class NodeColor { WHITE, GRAY, BLACK }

0 commit comments

Comments
 (0)