diff options
author | John Conwell <john@iamjohn.me> | 2014-06-06 19:00:27 -0700 |
---|---|---|
committer | John Conwell <john@iamjohn.me> | 2014-06-06 19:00:27 -0700 |
commit | 44ef916dcf74e46adbf7c2ae99643bd0e97c16e6 (patch) | |
tree | 352ae6effcf133c6c337c27cff15f65b8ed62249 /src | |
parent | 649895bc27f8b294e596727a88d765d923be2226 (diff) | |
download | platform_external_jcommander-44ef916dcf74e46adbf7c2ae99643bd0e97c16e6.tar.gz platform_external_jcommander-44ef916dcf74e46adbf7c2ae99643bd0e97c16e6.tar.bz2 platform_external_jcommander-44ef916dcf74e46adbf7c2ae99643bd0e97c16e6.zip |
Adding functionality that allows commands to be hidden from usage output
Diffstat (limited to 'src')
4 files changed, 55 insertions, 7 deletions
diff --git a/src/main/java/com/beust/jcommander/JCommander.java b/src/main/java/com/beust/jcommander/JCommander.java index 3884976..5538661 100644 --- a/src/main/java/com/beust/jcommander/JCommander.java +++ b/src/main/java/com/beust/jcommander/JCommander.java @@ -1119,13 +1119,17 @@ public class JCommander { // The magic value 3 is the number of spaces between the name of the option // and its description for (Map.Entry<ProgramName, JCommander> commands : m_commands.entrySet()) { - ProgramName progName = commands.getKey(); - String dispName = progName.getDisplayName(); - out.append(indent).append(" " + dispName); // + s(spaceCount) + getCommandDescription(progName.name) + "\n"); - - // Options for this command - usage(progName.getName(), out, " "); - out.append("\n"); + Object arg = commands.getValue().getObjects().get(0); + Parameters p = arg.getClass().getAnnotation(Parameters.class); + if (!p.hidden()) { + ProgramName progName = commands.getKey(); + String dispName = progName.getDisplayName(); + out.append(indent).append(" " + dispName); // + s(spaceCount) + getCommandDescription(progName.name) + "\n"); + + // Options for this command + usage(progName.getName(), out, " "); + out.append("\n"); + } } } } diff --git a/src/main/java/com/beust/jcommander/Parameters.java b/src/main/java/com/beust/jcommander/Parameters.java index 9834ea0..f2e8c76 100644 --- a/src/main/java/com/beust/jcommander/Parameters.java +++ b/src/main/java/com/beust/jcommander/Parameters.java @@ -67,4 +67,9 @@ public @interface Parameters { * An array of allowed command names. */ String[] commandNames() default {}; + + /** + * If true, this command won't appear in the usage(). + */ + boolean hidden() default false; } diff --git a/src/test/java/com/beust/jcommander/command/CommandHidden.java b/src/test/java/com/beust/jcommander/command/CommandHidden.java new file mode 100644 index 0000000..a3fc4fa --- /dev/null +++ b/src/test/java/com/beust/jcommander/command/CommandHidden.java @@ -0,0 +1,17 @@ +package com.beust.jcommander.command; + +import com.beust.jcommander.Parameter; +import com.beust.jcommander.Parameters; + +import java.util.List; + +@Parameters(commandNames = "add", commandDescription = "Hidden command to add file contents to the index", hidden = true) +public class CommandHidden { + + @Parameter(description = "Patterns of files to be added") + public List<String> patterns; + + @Parameter(names = "-i") + public Boolean interactive = false; + +} diff --git a/src/test/java/com/beust/jcommander/command/CommandTest.java b/src/test/java/com/beust/jcommander/command/CommandTest.java index 97e0007..cf921bd 100644 --- a/src/test/java/com/beust/jcommander/command/CommandTest.java +++ b/src/test/java/com/beust/jcommander/command/CommandTest.java @@ -87,6 +87,28 @@ public class CommandTest { Assert.assertEquals(commit.files, Arrays.asList("A.java", "B.java")); } + @Test + public void hiddenCommandTest() { + CommandMain cm = new CommandMain(); + JCommander jc = new JCommander(cm); + CommandAdd add = new CommandAdd(); + jc.addCommand("add", add); + CommandHidden hidden = new CommandHidden(); + jc.addCommand("hidden", hidden); + jc.parse("hidden", "-i", "A.java"); + + Assert.assertEquals(jc.getParsedCommand(), "hidden"); + Assert.assertEquals(hidden.interactive.booleanValue(), true); + Assert.assertEquals(hidden.patterns, Arrays.asList("A.java")); + + jc.setProgramName("TestCommander"); + StringBuilder out = new StringBuilder(); + jc.usage(out); + + Assert.assertTrue(out.toString().contains("add Add file contents to the index")); + Assert.assertFalse(out.toString().contains("hidden Hidden command to add file contents to the index")); + } + public static void main(String[] args) { new CommandTest().shouldComplainIfNoAnnotations(); } |