public static boolean start(RootDoc root) {
    String[][] options = root.options();

    File outputFile = null;
    for (String[] option : options) {
      if (option[0].equals("-output")) {
        outputFile = new File(option[1]);
      }
    }

    if (outputFile == null) {
      root.printError("Internal Error: No output file");
      return false;

    } else {
      root.printNotice("Generating " + outputFile);
    }

    try {
      PrintWriter pw = new PrintWriter(new FileWriter(outputFile));
      Formatter.center("GemFire Unit Test Summary", pw);
      Formatter.center(new Date().toString(), pw);
      pw.println("");

      ClassDoc[] classes = root.classes();
      Arrays.sort(classes, (Comparator) (o1, o2) -> {
        ClassDoc c1 = (ClassDoc) o1;
        ClassDoc c2 = (ClassDoc) o2;
        return c1.qualifiedName().compareTo(c2.qualifiedName());
      });
      for (ClassDoc c : classes) {
        if (!c.isAbstract() && isUnitTest(c)) {
          document(c, pw);
        }
      }

      pw.flush();
      pw.close();

    } catch (IOException ex) {
      StringWriter sw = new StringWriter();
      ex.printStackTrace(new PrintWriter(sw, true));
      root.printError(sw.toString());
      return false;
    }

    return true;
  }
The entry point for the doclet
geode-core/src/test/java/org/apache/geode/UnitTestDoclet.java