DependencyGraph.kt
package com.depanalyzer.core.graph
class DependencyGraph(
rootNodes: List<DependencyNode> = emptyList()
) {
private val nodeIndex: MutableMap<String, DependencyNode> = mutableMapOf()
init {
rootNodes.forEach { node ->
indexNode(node)
}
}
private fun indexNode(node: DependencyNode) {
nodeIndex[node.id] = node
node.children.forEach { child ->
indexNode(child)
}
}
private fun calculateMaxDepth(node: DependencyNode): Int {
if (node.children.isEmpty()) return 0
return 1 + node.children.maxOf { calculateMaxDepth(it) }
}
fun getAllNodes(): List<DependencyNode> = nodeIndex.values.toList()
fun getAllVulnerableNodes(): List<DependencyNode> {
return nodeIndex.values.filter { it.isVulnerable() }
}
private fun detectCycle(node: DependencyNode, visited: MutableSet<String>): Boolean {
if (visited.contains(node.id)) {
return true
}
visited.add(node.id)
for (child in node.children) {
if (detectCycle(child, visited.toMutableSet())) {
return true
}
}
return false
}
}