static ImmutableSet<ExecutableElement> abstractMethods(
      TypeElement typeElement, ProcessingEnvironment processingEnv) {
    Set<ExecutableElement> methods =
        getLocalAndInheritedMethods(
            typeElement, processingEnv.getTypeUtils(), processingEnv.getElementUtils());
    ImmutableSet.Builder<ExecutableElement> abstractMethods = ImmutableSet.builder();
    for (ExecutableElement method : methods) {
      if (method.getModifiers().contains(Modifier.ABSTRACT)) {
        MissingTypes.deferIfMissingTypesIn(method);
        abstractMethods.add(method);
      }
    }
    return abstractMethods.build();
  }
Returns a set of all abstract methods in the given TypeElement or inherited from ancestors. If
any of the abstract methods has a return type or parameter type that is not currently defined
then this method will throw an exception that will cause us to defer processing of the current
class until a later annotation-processing round.
value/src/main/java/com/google/auto/value/processor/BuilderSpec.java