code: protected boolean findPropertyAnnotations(PojoDescriptorBuilder descriptorBuilder) {
  
      boolean annotationFound = false;
      PojoDescriptor<?> descriptor = descriptorBuilder.getDescriptor(getStateClass());
      for (PojoPropertyDescriptor propertyDescriptor : descriptor.getPropertyDescriptors()) {
        PojoPropertyAccessorOneArg setter = propertyDescriptor.getAccessor(PojoPropertyAccessorOneArgMode.SET);
        if (setter != null) {
          AccessibleObject accessible = setter.getAccessibleObject();
          CliOption option = accessible.getAnnotation(CliOption.class);
          CliArgument argument = accessible.getAnnotation(CliArgument.class);
          if ((option != null) && (argument != null)) {
            // property can not both be option and argument
            throw new CliOptionAndArgumentAnnotationException(propertyDescriptor.getName());
          } else if ((option != null) || (argument != null)) {
            annotationFound = true;
            PojoPropertyAccessorNonArg getter = propertyDescriptor.getAccessor(PojoPropertyAccessorNonArgMode.GET);
            ValueValidator<?> validator = this.validatorBuilder.newValidator(getStateClass(), propertyDescriptor.getName());
            if (option != null) {
              CliOptionContainer optionContainer = new CliOptionContainer(option, setter, getter, validator);
              addOption(optionContainer);
            } else {
              assert (argument != null);
              CliArgumentContainer argumentContainer = new CliArgumentContainer(argument, setter, getter, validator);
              addArgument(argumentContainer);
            }
          }
        }
      }
      return annotationFound;
    }
docs: This method finds the properties annotated with {@link CliOption} or {@link CliArgument}.
  
  @param descriptorBuilder is the {@link PojoDescriptorBuilder} to use (determines if fields or setters are used).
  @return {@code true} if at least one annotated property has been found, {@code false} otherwise.