@Override
  public void apply(@NotNull List<? extends FilePatch> remaining,
                    @NotNull MultiMap<VirtualFile, AbstractFilePatchInProgress<?>> patchGroupsToApply,
                    @Nullable LocalChangeList localList,
                    @Nullable String fileName,
                    @Nullable ThrowableComputable<Map<String, Map<String, CharSequence>>, PatchSyntaxException> additionalInfo) {
    CommitContext commitContext = new CommitContext();
    if (additionalInfo != null) {
      applyAdditionalInfoBefore(myProject, additionalInfo, commitContext);
    }
    Collection<PatchApplier> appliers = getPatchAppliers(patchGroupsToApply, localList, commitContext);
    new Task.Backgroundable(myProject, VcsBundle.message("unshelve.changes.progress.title")) {
      ApplyPatchStatus myApplyPatchStatus;

      @Override
      public void run(@NotNull ProgressIndicator indicator) {
        myApplyPatchStatus = PatchApplier.executePatchGroup(appliers, localList, VcsBundle.message("activity.name.unshelve"),
                                                            VcsActivity.Unshelve);
      }

      @Override
      public void onSuccess() {
        if (myApplyPatchStatus != ApplyPatchStatus.ABORT && myApplyPatchStatus != ApplyPatchStatus.FAILURE) {
          removeAppliedAndSaveRemainedIfNeeded(remaining, appliers, commitContext); // remove only if partly applied or successful
        }
      }
    }.queue();
  }
@Override
  public void apply(@NotNull List<? extends FilePatch> remaining,
                    @NotNull MultiMap<VirtualFile, AbstractFilePatchInProgress<?>> patchGroupsToApply,
                    @Nullable LocalChangeList localList,
                    @Nullable String fileName,
                    @Nullable ThrowableComputable<Map<String, Map<String, CharSequence>>, PatchSyntaxException> additionalInfo)