private String getFullQualifiedNameByClass(Class<? extends ArgsBundler> clazz)
      throws ProcessingException {

    // It's the none Args bundler, hence no future checks are needed
    if (clazz.equals(NoneArgsBundler.class)) {
      return NoneArgsBundler.class.getCanonicalName();
    }

    // Check public
    if (!Modifier.isPublic(clazz.getModifiers())) {

      throw new ProcessingException(element,
          "The %s must be a public class to be a valid ArgsBundler", clazz.getCanonicalName());
    }

    // Check constructors
    Constructor<?>[] constructors = clazz.getConstructors();

    boolean foundDefaultConstructor = false;
    for (Constructor c : constructors) {
      boolean isPublicConstructor = Modifier.isPublic(c.getModifiers());
      Class<?>[] pType = c.getParameterTypes();

      if (pType.length == 0 && isPublicConstructor) {
        foundDefaultConstructor = true;
        break;
      }
    }

    if (!foundDefaultConstructor) {
      throw new ProcessingException(element,
          "The %s must provide a public empty default constructor", clazz.getCanonicalName());
    }

    return clazz.getCanonicalName();
  }