in src/main/kotlin/io/bazel/kotlin/builder/tasks/jvm/JdepsMerger.kt [58:114]
fun merge(
ctx: WorkerContext.TaskContext,
label: String,
inputs: List<String>,
output: String,
reportUnusedDeps: String
): Int {
val rootBuilder = Deps.Dependencies.newBuilder()
rootBuilder.success = false
rootBuilder.ruleLabel = label
val dependencyMap = sortedMapOf<String, Deps.Dependency>()
inputs.forEach { input ->
BufferedInputStream(Paths.get(input).toFile().inputStream()).use {
val deps: Deps.Dependencies = Deps.Dependencies.parseFrom(it)
deps.getDependencyList().forEach {
val dependency = dependencyMap.get(it.path)
// Replace dependency if it has a stronger kind than one we encountered before.
if (dependency == null || dependency.kind > it.kind) {
dependencyMap.put(it.path, it)
}
}
}
}
rootBuilder.addAllDependency(dependencyMap.values)
rootBuilder.success = true
rootBuilder.build().toByteArray()
BufferedOutputStream(File(output).outputStream()).use {
it.write(rootBuilder.build().toByteArray())
}
if (reportUnusedDeps != "off") {
val unusedLabels = dependencyMap.values
.filter { it.kind == Deps.Dependency.Kind.UNUSED }
.mapNotNull { readJarOwnerFromManifest(Paths.get(it.path)).label }
.filter { it != label }
if (unusedLabels.isNotEmpty()) {
ctx.info {
val open = "\u001b[35m\u001b[1m"
val close = "\u001b[0m"
return@info """
|$open ** Please remove the following dependencies:$close ${unusedLabels.joinToString(" ")} from $label
|$open ** You can use the following buildozer command:$close buildozer 'remove deps ${
unusedLabels.joinToString(" ")
}' $label
""".trimMargin()
}
return if (reportUnusedDeps == "error") 1 else 0
}
}
return 0
}