summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCedric Beust <cedric@beust.com>2011-11-23 13:15:16 -0800
committerCedric Beust <cedric@beust.com>2011-11-23 13:15:16 -0800
commit66e78950950fa85f88043ebc7c2b2dc9aa0814af (patch)
treecd2f0024117dae0aa9eef2316c343db4399ab949
parent3cf4188ad5c30c66b359353289ac2d03967d6cf8 (diff)
downloadplatform_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--CHANGELOG1
-rw-r--r--src/main/java/com/beust/jcommander/JCommander.java15
-rw-r--r--src/main/java/com/beust/jcommander/Parameters.java5
-rw-r--r--src/test/java/com/beust/jcommander/command/CommandTest.java26
-rw-r--r--src/test/java/com/beust/jcommander/command/NamedCommandAdd.java17
5 files changed, 62 insertions, 2 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 75b9232..138c033 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -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;
+
+}