private void printFunctionDescription(final FunctionDescriptionList describeFunction) {
final String functionName = describeFunction.getName().toUpperCase();
final String baseFormat = "%-12s: %s%n";
final String subFormat = "\t%-12s: %s%n";
writer().printf(baseFormat, "Name", functionName);
if (!describeFunction.getAuthor().trim().isEmpty()) {
writer().printf(baseFormat, "Author", describeFunction.getAuthor());
}
if (!describeFunction.getVersion().trim().isEmpty()) {
writer().printf(baseFormat, "Version", describeFunction.getVersion());
}
printDescription(baseFormat, "Overview", describeFunction.getDescription());
writer().printf(baseFormat, "Type", describeFunction.getType().name());
writer().printf(baseFormat, "Jar", describeFunction.getPath());
writer().printf(baseFormat, "Variations", "");
final Collection<FunctionInfo> functions = describeFunction.getFunctions();
functions.forEach(functionInfo -> {
final String arguments = functionInfo.getArguments().stream()
.map(arg -> arg.getName().isEmpty()
? arg.getType()
: arg.getName() + " " + arg.getType())
.collect(Collectors.joining(", "));
writer().printf("%n\t%-12s: %s(%s)%n", "Variation", functionName, arguments);
writer().printf(subFormat, "Returns", functionInfo.getReturnType());
printDescription(subFormat, "Description", functionInfo.getDescription());
functionInfo.getArguments()
.forEach(a -> printDescription(subFormat, a.getName(), a.getDescription()));
}
);
}