public static void unzip(@Nullable ProgressIndicator progress,
                           @NotNull File targetDir,
                           @NotNull File zipArchive,
                           @Nullable NullableFunction<? super String, String> pathConvertor,
                           @Nullable ContentProcessor contentProcessor,
                           boolean unwrapSingleTopLevelFolder) throws IOException {
    Path unzipToDir = getUnzipToDir(progress, targetDir.toPath(), unwrapSingleTopLevelFolder);
    try (ZipFile zipFile = new ZipFile(zipArchive, ZipFile.OPEN_READ)) {
      Enumeration<? extends ZipEntry> entries = zipFile.entries();
      while (entries.hasMoreElements()) {
        ZipEntry entry = entries.nextElement();
        try (InputStream entryContentStream = zipFile.getInputStream(entry)) {
          unzipEntryToDir(progress, entry, entryContentStream, unzipToDir, pathConvertor, contentProcessor);
        }
      }
    }
    if (unwrapSingleTopLevelFolder) {
      doUnwrapSingleTopLevelFolder(unzipToDir, targetDir.toPath());
    }
  }
public static void unzip(@Nullable ProgressIndicator progress,
                           @NotNull File targetDir,
                           @NotNull File zipArchive,
                           @Nullable NullableFunction<? super String, String> pathConvertor,
                           @Nullable ContentProcessor contentProcessor,
                           boolean unwrapSingleTopLevelFolder)