code: int run(String[] args) {
          if (log == null) {
              log = new PrintWriter(System.out);
          }
          try {
              handleOptions(args);
              if (options.help) {
                  showHelp();
              }
              if (options.version || options.fullVersion) {
                  showVersion(options.fullVersion);
              }
              if (classes.isEmpty() && options.includePattern == null) {
                  if (options.help || options.version || options.fullVersion) {
                      return EXIT_OK;
                  } else {
                      showHelp();
                      return EXIT_CMDERR;
                  }
              }
              if (options.regex != null && options.packageNames.size() > 0) {
                  showHelp();
                  return EXIT_CMDERR;
              }
              if (options.findJDKInternals &&
                     (options.regex != null || options.packageNames.size() > 0 || options.showSummary)) {
                  showHelp();
                  return EXIT_CMDERR;
              }
              if (options.showSummary && options.verbose != SUMMARY) {
                  showHelp();
                  return EXIT_CMDERR;
              }
              boolean ok = run();
              return ok ? EXIT_OK : EXIT_ERROR;
          } catch (BadArgs e) {
              reportError(e.key, e.args);
              if (e.showUsage) {
                  log.println(getMessage("main.usage.summary", PROGNAME));
              }
              return EXIT_CMDERR;
          } catch (IOException e) {
              return EXIT_ABNORMAL;
          } finally {
              log.flush();
          }
      }
docs: terminated abnormally