private ImmutableSetMultimap<Class<? extends Annotation>, Element> toClassKeyedMultimap(
        SetMultimap<String, Element> elements) {
      ImmutableSetMultimap.Builder<Class<? extends Annotation>, Element> builder =
          ImmutableSetMultimap.builder();
      elements
          .asMap()
          .forEach(
              (annotationName, annotatedElements) -> {
                Class<? extends Annotation> annotation = annotationsByName.get(annotationName);
                if (annotation != null) { // should not be null
                  builder.putAll(annotation, annotatedElements);
                }
              });
      return builder.build();
    }
The implementation of processing logic for the step. It is guaranteed that the keys in {@code
elementsByAnnotation} will be a subset of the set returned by {@link #annotations()}.

@return the elements (a subset of the values of {@code elementsByAnnotation}) that this step
    is unable to process, possibly until a later processing round. These elements will be
    passed back to this step at the next round of processing.
common/src/main/java/com/google/auto/common/BasicAnnotationProcessor.java