in log4j-core/src/main/java/org/apache/logging/log4j/core/tools/picocli/CommandLine.java [2946:3002]
public Help(final Object command, final ColorScheme colorScheme) {
this.command = Assert.notNull(command, "command");
this.colorScheme = Assert.notNull(colorScheme, "colorScheme").applySystemProperties();
final List<Field> options = new ArrayList<>();
final List<Field> operands = new ArrayList<>();
Class<?> cls = command.getClass();
while (cls != null) {
for (final Field field : cls.getDeclaredFields()) {
field.setAccessible(true);
if (field.isAnnotationPresent(Option.class)) {
final Option option = field.getAnnotation(Option.class);
if (!option.hidden()) { // hidden options should not appear in usage help
// TODO remember longest concatenated option string length (issue #45)
options.add(field);
}
}
if (field.isAnnotationPresent(Parameters.class)) {
operands.add(field);
}
}
// superclass values should not overwrite values if both class and superclass have a @Command annotation
if (cls.isAnnotationPresent(Command.class)) {
final Command cmd = cls.getAnnotation(Command.class);
if (DEFAULT_COMMAND_NAME.equals(commandName)) {
commandName = cmd.name();
}
separator = (separator == null) ? cmd.separator() : separator;
abbreviateSynopsis = (abbreviateSynopsis == null) ? cmd.abbreviateSynopsis() : abbreviateSynopsis;
sortOptions = (sortOptions == null) ? cmd.sortOptions() : sortOptions;
requiredOptionMarker = (requiredOptionMarker == null) ? cmd.requiredOptionMarker() : requiredOptionMarker;
showDefaultValues = (showDefaultValues == null) ? cmd.showDefaultValues() : showDefaultValues;
customSynopsis = empty(customSynopsis) ? cmd.customSynopsis() : customSynopsis;
description = empty(description) ? cmd.description() : description;
header = empty(header) ? cmd.header() : header;
footer = empty(footer) ? cmd.footer() : footer;
headerHeading = empty(headerHeading) ? cmd.headerHeading() : headerHeading;
synopsisHeading = empty(synopsisHeading) || "Usage: ".equals(synopsisHeading) ? cmd.synopsisHeading() : synopsisHeading;
descriptionHeading = empty(descriptionHeading) ? cmd.descriptionHeading() : descriptionHeading;
parameterListHeading = empty(parameterListHeading) ? cmd.parameterListHeading() : parameterListHeading;
optionListHeading = empty(optionListHeading) ? cmd.optionListHeading() : optionListHeading;
commandListHeading = empty(commandListHeading) || "Commands:%n".equals(commandListHeading) ? cmd.commandListHeading() : commandListHeading;
footerHeading = empty(footerHeading) ? cmd.footerHeading() : footerHeading;
}
cls = cls.getSuperclass();
}
sortOptions = (sortOptions == null) ? true : sortOptions;
abbreviateSynopsis = (abbreviateSynopsis == null) ? false : abbreviateSynopsis;
requiredOptionMarker = (requiredOptionMarker == null) ? ' ' : requiredOptionMarker;
showDefaultValues = (showDefaultValues == null) ? false : showDefaultValues;
synopsisHeading = (synopsisHeading == null) ? "Usage: " : synopsisHeading;
commandListHeading = (commandListHeading == null) ? "Commands:%n" : commandListHeading;
separator = (separator == null) ? DEFAULT_SEPARATOR : separator;
parameterLabelRenderer = createDefaultParamLabelRenderer(); // uses help separator
Collections.sort(operands, new PositionalParametersSorter());
positionalParametersFields = Collections.unmodifiableList(operands);
optionFields = Collections.unmodifiableList(options);
}