in sources/java-incremental-compilation/intellij-build-zip/src/zip.kt [24:67]
fun zipWithCompression(
targetFile: Path,
dirs: Map<Path, String>,
compressionLevel: Int = Deflater.DEFAULT_COMPRESSION,
addDirEntriesMode: AddDirEntriesMode = AddDirEntriesMode.NONE,
overwrite: Boolean = false,
createFileParentDirs: Boolean = true,
fileFilter: ((name: String) -> Boolean)? = null,
) {
if (createFileParentDirs) {
Files.createDirectories(targetFile.parent)
}
ZipFileWriter(
zipWriter(targetFile = targetFile, packageIndexBuilder = null, overwrite = overwrite),
deflater = if (compressionLevel == Deflater.NO_COMPRESSION) null else Deflater(compressionLevel, true),
).use { zipFileWriter ->
if (addDirEntriesMode == AddDirEntriesMode.NONE) {
archiveDirToZipWriter(
zipFileWriter = zipFileWriter,
fileAdded = if (fileFilter == null) null else { name, _ -> fileFilter(name) },
dirs = dirs,
)
}
else {
val dirNameSetToAdd = LinkedHashSet<String>()
val fileAdded = { name: String, _: Path ->
if (fileFilter != null && !fileFilter(name)) {
false
}
else {
if (addDirEntriesMode == AddDirEntriesMode.ALL ||
(addDirEntriesMode == AddDirEntriesMode.RESOURCE_ONLY &&
!name.endsWith(".class") && !name.endsWith("/package.html") && name != "META-INF/MANIFEST.MF")) {
addDirWithParents(name, dirNameSetToAdd)
}
true
}
}
archiveDirToZipWriter(zipFileWriter = zipFileWriter, fileAdded = fileAdded, dirs = dirs)
zipFileWriter.resultStream.addDirEntries(dirNameSetToAdd)
}
}
}