From 44ef916dcf74e46adbf7c2ae99643bd0e97c16e6 Mon Sep 17 00:00:00 2001 From: John Conwell Date: Fri, 6 Jun 2014 19:00:27 -0700 Subject: Adding functionality that allows commands to be hidden from usage output --- src/main/java/com/beust/jcommander/JCommander.java | 18 +++++++++++------- src/main/java/com/beust/jcommander/Parameters.java | 5 +++++ .../beust/jcommander/command/CommandHidden.java | 17 +++++++++++++++++ .../com/beust/jcommander/command/CommandTest.java | 22 ++++++++++++++++++++++ 4 files changed, 55 insertions(+), 7 deletions(-) create mode 100644 src/test/java/com/beust/jcommander/command/CommandHidden.java (limited to 'src') 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 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 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(); } -- cgit v1.2.3