diff options
author | Cedric Beust <cedric@beust.com> | 2012-09-23 06:10:45 -0700 |
---|---|---|
committer | Cedric Beust <cedric@beust.com> | 2012-09-23 06:11:47 -0700 |
commit | 5fc805c44e904eb37f24217676b5da1619268c48 (patch) | |
tree | 4977df4dfb78f220d1718a0d973a42d8d318089e /src | |
parent | 31f61c5de3753a86d58a5bf2399ea5ea7312d35b (diff) | |
download | jcommander-5fc805c44e904eb37f24217676b5da1619268c48.tar.gz |
Added enum support (Scott M. Stark).
Diffstat (limited to 'src')
-rw-r--r-- | src/main/java/com/beust/jcommander/JCommander.java | 6 | ||||
-rw-r--r-- | src/test/java/com/beust/jcommander/JCommanderTest.java | 5 | ||||
-rw-r--r-- | src/test/java/com/beust/jcommander/args/ArgsEnum.java | 11 |
3 files changed, 17 insertions, 5 deletions
diff --git a/src/main/java/com/beust/jcommander/JCommander.java b/src/main/java/com/beust/jcommander/JCommander.java index 1b49ae7..efde39e 100644 --- a/src/main/java/com/beust/jcommander/JCommander.java +++ b/src/main/java/com/beust/jcommander/JCommander.java @@ -1235,6 +1235,10 @@ public class JCommander { converterClass = elementType != null ? findConverter((Class<? extends IStringConverter<?>>) elementType) : StringConverter.class; + // Check for enum type parameter + if (converterClass == null && Enum.class.isAssignableFrom((Class) elementType)) { + converterClass = (Class<? extends IStringConverter<?>>) elementType; + } } // @@ -1257,7 +1261,7 @@ public class JCommander { try { String[] names = annotation.names(); String optionName = names.length > 0 ? names[0] : "[Main class]"; - if (converterClass.isEnum()) { + if (converterClass != null && converterClass.isEnum()) { try { result = Enum.valueOf((Class<? extends Enum>) converterClass, value.toUpperCase()); } catch (Exception e) { diff --git a/src/test/java/com/beust/jcommander/JCommanderTest.java b/src/test/java/com/beust/jcommander/JCommanderTest.java index 5199cad..a5caca0 100644 --- a/src/test/java/com/beust/jcommander/JCommanderTest.java +++ b/src/test/java/com/beust/jcommander/JCommanderTest.java @@ -48,6 +48,7 @@ import com.beust.jcommander.args.ArgsBooleanArity; import com.beust.jcommander.args.ArgsBooleanArity0; import com.beust.jcommander.args.ArgsConverter; import com.beust.jcommander.args.ArgsEnum; +import com.beust.jcommander.args.ArgsEnum.ChoiceType; import com.beust.jcommander.args.ArgsEquals; import com.beust.jcommander.args.ArgsHelp; import com.beust.jcommander.args.ArgsI18N1; @@ -561,11 +562,13 @@ public class JCommanderTest { public void enumArgs() { ArgsEnum args = new ArgsEnum(); - String[] argv = { "-choice", "ONE"}; + String[] argv = { "-choice", "ONE", "-choices", "ONE", "TWO" }; JCommander jc = new JCommander(args, argv); Assert.assertEquals(args.choice, ArgsEnum.ChoiceType.ONE); + List<ChoiceType> expected = Arrays.asList(ChoiceType.ONE, ChoiceType.TWO); + Assert.assertEquals(expected, args.choices); Assert.assertEquals(jc.getParameters().get(0).getDescription(), "Options: " + EnumSet.allOf((Class<? extends Enum>) ArgsEnum.ChoiceType.class)); diff --git a/src/test/java/com/beust/jcommander/args/ArgsEnum.java b/src/test/java/com/beust/jcommander/args/ArgsEnum.java index 16643cd..c6b0c08 100644 --- a/src/test/java/com/beust/jcommander/args/ArgsEnum.java +++ b/src/test/java/com/beust/jcommander/args/ArgsEnum.java @@ -18,12 +18,14 @@ package com.beust.jcommander.args; -import com.beust.jcommander.JCommander; -import com.beust.jcommander.Parameter; +import java.util.ArrayList; +import java.util.EnumSet; +import java.util.List; import org.testng.Assert; -import java.util.EnumSet; +import com.beust.jcommander.JCommander; +import com.beust.jcommander.Parameter; /** * Test enums. @@ -36,6 +38,9 @@ public class ArgsEnum { @Parameter(names = "-choice") public ChoiceType choice = ChoiceType.ONE; + @Parameter(names = "-choices", variableArity = true) + public List<ChoiceType> choices = new ArrayList<ChoiceType>(); + public static void main(String[] args1) { ArgsEnum args = new ArgsEnum(); String[] argv = { "-choice", "ONE"}; |