code: private static void generateOptionsFromBuilderApi(Class<?> apiNode, Set<Class<?>> processedApiNodes, List<CliDeclaredOptionSpec> cliOptionsFoundSoFar) {
  		if (processedApiNodes.contains(apiNode)) {
  			return;
  		}
  		
  		processedApiNodes.add(apiNode);
  		
  		for (Method m : ClassUtils.collectMethods(apiNode, apiNode, of(MethodModifier.PUBLIC))) {
  			if (methodIsCliCompatible(m)) {
  				final String optionName = determineCliOptionName(apiNode, m);
  				LOGGER.debug("option {} found for {}.{}({})", optionName, apiNode.getSimpleName(), m.getName(), m.getParameterTypes());
  				
  				// assertion check
  				for (CliDeclaredOptionSpec knownOption : cliOptionsFoundSoFar) {
  					if (knownOption.getName().equals(optionName)) {
  						String msg = "@CliOptionNameOverride needed one of the following two methods:\n\t%s\n\t%s\n\t----------";
  						throw new AssertionError(format(msg, knownOption.getSourceMethod(), m));
  					}
  				}
  				
  				cliOptionsFoundSoFar.add(new CliDeclaredOptionSpec(
  						optionName,
  						TherapiJavadocHelper.determineCliOptionDescriptions(m),
  						getArgumentsForCliOption(m),
  						apiNode.getAnnotation(Cli.BuilderApiNode.class).builderApiType(),
  						m));
  				Class<?> potentialNestedApiNode = m.getReturnType();
  				if (potentialNestedApiNode.isAnnotationPresent(Cli.BuilderApiNode.class)) {
  					generateOptionsFromBuilderApiChain(potentialNestedApiNode, processedApiNodes, cliOptionsFoundSoFar);
  				}
  			} else {
  				LOGGER.debug("Method not CLI compatible: {}.{}({})", apiNode.getSimpleName(), m.getName(), Arrays.toString(m.getParameterTypes()));
  			}
  		}
  	}
docs: Produces all the --option Picocli-based params for specific API class. <br>
  Recursive for returned API class (since builders can return different builders.