public static void unzipWithProgressSynchronously(
    @Nullable Project project,
    @NotNull @NlsContexts.ProgressTitle String progressTitle,
    @NotNull final File zipArchive,
    @NotNull final File extractToDir,
    @Nullable final NullableFunction<? super String, String> pathConvertor,
    final boolean unwrapSingleTopLevelFolder) throws GeneratorException
  {
    final Outcome<Boolean> outcome = DownloadUtil.provideDataWithProgressSynchronously(
      project, progressTitle, LangBundle.message("progress.text.unpacking"),
      () -> {
        ProgressIndicator progress = ProgressManager.getInstance().getProgressIndicator();
        unzip(progress, extractToDir, zipArchive, pathConvertor, null, unwrapSingleTopLevelFolder);
        return true;
      },
      () -> false
    );
    Boolean result = outcome.get();
    if (result == null) {
      Exception e = outcome.getException();
      if (e != null) {
        throw new GeneratorException(LangBundle.message("dialog.message.unpacking.failed.downloaded.archive.broken"));
      }
      throw new GeneratorException(LangBundle.message("dialog.message.unpacking.was.cancelled"));
    }
  }
public static void unzipWithProgressSynchronously(
    @Nullable Project project,
    @NotNull @NlsContexts.ProgressTitle String progressTitle,
    @NotNull final File zipArchive,
    @NotNull final File extractToDir,
    @Nullable final NullableFunction<? super String, String> pathConvertor,
    final boolean unwrapSingleTopLevelFolder)