diff options
author | Cedric Beust <cedric@beust.com> | 2011-11-23 13:15:16 -0800 |
---|---|---|
committer | Cedric Beust <cedric@beust.com> | 2011-11-23 13:15:16 -0800 |
commit | 66e78950950fa85f88043ebc7c2b2dc9aa0814af (patch) | |
tree | cd2f0024117dae0aa9eef2316c343db4399ab949 | |
parent | 3cf4188ad5c30c66b359353289ac2d03967d6cf8 (diff) | |
download | platform_external_jcommander-66e78950950fa85f88043ebc7c2b2dc9aa0814af.tar.gz platform_external_jcommander-66e78950950fa85f88043ebc7c2b2dc9aa0814af.tar.bz2 platform_external_jcommander-66e78950950fa85f88043ebc7c2b2dc9aa0814af.zip |
Added: @Parameter(commandNames) so that command names can be specified with annotations
-rw-r--r-- | CHANGELOG | 1 | ||||
-rw-r--r-- | src/main/java/com/beust/jcommander/JCommander.java | 15 | ||||
-rw-r--r-- | src/main/java/com/beust/jcommander/Parameters.java | 5 | ||||
-rw-r--r-- | src/test/java/com/beust/jcommander/command/CommandTest.java | 26 | ||||
-rw-r--r-- | src/test/java/com/beust/jcommander/command/NamedCommandAdd.java | 17 |
5 files changed, 62 insertions, 2 deletions
@@ -2,6 +2,7 @@ Current Current +Added: @Parameter(commandNames) so that command names can be specified with annotations Added: Support for enums (Adrian Muraru) 1.19 diff --git a/src/main/java/com/beust/jcommander/JCommander.java b/src/main/java/com/beust/jcommander/JCommander.java index 3739585..a3beecb 100644 --- a/src/main/java/com/beust/jcommander/JCommander.java +++ b/src/main/java/com/beust/jcommander/JCommander.java @@ -1157,6 +1157,18 @@ public class JCommander { addCommand(name, object, new String[0]); } + public void addCommand(Object object) { + Parameters p = object.getClass().getAnnotation(Parameters.class); + if (p != null && p.commandNames().length > 0) { + for (String commandName : p.commandNames()) { + addCommand(commandName, object); + } + } else { + throw new ParameterException("Trying to add command " + object.getClass().getName() + + " without specifying its names in @Parameters"); + } + } + /** * Add a command object and its aliases. */ @@ -1312,6 +1324,7 @@ public class JCommander { @Override public String toString() { return getDisplayName(); + } } -} +}
\ No newline at end of file diff --git a/src/main/java/com/beust/jcommander/Parameters.java b/src/main/java/com/beust/jcommander/Parameters.java index e25d1f2..be5b5ce 100644 --- a/src/main/java/com/beust/jcommander/Parameters.java +++ b/src/main/java/com/beust/jcommander/Parameters.java @@ -60,4 +60,9 @@ public @interface Parameters { * @return the key used to find the command description in the resource bundle. */ String commandDescriptionKey() default ""; + + /** + * An array of allowed command names. + */ + String[] commandNames() default {}; } diff --git a/src/test/java/com/beust/jcommander/command/CommandTest.java b/src/test/java/com/beust/jcommander/command/CommandTest.java index 0bedeeb..97e0007 100644 --- a/src/test/java/com/beust/jcommander/command/CommandTest.java +++ b/src/test/java/com/beust/jcommander/command/CommandTest.java @@ -19,6 +19,7 @@ package com.beust.jcommander.command; import com.beust.jcommander.JCommander; +import com.beust.jcommander.ParameterException; import org.testng.Assert; import org.testng.annotations.Test; @@ -27,6 +28,29 @@ import java.util.Arrays; public class CommandTest { @Test + public void namedCommandTest1() { + CommandMain cm = new CommandMain(); + JCommander jc = new JCommander(cm); + NamedCommandAdd add = new NamedCommandAdd(); + jc.addCommand(add); + CommandCommit commit = new CommandCommit(); + jc.addCommand("commit", commit); + jc.parse("add", "-i", "A.java"); + + Assert.assertEquals(jc.getParsedCommand(), "add"); + Assert.assertEquals(add.interactive.booleanValue(), true); + Assert.assertEquals(add.patterns, Arrays.asList("A.java")); + } + + @Test(expectedExceptions = ParameterException.class) + public void shouldComplainIfNoAnnotations() { + CommandMain cm = new CommandMain(); + JCommander jc = new JCommander(cm); + CommandAdd add = new CommandAdd(); + jc.addCommand(add); + } + + @Test public void commandTest1() { CommandMain cm = new CommandMain(); JCommander jc = new JCommander(cm); @@ -64,6 +88,6 @@ public class CommandTest { } public static void main(String[] args) { - new CommandTest().commandTest2(); + new CommandTest().shouldComplainIfNoAnnotations(); } } diff --git a/src/test/java/com/beust/jcommander/command/NamedCommandAdd.java b/src/test/java/com/beust/jcommander/command/NamedCommandAdd.java new file mode 100644 index 0000000..0773e18 --- /dev/null +++ b/src/test/java/com/beust/jcommander/command/NamedCommandAdd.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 = "Add file contents to the index") +public class NamedCommandAdd { + + @Parameter(description = "Patterns of files to be added") + public List<String> patterns; + + @Parameter(names = "-i") + public Boolean interactive = false; + +} |