code: private void processDocs(final RootDoc rootDoc) {
          this.rootDoc = rootDoc;
  
          // Get a list of all the features and groups that we'll actually retain
          workUnits = computeWorkUnits();
  
          final Set<String> uniqueGroups = new HashSet<>();
          final List<Map<String, String>> featureMaps = new ArrayList<>();
          final List<Map<String, String>> groupMaps = new ArrayList<>();
  
          // First pass over work units: create the top level map of features and groups
          workUnits.stream().forEach(
                  workUnit -> {
                      featureMaps.add(indexDataMap(workUnit));
                      if (!uniqueGroups.contains(workUnit.getGroupName())) {
                          uniqueGroups.add(workUnit.getGroupName());
                          groupMaps.add(getGroupMap(workUnit));
                      }
                  }
          );
  
          // Second pass:  populate the property map for each work unit
          workUnits.stream().forEach(workUnit -> { workUnit.processDoc(featureMaps, groupMaps); });
  
          // Third pass: Generate the individual outputs for each work unit, and the top-level index file
          emitOutputFromTemplates(groupMaps, featureMaps);
      }
docs: Process the classes that have been included by the javadoc process in the rootDoc object.
  
  @param rootDoc root structure containing the the set of objects accumulated by the javadoc process