static OptionSpec extractOptionSpec(TypedMember member, IFactory factory) {
Option option = member.getAnnotation(Option.class);
OptionSpec.Builder builder = OptionSpec.builder(option.names());
initCommon(builder, member);
builder.order(option.order());
builder.help(option.help());
builder.usageHelp(option.usageHelp());
builder.versionHelp(option.versionHelp());
builder.showDefaultValue(option.showDefaultValue());
if (!NoCompletionCandidates.class.equals(option.completionCandidates())) {
builder.completionCandidates(DefaultFactory.createCompletionCandidates(factory, option.completionCandidates()));
}
builder.arity(Range.optionArity(member));
builder.required(option.required());
builder.interactive(option.interactive());
Class<?>[] elementTypes = inferTypes(member.getType(), option.type(), member.getGenericType());
builder.auxiliaryTypes(elementTypes);
builder.paramLabel(inferLabel(option.paramLabel(), member.name(), member.getType(), elementTypes));
builder.hideParamSyntax(option.hideParamSyntax());
builder.description(option.description());
builder.descriptionKey(option.descriptionKey());
builder.splitRegex(option.split());
builder.hidden(option.hidden());
builder.defaultValue(option.defaultValue());
builder.converters(DefaultFactory.createConverter(factory, option.converter()));
return builder.build();
}
static PositionalParamSpec extractPositionalParamSpec(TypedMember member, IFactory factory) {