public static void applyAdditionalInfoBefore(@NotNull Project project,
                                               @NotNull ThrowableComputable<? extends Map<String, Map<String, CharSequence>>, PatchSyntaxException> additionalInfo,
                                               @Nullable CommitContext commitContext) {
    List<PatchEP> extensions = PatchEP.EP_NAME.getExtensionList();
    if (extensions.isEmpty()) {
      return;
    }

    try {
      Map<String, Map<String, CharSequence>> additionalInfoMap = additionalInfo.compute();
      for (Map.Entry<String, Map<String, CharSequence>> entry : additionalInfoMap.entrySet()) {
        for (PatchEP extension : extensions) {
          CharSequence charSequence = entry.getValue().get(extension.getName());
          if (charSequence != null) {
            extension.consumeContentBeforePatchApplied(project, entry.getKey(), charSequence, commitContext);
          }
        }
      }
    }
    catch (PatchSyntaxException e) {
      VcsBalloonProblemNotifier
        .showOverChangesView(project, VcsBundle.message("patch.apply.can.not.apply.additional.info.error", e.getMessage()), MessageType.ERROR);
    }
  }
public static void applyAdditionalInfoBefore(@NotNull Project project,
                                               @NotNull ThrowableComputable<? extends Map<String, Map<String, CharSequence>>, PatchSyntaxException> additionalInfo,
                                               @Nullable CommitContext commitContext)