private void process(ImmutableSetMultimap<TypeElement, Element> wellFormedElements) {
    for (Step step : steps) {
      ImmutableSet<TypeElement> annotationTypes = getSupportedAnnotationTypeElements(step);
      ImmutableSetMultimap<TypeElement, Element> stepElements =
          new ImmutableSetMultimap.Builder<TypeElement, Element>()
              .putAll(indexByAnnotation(elementsDeferredBySteps.get(step), annotationTypes))
              .putAll(filterKeys(wellFormedElements, annotationTypes::contains))
              .build();
      if (stepElements.isEmpty()) {
        elementsDeferredBySteps.removeAll(step);
      } else {
        Set<? extends Element> rejectedElements =
            step.process(toClassNameKeyedMultimap(stepElements));
        elementsDeferredBySteps.replaceValues(
            step,
            rejectedElements.stream()
                .map(element -> ElementFactory.forAnnotatedElement(element, messager))
                .collect(toImmutableList()));
      }
    }
  }
Processes the valid elements, including those previously deferred by each step.
common/src/main/java/com/google/auto/common/BasicAnnotationProcessor.java