code: public static void main(String[] args) {
      if (args.length == 0) {
        Options.help(true);
      }
      long startTime = System.currentTimeMillis();
  
      List<String> files = null;
      Options options = new Options();
  
      try {
        files = options.load(args);
        if (files.isEmpty()) {
          Options.usage("no source files");
        }
      } catch (IOException e) {
        ErrorUtil.error(e.getMessage());
        System.exit(1);
      }
  
      run(files, options);
  
      TimingLevel timingLevel = options.timingLevel();
      if (timingLevel == TimingLevel.TOTAL || timingLevel == TimingLevel.ALL) {
        System.out.printf("j2objc execution time: %d ms\n", System.currentTimeMillis() - startTime);
      }
  
      // Run last, since it calls System.exit() with the number of errors.
      checkErrors(options.treatWarningsAsErrors());
    }
docs: Entry point for tool.
  Initializes {@link Options}, calls {@link #run}, and exits.
  
  @param args command-line arguments: flags and source file names