fun addDirectory()

in src/main/kotlin/io/bazel/kotlin/builder/utils/jars/JarCreator.kt [95:141]


  fun addDirectory(directory: Path) {
    if (!Files.exists(directory)) {
      throw IllegalArgumentException("directory does not exist: $directory")
    }
    try {
      Files.walkFileTree(
        directory,
        object : SimpleFileVisitor<Path>() {

          @Throws(IOException::class)
          override fun preVisitDirectory(path: Path, attrs: BasicFileAttributes): FileVisitResult {
            if (path != directory) {
              // For consistency with legacy behaviour, include entries for directories except for
              // the root.
              addEntry(path, /* isDirectory= */ true)
            }
            return FileVisitResult.CONTINUE
          }

          @Throws(IOException::class)
          override fun visitFile(path: Path, attrs: BasicFileAttributes): FileVisitResult {
            addEntry(path, /* isDirectory= */ false)
            return FileVisitResult.CONTINUE
          }

          fun addEntry(path: Path, isDirectory: Boolean) {
            val sb = StringBuilder()
            var first = true
            for (entry in directory.relativize(path)) {
              if (!first) {
                // use `/` as the directory separator for jar paths, even on Windows
                sb.append('/')
              }
              sb.append(entry.fileName)
              first = false
            }
            if (isDirectory) {
              sb.append('/')
            }
            jarEntries[sb.toString()] = path
          }
        }
      )
    } catch (e: IOException) {
      throw UncheckedIOException(e)
    }
  }