static boolean hasVisibleNoArgConstructor(TypeElement type) {
    return type.getKind().isInterface()
        || constructorsIn(type.getEnclosedElements()).stream()
            .anyMatch(
                c -> c.getParameters().isEmpty() && !c.getModifiers().contains(Modifier.PRIVATE));
  }
True if the type is a class with a non-private no-arg constructor, or is an interface.
value/src/main/java/com/google/auto/value/processor/AutoValueishProcessor.java