@Override
  public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
    if (errorFunction != null) {
      Set<? extends Element> elements = roundEnv.getElementsAnnotatedWith(AutoFactory.class);
      Element anElement = elements.isEmpty() ? null : elements.iterator().next();
      errorFunction.accept(anElement);
      return false;
    }
    try {
      doProcess(roundEnv);
    } catch (Throwable e) {
      messager.printMessage(
          Kind.ERROR,
          "Failed to process @AutoFactory annotations:\n" + Throwables.getStackTraceAsString(e));
    }
    return false;
  }
If non-null, we will call this whenever the {@link #process} method is called, giving it one of
the {@code @AutoFactory} elements, and do nothing else.
factory/src/main/java/com/google/auto/factory/processor/AutoFactoryProcessor.java