Option Lists

Option Lists

The @OptionList annotation defines options that accept multiple values separated by a delimiter.

Properties

PropertyTypeDefaultDescription
nameString""Option name (variable name if empty)
shortNamechar'\u0000'Short name (e.g., -p)
descriptionString""Help description
valueSeparatorchar','Character separating values
requiredbooleanfalseIs option required?
defaultValueString[]{}Default values
askIfNotSetbooleanfalsePrompt user if not set
converterClass<? extends Converter>NullConverter.classCustom value converter
completerClass<? extends OptionCompleter>NullOptionCompleter.classCustom completer
validatorClass<? extends OptionValidator>NullValidator.classCustom validator
activatorClass<? extends OptionActivator>NullActivator.classCustom activator
rendererClass<? extends OptionRenderer>NullOptionRenderer.classCustom renderer
parserClass<? extends OptionParser>AeshOptionParser.classCustom parser

Basic Example

@CommandDefinition(name = "build")
public class BuildCommand implements Command<CommandInvocation> {

    @OptionList(name = "modules", description = "Modules to build")
    private List<String> modules;

    @Override
    public CommandResult execute(CommandInvocation invocation) {
        invocation.println("Building: " + String.join(", ", modules));
        return CommandResult.SUCCESS;
    }
}

Usage: build --modules module1,module2,module3 Or with space: build --modules module1,module2,module3

Custom Separator

Use valueSeparator to change the delimiter:

@OptionList(name = "ports", valueSeparator = ':', description = "Port list")
private List<Integer> ports;

Usage: build --ports 8080:8081:8082

With Converter

@OptionList(
    name = "files", 
    converter = PathConverter.class,
    description = "List of files"
)
private List<Path> files;

public static class PathConverter implements Converter<Path> {
    @Override
    public Path convert(String input) {
        return Paths.get(input);
    }
}

Usage: process --files /path/file1.txt,/path/file2.txt

Default Values

@OptionList(
    defaultValue = {"core", "utils", "api"},
    description = "Modules"
)
private List<String> modules;

Set Collection

Use Set instead of List to eliminate duplicates:

@OptionList(description = "Unique tags")
private Set<String> tags;

Custom Types

@OptionList(converter = VersionConverter.class, description = "Supported versions")
private List<Version> versions;