private @NlsSafe String fetchInfo(@Nullable String commandName) {
    if (commandName == null) return null;
    String manExecutable = MAN_EXECUTABLE.getValue();
    if (manExecutable == null) return ShBundle.message("error.message.can.t.find.info.in.your.path");

    return myManCache.computeIfAbsent(commandName, s -> {
      try {
        ProgressIndicator indicator = EmptyProgressIndicator.notNullize(ProgressManager.getInstance().getProgressIndicator());
        return ApplicationUtil.runWithCheckCanceled(() -> {
          GeneralCommandLine commandLine = new GeneralCommandLine(manExecutable).withParameters(commandName);
          ProcessOutput output = ExecUtil.execAndGetOutput(commandLine, TIMEOUT_IN_MILLISECONDS);
          return output.getExitCode() != 0 ? output.getStderr() : output.getStdout();
        }, indicator);
      }
      catch (ProcessCanceledException e) { throw  e; }
      catch (Exception e) {
        LOG.warn(e);
        return null;
      }
    });
  }
private @NlsSafe String fetchInfo(@Nullable String commandName)