summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCedric Beust <cedric@beust.com>2017-04-25 20:08:28 -0700
committerCedric Beust <cedric@beust.com>2017-04-25 20:08:28 -0700
commit4435722a0b45be660b1b58834d4f5326fc78c9ad (patch)
tree2546cb063534203b316f234800ca965df6efc238
parentcfb69b748feaace4aab253755e8a1e07b779f8fb (diff)
downloadjcommander-4435722a0b45be660b1b58834d4f5326fc78c9ad.tar.gz
Add support for inverted booleans.
-rw-r--r--src/main/java/com/beust/jcommander/JCommander.java8
-rw-r--r--src/test/java/com/beust/jcommander/JCommanderTest.java14
2 files changed, 20 insertions, 2 deletions
diff --git a/src/main/java/com/beust/jcommander/JCommander.java b/src/main/java/com/beust/jcommander/JCommander.java
index b0ba149..59073c6 100644
--- a/src/main/java/com/beust/jcommander/JCommander.java
+++ b/src/main/java/com/beust/jcommander/JCommander.java
@@ -668,7 +668,9 @@ public class JCommander {
// an arity of 1, in which case we need to read the next value
if ((fieldType == boolean.class || fieldType == Boolean.class)
&& pd.getParameter().arity() == -1) {
- pd.addValue("true");
+ // Flip the value this boolean was initialized with
+ Boolean value = (Boolean) pd.getParameterized().get(pd.getObject());
+ pd.addValue(value ? "false" : "true");
requiredFields.remove(pd.getParameterized());
} else {
increment = processFixedArity(args, i, pd, validate, fieldType);
@@ -829,7 +831,9 @@ public class JCommander {
if (arity == 0 &&
(Boolean.class.isAssignableFrom(fieldType)
|| boolean.class.isAssignableFrom(fieldType))) {
- pd.addValue("true");
+ // Flip the value this boolean was initialized with
+ Boolean value = (Boolean) pd.getParameterized().get(pd.getObject());
+ pd.addValue(value ? "false" : "true");
requiredFields.remove(pd.getParameterized());
} else if (arity == 0) {
throw new ParameterException("Expected a value after parameter " + arg);
diff --git a/src/test/java/com/beust/jcommander/JCommanderTest.java b/src/test/java/com/beust/jcommander/JCommanderTest.java
index a93966e..a95ab30 100644
--- a/src/test/java/com/beust/jcommander/JCommanderTest.java
+++ b/src/test/java/com/beust/jcommander/JCommanderTest.java
@@ -1505,6 +1505,20 @@ public class JCommanderTest {
Assert.assertEquals(generateOption.configFile.getName(), "foo.txt");
}
+ @Test
+ public void invertedBoolean() {
+ class Args {
+ @Parameter(names = {"--f"})
+ private boolean f = true;
+ }
+ Args args = new Args();
+ JCommander.newBuilder()
+ .addObject(args)
+ .args(new String[] { "--f"})
+ .build();
+ Assert.assertEquals(args.f, false);
+ }
+
@Test(enabled = false)
public static void main(String[] args) {