code: boolean doClassNames(Collection<String> classNames) throws IOException {
          if (verbose) {
              out.println("List of classes to process:");
              classNames.forEach(out::println);
              out.println("End of class list.");
          }
  
          // TODO: not sure this is necessary...
          if (fm instanceof JavacFileManager) {
              ((JavacFileManager)fm).setSymbolFileEnabled(false);
          }
  
          fm.setLocation(StandardLocation.CLASS_PATH, classPath);
          if (!bootClassPath.isEmpty()) {
              fm.setLocation(StandardLocation.PLATFORM_CLASS_PATH, bootClassPath);
          }
  
          if (!systemModules.isEmpty()) {
              fm.setLocation(StandardLocation.SYSTEM_MODULES, systemModules);
          }
  
          LoadProc proc = new LoadProc();
          JavaCompiler.CompilationTask task =
              compiler.getTask(null, fm, this, options, classNames, null);
          task.setProcessors(List.of(proc));
          boolean r = task.call();
          if (r) {
              if (forRemoval) {
                  deprList = proc.getDeprecations().stream()
                                 .filter(DeprData::isForRemoval)
                                 .collect(toList());
              } else {
                  deprList = proc.getDeprecations();
              }
          }
          return r;
      }
docs: Processes a collection of class names. Names should fully qualified
  names in the form "pkg.pkg.pkg.classname".
  
  @param classNames collection of fully qualified classnames to process
  @return true for success, false for failure
  @throws IOException if an I/O error occurs