fun merge()

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
    }