public boolean run()

in tools/docgen/src/main/java/com/google/cloud/verticals/foundations/dataharmonization/doclet/WhistleDoclet.java [172:217]


  public boolean run(DocletEnvironment environment) {
    ReflectedInstance.registerFactory(ReflectedCallableFunction::new);
    ReflectedInstance.registerFactory(ReflectedJavaFunction::new);
    ReflectedInstance.registerFactory(ReflectedPlugin::new);
    ReflectedInstance.registerFactory(
        ReflectedTargetConstructor.TARGET_CONSTRUCTOR_BASECLASS_NAME,
        ReflectedTargetConstructor::new);

    PluginScanner pluginFinder = new PluginScanner();
    Set<ReflectedPlugin> plugins = new HashSet<>();
    pluginFinder.scan(environment.getIncludedElements(), plugins);

    ReversePackageSearch reversePackageSearch = new ReversePackageSearch(plugins);
    try {
      reversePackageSearch.generateReverseMappings();
    } catch (IOException e) {
      throw new UncheckedIOException("Failed to initialize engine", e);
    }

    // TODO(rpolyano): Make MarkupFormat configurable from CLI
    FunctionScanner docBuilder =
        new FunctionScanner(
            new Markdown(),
            environment.getDocTrees(),
            environment.getTypeUtils(),
            environment.getElementUtils(),
            reversePackageSearch);

    Map<String, PackageDoc.Builder> pkgToDocs = new HashMap<>();
    docBuilder.scan(environment.getIncludedElements(), pkgToDocs);

    FilePrinter mdPrinter = new FilePrinter(new Markdown());
    Map<Path, String> filesToWrite =
        mdPrinter.format(
            pkgToDocs.values().stream()
                .map(PackageDoc.Builder::build)
                .collect(Collectors.toList()));

    if (verify) {
      filesToWrite.forEach(this::verifyFile);
    } else {
      filesToWrite.forEach(this::writeFile);
    }

    return true;
  }