diff --git a/picocli-examples/src/main/java/picocli/examples/customhelp/AlphabeticSubcommands.java b/picocli-examples/src/main/java/picocli/examples/customhelp/AlphabeticSubcommands.java new file mode 100644 index 000000000..cf1cb4f15 --- /dev/null +++ b/picocli-examples/src/main/java/picocli/examples/customhelp/AlphabeticSubcommands.java @@ -0,0 +1,63 @@ +package picocli.examples.customhelp; + +import picocli.CommandLine; +import picocli.CommandLine.Command; +import picocli.CommandLine.Help; +import picocli.CommandLine.HelpCommand; +import picocli.CommandLine.IHelpFactory; +import picocli.CommandLine.Model.CommandSpec; +import picocli.CommandLine.Spec; + +import java.util.Map; +import java.util.TreeMap; + +/** + * This class has subcommands that are not declared alphabetically. + * We want the help for this class to show the subcommands alphabetically. + */ +@Command(name = "alphabetic", + description = "a command that shows subcommands sorted alphabetically", + subcommands = {Charlie.class, Bravo.class, Alpha.class, HelpCommand.class}) +public class AlphabeticSubcommands implements Runnable { + + @Spec CommandSpec spec; + + @Override + public void run() { + spec.commandLine().usage(System.out); + } + + public static void main(String[] args) { + CommandLine commandLine = new CommandLine(new AlphabeticSubcommands()); + commandLine.setHelpFactory(new IHelpFactory() { + @Override + public Help create(CommandSpec commandSpec, Help.ColorScheme colorScheme) { + return new Help(commandSpec, colorScheme) { + /** + * Returns a sorted map of the subcommands. + */ + @Override + protected Map subcommands() { + return new TreeMap<>(super.subcommands()); + } + }; + } + }); + commandLine.execute(args); + } +} + +@Command(name = "charlie", description = "my name starts with C") +class Charlie implements Runnable { + public void run() {} +} + +@Command(name = "bravo", description = "my name starts with B") +class Bravo implements Runnable { + public void run() {} +} + +@Command(name = "alpha", description = "my name starts with A") +class Alpha implements Runnable { + public void run() {} +}