diff --git a/doc/index.adoc b/doc/index.adoc
index fca904db..d4b88be0 100644
--- a/doc/index.adoc
+++ b/doc/index.adoc
@@ -989,7 +989,7 @@ class ParameterNamesUsageFormatter implements IUsageFormatter {
// Extend other required methods as seen in DefaultUsageFormatter
// This is the method which does the actual output formatting
- public void usage(StringBuilder out, String indent) {
+ public void usage(JCommander commander, StringBuilder out, String indent) {
if (commander.getDescriptions() == null) {
commander.createDescriptions();
}
diff --git a/src/main/java/com/beust/jcommander/DefaultUsageFormatter.java b/src/main/java/com/beust/jcommander/DefaultUsageFormatter.java
index aa37d7c5..1efdb579 100644
--- a/src/main/java/com/beust/jcommander/DefaultUsageFormatter.java
+++ b/src/main/java/com/beust/jcommander/DefaultUsageFormatter.java
@@ -27,49 +27,80 @@
* The default usage formatter.
*/
public class DefaultUsageFormatter implements IUsageFormatter {
+ public DefaultUsageFormatter() {
+ }
+
+ /**
+ * Returns the internationalized version of the string if available, otherwise it returns def.
+ * @return the internationalized version of the string if available, otherwise it returns def
+ */
+ protected static String getI18nString(ResourceBundle bundle, String key, String def) {
+ String s = bundle != null ? bundle.getString(key) : null;
+ return s != null ? s : def;
+ }
+
+ /**
+ * Returns count-many spaces.
+ * @return count-many spaces
+ */
+ protected static String s(int count) {
+ StringBuilder result = new StringBuilder();
- private final JCommander commander;
+ for (int i = 0; i < count; i++) {
+ result.append(" ");
+ }
+ return result.toString();
+ }
- public DefaultUsageFormatter(JCommander commander) {
- this.commander = commander;
+ /**
+ * Returns new line followed by indent-many spaces.
+ * @return new line followed by indent-many spaces
+ */
+ private static String newLineAndIndent(int indent) {
+ return "\n" + s(indent);
}
/**
* Prints the usage to {@link JCommander#getConsole()} on the underlying commander instance.
*/
- public final void usage(String commandName) {
+ @Override
+ public final void usage(JCommander commander, String commandName) {
StringBuilder sb = new StringBuilder();
- usage(commandName, sb);
+ usage(commander, commandName, sb);
commander.getConsole().println(sb.toString());
}
/**
* Store the usage for the argument command in the argument string builder.
*/
- public final void usage(String commandName, StringBuilder out) {
- usage(commandName, out, "");
+ @Override
+ public final void usage(JCommander commander, String commandName, StringBuilder out) {
+ usage(commander, commandName, out, "");
}
/**
* Store the usage in the argument string builder.
*/
- public final void usage(StringBuilder out) {
- usage(out, "");
+ @Override
+ public final void usage(JCommander commander, StringBuilder out) {
+ usage(commander, out, "");
}
/**
* Store the usage for the command in the argument string builder, indenting every line with the
* value of indent.
*/
- public final void usage(String commandName, StringBuilder out, String indent) {
- String description = getCommandDescription(commandName);
+ @Override
+ public final void usage(
+ JCommander commander, String commandName, StringBuilder out, String indent) {
+ String description = getCommandDescription(commander, commandName);
JCommander jc = commander.findCommandByAlias(commandName);
if (description != null) {
out.append(indent).append(description);
out.append("\n");
}
- jc.getUsageFormatter().usage(out, indent);
+ usage(jc, out, indent);
}
/**
@@ -78,12 +109,13 @@ public final void usage(String commandName, StringBuilder out, String indent) {
* subclass of this class.
*
*
- * - Main line - {@link #appendMainLine(StringBuilder, boolean, boolean, int, String)}
- * - Parameters - {@link #appendAllParametersDetails(StringBuilder, int, String, List)}
- * - Commands - {@link #appendCommands(StringBuilder, int, int, String)}
+ * - Main line - {@link #appendMainLine(JCommander, StringBuilder, boolean, boolean, int, String)}
+ * - Parameters - {@link #appendAllParametersDetails(JCommander, StringBuilder, int, String, List)}
+ * - Commands - {@link #appendCommands(JCommander, StringBuilder, int, int, String)}
*
*/
- public void usage(StringBuilder out, String indent) {
+ @Override
+ public void usage(JCommander commander, StringBuilder out, String indent) {
if (commander.getDescriptions() == null) {
commander.createDescriptions();
}
@@ -95,7 +127,7 @@ public void usage(StringBuilder out, String indent) {
final int indentCount = indent.length() + descriptionIndent;
// Append first line (aka main line) of the usage
- appendMainLine(out, hasOptions, hasCommands, indentCount, indent);
+ appendMainLine(commander, out, hasOptions, hasCommands, indentCount, indent);
// Align the descriptions at the "longestName" column
int longestName = 0;
@@ -117,28 +149,30 @@ public void usage(StringBuilder out, String indent) {
sortedParameters.sort(commander.getParameterDescriptionComparator());
// Append all the parameter names and descriptions
- appendAllParametersDetails(out, indentCount, indent, sortedParameters);
+ appendAllParametersDetails(commander, out, indentCount, indent, sortedParameters);
// Append commands if they were specified
if (hasCommands) {
- appendCommands(out, indentCount, descriptionIndent, indent);
+ appendCommands(commander, out, indentCount, descriptionIndent, indent);
}
}
/**
* Appends the main line segment of the usage to the argument string builder, indenting every
* line with indentCount-many indent.
- *
+ * @param commander the commander
* @param out the builder to append to
* @param hasOptions if the options section should be appended
* @param hasCommands if the comments section should be appended
* @param indentCount the amount of indentation to apply
* @param indent the indentation
*/
- public void appendMainLine(StringBuilder out, boolean hasOptions, boolean hasCommands, int indentCount,
- String indent) {
+ protected void appendMainLine(
+ JCommander commander, StringBuilder out, boolean hasOptions, boolean hasCommands,
+ int indentCount,
+ String indent) {
String programName = commander.getProgramDisplayName() != null
- ? commander.getProgramDisplayName() : "";
+ ? commander.getProgramDisplayName() : "";
StringBuilder mainLine = new StringBuilder();
mainLine.append(indent).append("Usage: ").append(programName);
@@ -150,24 +184,27 @@ public void appendMainLine(StringBuilder out, boolean hasOptions, boolean hasCom
mainLine.append(indent).append(" [command] [command options]");
}
- if (commander.getMainParameter() != null && commander.getMainParameter().getDescription() != null) {
- mainLine.append(" ").append(commander.getMainParameter().getDescription().getDescription());
+ if (commander.getMainParameter() != null
+ && commander.getMainParameter().getDescription() != null) {
+ mainLine.append(" ")
+ .append(commander.getMainParameter().getDescription().getDescription());
}
- wrapDescription(out, indentCount, mainLine.toString());
+ wrapDescription(commander, out, indentCount, mainLine.toString());
out.append("\n");
}
/**
* Appends the details of all parameters in the given order to the argument string builder, indenting every
* line with indentCount-many indent.
- *
+ * @param commander the commander
* @param out the builder to append to
* @param indentCount the amount of indentation to apply
* @param indent the indentation
* @param sortedParameters the parameters to append to the builder
*/
- public void appendAllParametersDetails(StringBuilder out, int indentCount, String indent,
- List sortedParameters) {
+ protected void appendAllParametersDetails(
+ JCommander commander, StringBuilder out, int indentCount, String indent,
+ List sortedParameters) {
if (sortedParameters.size() > 0) {
out.append(indent).append(" Options:\n");
}
@@ -179,18 +216,19 @@ public void appendAllParametersDetails(StringBuilder out, int indentCount, Strin
// First line, command name
out.append(indent)
- .append(" ")
- .append(parameter.required() ? "* " : " ")
- .append(pd.getNames())
- .append("\n");
+ .append(" ")
+ .append(parameter.required() ? "* " : " ")
+ .append(pd.getNames())
+ .append("\n");
if (hasDescription) {
- wrapDescription(out, indentCount, s(indentCount) + description);
+ wrapDescription(commander, out, indentCount, s(indentCount) + description);
}
Object def = pd.getDefault();
if (pd.isDynamicParameter()) {
- String syntax = "Syntax: " + parameter.names()[0] + "key" + parameter.getAssignment() + "value";
+ String syntax =
+ "Syntax: " + parameter.names()[0] + "key" + parameter.getAssignment() + "value";
if (hasDescription) {
out.append(newLineAndIndent(indentCount));
@@ -201,7 +239,8 @@ public void appendAllParametersDetails(StringBuilder out, int indentCount, Strin
}
if (def != null && !pd.isHelp()) {
- String displayedDef = Strings.isStringEmpty(def.toString()) ? "" : def.toString();
+ String displayedDef =
+ Strings.isStringEmpty(def.toString()) ? "" : def.toString();
String defaultText = "Default: " + (parameter.password() ? "********" : displayedDef);
if (hasDescription) {
@@ -237,30 +276,34 @@ public void appendAllParametersDetails(StringBuilder out, int indentCount, Strin
* indentCount-many indent. The commands are obtained from calling
* {@link JCommander#getRawCommands()} and the commands are resolved using
* {@link JCommander#findCommandByAlias(String)} on the underlying commander instance.
- *
+ * @param commander the commander
* @param out the builder to append to
* @param indentCount the amount of indentation to apply
* @param descriptionIndent the indentation for the description
* @param indent the indentation
*/
- public void appendCommands(StringBuilder out, int indentCount, int descriptionIndent, String indent) {
+ protected void appendCommands(
+ JCommander commander, StringBuilder out, int indentCount, int descriptionIndent,
+ String indent) {
out.append(indent + " Commands:\n");
// The magic value 3 is the number of spaces between the name of the option and its description
- for (Map.Entry commands : commander.getRawCommands().entrySet()) {
+ for (Map.Entry commands : commander.getRawCommands()
+ .entrySet()) {
Object arg = commands.getValue().getObjects().get(0);
Parameters p = arg.getClass().getAnnotation(Parameters.class);
if (p == null || !p.hidden()) {
JCommander.ProgramName progName = commands.getKey();
String dispName = progName.getDisplayName();
- String description = indent + s(4) + dispName + s(6) + getCommandDescription(progName.getName());
- wrapDescription(out, indentCount + descriptionIndent, description);
+ String description = indent + s(4) + dispName + s(6) + getCommandDescription(commander,
+ progName.getName());
+ wrapDescription(commander, out, indentCount + descriptionIndent, description);
out.append("\n");
// Options for this command
JCommander jc = commander.findCommandByAlias(progName.getName());
- jc.getUsageFormatter().usage(out, indent + s(6));
+ usage(jc, out, indent + s(6));
out.append("\n");
}
}
@@ -270,11 +313,12 @@ public void appendCommands(StringBuilder out, int indentCount, int descriptionIn
* Returns the description of the command corresponding to the argument command name. The commands are resolved
* by calling {@link JCommander#findCommandByAlias(String)}, and the default resource bundle used from
* {@link JCommander#getBundle()} on the underlying commander instance.
- *
+ * @param commander the commander
* @param commandName the name of the command to get the description for
* @return the description of the command.
*/
- public String getCommandDescription(String commandName) {
+ @Override
+ public String getCommandDescription(JCommander commander, String commandName) {
JCommander jc = commander.findCommandByAlias(commandName);
if (jc == null) {
@@ -309,15 +353,17 @@ public String getCommandDescription(String commandName) {
/**
* Wrap a potentially long line to the value obtained by calling {@link JCommander#getColumnSize()} on the
* underlying commander instance.
- *
- * @param out the output
- * @param indent the indentation in spaces for lines after the first line.
+ * @param commander the commander
+ * @param out the output
+ * @param indent the indentation in spaces for lines after the first line.
* @param currentLineIndent the length of the indentation of the initial line
- * @param description the text to wrap. No extra spaces are inserted before {@code
- * description}. If the first line needs to be indented prepend the
- * correct number of spaces to {@code description}.
+ * @param description the text to wrap. No extra spaces are inserted before {@code
+ * description}. If the first line needs to be indented prepend the
+ * correct number of spaces to {@code description}.
*/
- public void wrapDescription(StringBuilder out, int indent, int currentLineIndent, String description) {
+ protected void wrapDescription(
+ JCommander commander, StringBuilder out, int indent, int currentLineIndent,
+ String description) {
int max = commander.getColumnSize();
String[] words = description.split(" ");
int current = currentLineIndent;
@@ -341,49 +387,17 @@ public void wrapDescription(StringBuilder out, int indent, int currentLineIndent
}
/**
- * Wrap a potentially long line to {@link #commander#getColumnSize()}.
- *
- * @param out the output
- * @param indent the indentation in spaces for lines after the first line.
+ * Wrap a potentially long line to {@link JCommander#getColumnSize()}.
+ * @param commander the commander
+ * @param out the output
+ * @param indent the indentation in spaces for lines after the first line.
* @param description the text to wrap. No extra spaces are inserted before {@code
- * description}. If the first line needs to be indented prepend the
- * correct number of spaces to {@code description}.
- * @see #wrapDescription(StringBuilder, int, int, String)
- */
- public void wrapDescription(StringBuilder out, int indent, String description) {
- wrapDescription(out, indent, 0, description);
- }
-
- /**
- * Returns the internationalized version of the string if available, otherwise it returns def.
- *
- * @return the internationalized version of the string if available, otherwise it returns def
- */
- public static String getI18nString(ResourceBundle bundle, String key, String def) {
- String s = bundle != null ? bundle.getString(key) : null;
- return s != null ? s : def;
- }
-
- /**
- * Returns count-many spaces.
- *
- * @return count-many spaces
- */
- public static String s(int count) {
- StringBuilder result = new StringBuilder();
-
- for (int i = 0; i < count; i++) {
- result.append(" ");
- }
- return result.toString();
- }
-
- /**
- * Returns new line followed by indent-many spaces.
- *
- * @return new line followed by indent-many spaces
+ * description}. If the first line needs to be indented prepend the
+ * correct number of spaces to {@code description}.
+ * @see #wrapDescription(JCommander, StringBuilder, int, int, String)
*/
- private static String newLineAndIndent(int indent) {
- return "\n" + s(indent);
+ protected void wrapDescription(
+ JCommander commander, StringBuilder out, int indent, String description) {
+ wrapDescription(commander, out, indent, 0, description);
}
}
diff --git a/src/main/java/com/beust/jcommander/IUsageFormatter.java b/src/main/java/com/beust/jcommander/IUsageFormatter.java
index 1171a1e8..3d9a8a2c 100644
--- a/src/main/java/com/beust/jcommander/IUsageFormatter.java
+++ b/src/main/java/com/beust/jcommander/IUsageFormatter.java
@@ -26,30 +26,30 @@ public interface IUsageFormatter {
/**
* Display the usage for this command.
*/
- void usage(String commandName);
+ void usage(JCommander commander, String commandName);
/**
* Store the help for the command in the passed string builder.
*/
- void usage(String commandName, StringBuilder out);
+ void usage(JCommander commander, String commandName, StringBuilder out);
/**
* Store the help in the passed string builder.
*/
- void usage(StringBuilder out);
+ void usage(JCommander commander, StringBuilder out);
/**
* Store the help for the command in the passed string builder, indenting every line with "indent".
*/
- void usage(String commandName, StringBuilder out, String indent);
+ void usage(JCommander commander, String commandName, StringBuilder out, String indent);
/**
* Stores the help in the passed string builder, with the argument indentation.
*/
- void usage(StringBuilder out, String indent);
+ void usage(JCommander commander, StringBuilder out, String indent);
/**
* @return the description of the argument command
*/
- String getCommandDescription(String commandName);
+ String getCommandDescription(JCommander commander, String commandName);
}
diff --git a/src/main/java/com/beust/jcommander/JCommander.java b/src/main/java/com/beust/jcommander/JCommander.java
index b06ad144..d88189f0 100644
--- a/src/main/java/com/beust/jcommander/JCommander.java
+++ b/src/main/java/com/beust/jcommander/JCommander.java
@@ -110,7 +110,7 @@ public void addValue(Object convertedValue) {
/**
* The usage formatter to use in {@link #usage()}.
*/
- private IUsageFormatter usageFormatter = new DefaultUsageFormatter(this);
+ private IUsageFormatter usageFormatter = new DefaultUsageFormatter();
private MainParameter mainParameter = null;
@@ -1020,12 +1020,42 @@ public void setProgramName(String name, String... aliases) {
*/
public void usage() {
StringBuilder sb = new StringBuilder();
- usageFormatter.usage(sb);
+ usageFormatter.usage(this, sb);
getConsole().println(sb.toString());
}
/**
- * Sets the usage formatter.
+ * Prints the usage to given {@link StringBuilder} using the underlying {@link #usageFormatter}
+ * @param sb {@link StringBuilder} to append
+ */
+ void usage(StringBuilder sb) {
+ // package access, for tests
+ usageFormatter.usage(this, sb);
+ }
+
+ /**
+ * Prints the usage of subcommand on {@link #getConsole()} using the underlying {@link #usageFormatter}.
+ */
+ public void usage(String commandName) {
+ StringBuilder sb = new StringBuilder();
+ usageFormatter.usage(this, commandName, sb);
+ getConsole().println(sb.toString());
+ }
+
+ void usage(String commandName, StringBuilder sb) {
+ // package access, for tests
+ usageFormatter.usage(this, commandName, sb);
+ }
+
+ /**
+ * @return Get the description of the argument command using the underlying {@link #usageFormatter}
+ */
+ public String getCommandDescription(String commandName) {
+ return usageFormatter.getCommandDescription(this, commandName);
+ }
+
+ /**
+ * Sets the usage formatter. This will set usage formatter for all subcommands recursively.
*
* @param usageFormatter the usage formatter
* @throws IllegalArgumentException if the argument is null
@@ -1034,6 +1064,9 @@ public void setUsageFormatter(IUsageFormatter usageFormatter) {
if (usageFormatter == null)
throw new IllegalArgumentException("Argument UsageFormatter must not be null");
this.usageFormatter = usageFormatter;
+ for (Map.Entry entry : commands.entrySet()) {
+ entry.getValue().setUsageFormatter(usageFormatter);
+ }
}
/**
@@ -1393,6 +1426,7 @@ public void addCommand(String name, Object object, String... aliases) {
jc.addObject(object);
jc.createDescriptions();
jc.setProgramName(name, aliases);
+ jc.setUsageFormatter(usageFormatter);
ProgramName progName = jc.programName;
commands.put(progName, jc);
diff --git a/src/main/java/com/beust/jcommander/UnixStyleUsageFormatter.java b/src/main/java/com/beust/jcommander/UnixStyleUsageFormatter.java
index 03d10f8b..13dcf7f0 100644
--- a/src/main/java/com/beust/jcommander/UnixStyleUsageFormatter.java
+++ b/src/main/java/com/beust/jcommander/UnixStyleUsageFormatter.java
@@ -23,26 +23,26 @@
/**
* A unix-style usage formatter. This works by overriding and modifying the output of
- * {@link #appendAllParametersDetails(StringBuilder, int, String, List)} which is inherited from
+ * {@link #appendAllParametersDetails(JCommander, StringBuilder, int, String, List)} which is inherited from
* {@link DefaultUsageFormatter}.
*/
public class UnixStyleUsageFormatter extends DefaultUsageFormatter {
- public UnixStyleUsageFormatter(JCommander commander) {
- super(commander);
- }
+ public UnixStyleUsageFormatter() { }
/**
* Appends the details of all parameters in the given order to the argument string builder, indenting every
* line with indentCount-many indent.
*
+ * @param commander the commander
* @param out the builder to append to
* @param indentCount the amount of indentation to apply
* @param indent the indentation
* @param sortedParameters the parameters to append to the builder
*/
- public void appendAllParametersDetails(StringBuilder out, int indentCount, String indent,
- List sortedParameters) {
+ @Override
+ protected void appendAllParametersDetails(JCommander commander, StringBuilder out, int indentCount, String indent,
+ List sortedParameters) {
if (sortedParameters.size() > 0) {
out.append(indent).append(" Options:\n");
}
@@ -101,7 +101,7 @@ public void appendAllParametersDetails(StringBuilder out, int indentCount, Strin
// Append description
// The magic value 3 is the number of spaces between the name of the option and its description
// in DefaultUsageFormatter#appendCommands(..)
- wrapDescription(out, indentCount + prefixIndent - 3, initialLinePrefixLength, description);
+ wrapDescription(commander, out, indentCount + prefixIndent - 3, initialLinePrefixLength, description);
out.append("\n");
}
}
diff --git a/src/test/java/com/beust/jcommander/DefaultUsageFormatterTest.java b/src/test/java/com/beust/jcommander/DefaultUsageFormatterTest.java
index 07302c50..cb95aa66 100644
--- a/src/test/java/com/beust/jcommander/DefaultUsageFormatterTest.java
+++ b/src/test/java/com/beust/jcommander/DefaultUsageFormatterTest.java
@@ -60,7 +60,7 @@ class ArgsTemplate {
.build();
// action
- jc.getUsageFormatter().usage(sb);
+ jc.usage(sb);
// verify
String expected = "Usage: [options]\n"
@@ -104,7 +104,7 @@ public void testLongMainParameterDescription() {
StringBuilder sb = new StringBuilder();
//action
- jc.getUsageFormatter().usage(sb);
+ jc.usage(sb);
//verify
for (String line : sb.toString().split("\n")) {
@@ -121,7 +121,7 @@ public void testLongCommandDescription() throws Exception {
StringBuilder sb = new StringBuilder();
//action
- jc.getUsageFormatter().usage(sb);
+ jc.usage(sb);
//verify
for (String line : sb.toString().split("\n")) {
@@ -138,7 +138,7 @@ public void testDescriptionWrappingLongWord() {
.build();
//action
- jc.getUsageFormatter().usage(sb);
+ jc.usage(sb);
//verify
for (String line : sb.toString().split("\n")) {
@@ -152,7 +152,7 @@ public void programName() {
String programName = "main";
jcommander.setProgramName(programName);
StringBuilder sb = new StringBuilder();
- jcommander.getUsageFormatter().usage(sb);
+ jcommander.usage(sb);
Assert.assertTrue(sb.toString().contains(programName));
Assert.assertEquals(jcommander.getProgramName(), programName);
@@ -171,7 +171,7 @@ class CommandTemplate {
.build();
jcommander.setProgramName("main");
StringBuilder sb = new StringBuilder();
- jcommander.getUsageFormatter().usage(sb);
+ jcommander.usage(sb);
Assert.assertEquals(sb.toString().indexOf("options"), -1);
}
@@ -188,7 +188,7 @@ class DSimple {
JCommander jc = JCommander.newBuilder()
.addObject(new DSimple())
.build();
- jc.getUsageFormatter().usage(new StringBuilder());
+ jc.usage(new StringBuilder());
}
/**
@@ -199,7 +199,7 @@ public void nonexistentCommandShouldThrow() {
String[] argv = {};
JCommander jc = JCommander.newBuilder().addObject(new Object()).build();
jc.parse(argv);
- jc.getUsageFormatter().getCommandDescription("foo");
+ jc.getCommandDescription("foo");
}
@Test
@@ -210,7 +210,7 @@ public void i18MissingKeyForCommand() {
.build();
jc.addCommand(new ArgsLongCommandDescription());
StringBuilder sb = new StringBuilder();
- jc.getUsageFormatter().usage(sb);
+ jc.usage(sb);
String usage = sb.toString();
Assert.assertTrue(usage.contains("text"));
}
@@ -220,7 +220,7 @@ public void noParseConstructor() {
JCommander jCommander = JCommander.newBuilder()
.addObject(new ArgsMainParameter1())
.build();
- jCommander.getUsageFormatter().usage(new StringBuilder());
+ jCommander.usage(new StringBuilder());
// Before fix, this parse would throw an exception, because it calls createDescription, which
// was already called by usage(), and can only be called once.
jCommander.parse();
@@ -238,7 +238,7 @@ public void usageWithRequiredArgsAndResourceBundle() {
.resourceBundle(getResourceBundle())
.build();
// Should be able to display usage without triggering validation
- jc.getUsageFormatter().usage(new StringBuilder());
+ jc.usage(new StringBuilder());
try {
jc.parse("-h");
Assert.fail("Should have thrown a required parameter exception");
@@ -253,11 +253,11 @@ public void usageShouldNotChange() {
JCommander jc = JCommander.newBuilder().addObject(new Args1()).build();
jc.parse("-log", "1");
StringBuilder sb = new StringBuilder();
- jc.getUsageFormatter().usage(sb);
+ jc.usage(sb);
String expected = sb.toString();
sb = new StringBuilder();
- jc.getUsageFormatter().usage(sb);
+ jc.usage(sb);
String actual = sb.toString();
Assert.assertEquals(actual, expected);
}
@@ -267,7 +267,7 @@ public void oom() {
JCommander jc = JCommander.newBuilder()
.addObject(new ArgsOutOfMemory())
.build();
- jc.getUsageFormatter().usage(new StringBuilder());
+ jc.usage(new StringBuilder());
}
@Test
@@ -283,7 +283,7 @@ class Arg {
StringBuilder sb = new StringBuilder();
- jc.getUsageFormatter().usage(sb);
+ jc.usage(sb);
Assert.assertFalse(sb.toString().contains("Default"));
}
@@ -312,7 +312,7 @@ class ArgCommandB {
c.addCommand("b", new ArgCommandB());
StringBuilder sb = new StringBuilder();
- c.getUsageFormatter().usage(sb);
+ c.usage(sb);
Assert.assertTrue(sb.toString().contains("[command options]\n Commands:"));
}
@@ -340,7 +340,7 @@ class ArgCommandB {
c.addCommand("b", new ArgCommandB());
StringBuilder sb = new StringBuilder();
- c.getUsageFormatter().usage(sb);
+ c.usage(sb);
Assert.assertTrue(sb.toString().contains("command a parameters\n\n b"));
}
@@ -372,7 +372,7 @@ class ArgCommandB {
aCommand.addCommand("b", new ArgCommandB());
StringBuilder sb = new StringBuilder();
- c.getUsageFormatter().usage(sb);
+ c.usage(sb);
Assert.assertTrue(sb.toString().contains("command a parameters\n Commands:"));
Assert.assertTrue(sb.toString().contains("command b\n Usage:"));
}
@@ -388,7 +388,7 @@ class Arg {
JCommander c = JCommander.newBuilder()
.addObject(a)
.build();
- c.getUsageFormatter().usage(sb);
+ c.usage(sb);
Assert.assertTrue(sb.toString().contains("Default: "));
}
}
diff --git a/src/test/java/com/beust/jcommander/ParameterOrderTest.java b/src/test/java/com/beust/jcommander/ParameterOrderTest.java
index 73f1d76a..4d088a82 100644
--- a/src/test/java/com/beust/jcommander/ParameterOrderTest.java
+++ b/src/test/java/com/beust/jcommander/ParameterOrderTest.java
@@ -61,7 +61,7 @@ public void testOrder(Object cmd, String ... expected) {
JCommander commander = new JCommander(cmd);
StringBuilder out = new StringBuilder();
- commander.getUsageFormatter().usage(out);
+ commander.usage(out);
String output = out.toString();
List order = new ArrayList<>();
for (String line : output.split("[\\n\\r]+")) {
diff --git a/src/test/java/com/beust/jcommander/UnixStyleUsageFormatterTest.java b/src/test/java/com/beust/jcommander/UnixStyleUsageFormatterTest.java
index 31d55ee4..63766997 100644
--- a/src/test/java/com/beust/jcommander/UnixStyleUsageFormatterTest.java
+++ b/src/test/java/com/beust/jcommander/UnixStyleUsageFormatterTest.java
@@ -49,10 +49,10 @@ class ArgsTemplate {
JCommander jc = JCommander.newBuilder()
.addObject(new ArgsTemplate())
.build();
- jc.setUsageFormatter(new UnixStyleUsageFormatter(jc));
+ jc.setUsageFormatter(new UnixStyleUsageFormatter());
// action
- jc.getUsageFormatter().usage(sb);
+ jc.usage(sb);
// verify
String expected = "Usage: [options]\n"
@@ -76,11 +76,11 @@ public void testLongMainParameterDescription() {
JCommander jc = JCommander.newBuilder()
.addObject(new ArgsLongMainParameterDescription())
.build();
- jc.setUsageFormatter(new UnixStyleUsageFormatter(jc));
+ jc.setUsageFormatter(new UnixStyleUsageFormatter());
StringBuilder sb = new StringBuilder();
//action
- jc.getUsageFormatter().usage(sb);
+ jc.usage(sb);
//verify
for (String line : sb.toString().split("\n")) {
@@ -94,11 +94,11 @@ public void testLongCommandDescription() throws Exception {
JCommander jc = JCommander.newBuilder()
.addCommand(new ArgsLongCommandDescription())
.build();
- jc.setUsageFormatter(new UnixStyleUsageFormatter(jc));
+ jc.setUsageFormatter(new UnixStyleUsageFormatter());
StringBuilder sb = new StringBuilder();
//action
- jc.getUsageFormatter().usage(sb);
+ jc.usage(sb);
//verify
for (String line : sb.toString().split("\n")) {
@@ -113,10 +113,10 @@ public void testDescriptionWrappingLongWord() {
final JCommander jc = JCommander.newBuilder()
.addObject(new ArgsLongDescription())
.build();
- jc.setUsageFormatter(new UnixStyleUsageFormatter(jc));
+ jc.setUsageFormatter(new UnixStyleUsageFormatter());
//action
- jc.getUsageFormatter().usage(sb);
+ jc.usage(sb);
//verify
for (String line : sb.toString().split("\n")) {
@@ -127,11 +127,11 @@ public void testDescriptionWrappingLongWord() {
@Test
public void programName() {
JCommander jcommander = new JCommander();
- jcommander.setUsageFormatter(new UnixStyleUsageFormatter(jcommander));
+ jcommander.setUsageFormatter(new UnixStyleUsageFormatter());
String programName = "main";
jcommander.setProgramName(programName);
StringBuilder sb = new StringBuilder();
- jcommander.getUsageFormatter().usage(sb);
+ jcommander.usage(sb);
Assert.assertTrue(sb.toString().contains(programName));
Assert.assertEquals(jcommander.getProgramName(), programName);
@@ -148,10 +148,10 @@ class CommandTemplate {
JCommander jcommander = JCommander.newBuilder()
.addObject(template)
.build();
- jcommander.setUsageFormatter(new UnixStyleUsageFormatter(jcommander));
+ jcommander.setUsageFormatter(new UnixStyleUsageFormatter());
jcommander.setProgramName("main");
StringBuilder sb = new StringBuilder();
- jcommander.getUsageFormatter().usage(sb);
+ jcommander.usage(sb);
Assert.assertEquals(sb.toString().indexOf("options"), -1);
}
@@ -168,8 +168,8 @@ class DSimple {
JCommander jc = JCommander.newBuilder()
.addObject(new DSimple())
.build();
- jc.setUsageFormatter(new UnixStyleUsageFormatter(jc));
- jc.getUsageFormatter().usage(new StringBuilder());
+ jc.setUsageFormatter(new UnixStyleUsageFormatter());
+ jc.usage(new StringBuilder());
}
/**
@@ -179,9 +179,9 @@ class DSimple {
public void nonexistentCommandShouldThrow() {
String[] argv = {};
JCommander jc = JCommander.newBuilder().addObject(new Object()).build();
- jc.setUsageFormatter(new UnixStyleUsageFormatter(jc));
+ jc.setUsageFormatter(new UnixStyleUsageFormatter());
jc.parse(argv);
- jc.getUsageFormatter().getCommandDescription("foo");
+ jc.getCommandDescription("foo");
}
@Test
@@ -190,10 +190,10 @@ public void i18MissingKeyForCommand() {
.addObject(new ArgsHelp())
.resourceBundle(DefaultUsageFormatterTest.getResourceBundle())
.build();
- jc.setUsageFormatter(new UnixStyleUsageFormatter(jc));
+ jc.setUsageFormatter(new UnixStyleUsageFormatter());
jc.addCommand(new ArgsLongCommandDescription());
StringBuilder sb = new StringBuilder();
- jc.getUsageFormatter().usage(sb);
+ jc.usage(sb);
String usage = sb.toString();
Assert.assertTrue(usage.contains("text"));
}
@@ -203,8 +203,8 @@ public void noParseConstructor() {
JCommander jCommander = JCommander.newBuilder()
.addObject(new ArgsMainParameter1())
.build();
- jCommander.setUsageFormatter(new UnixStyleUsageFormatter(jCommander));
- jCommander.getUsageFormatter().usage(new StringBuilder());
+ jCommander.setUsageFormatter(new UnixStyleUsageFormatter());
+ jCommander.usage(new StringBuilder());
// Before fix, this parse would throw an exception, because it calls createDescription, which
// was already called by usage(), and can only be called once.
jCommander.parse();
@@ -221,9 +221,9 @@ public void usageWithRequiredArgsAndResourceBundle() {
.addObject(new Object[] {argsHelp, new ArgsRequired()})
.resourceBundle(DefaultUsageFormatterTest.getResourceBundle())
.build();
- jc.setUsageFormatter(new UnixStyleUsageFormatter(jc));
+ jc.setUsageFormatter(new UnixStyleUsageFormatter());
// Should be able to display usage without triggering validation
- jc.getUsageFormatter().usage(new StringBuilder());
+ jc.usage(new StringBuilder());
try {
jc.parse("-h");
Assert.fail("Should have thrown a required parameter exception");
@@ -236,14 +236,14 @@ public void usageWithRequiredArgsAndResourceBundle() {
@Test
public void usageShouldNotChange() {
JCommander jc = JCommander.newBuilder().addObject(new Args1()).build();
- jc.setUsageFormatter(new UnixStyleUsageFormatter(jc));
+ jc.setUsageFormatter(new UnixStyleUsageFormatter());
jc.parse("-log", "1");
StringBuilder sb = new StringBuilder();
- jc.getUsageFormatter().usage(sb);
+ jc.usage(sb);
String expected = sb.toString();
sb = new StringBuilder();
- jc.getUsageFormatter().usage(sb);
+ jc.usage(sb);
String actual = sb.toString();
Assert.assertEquals(actual, expected);
}
@@ -253,8 +253,8 @@ public void oom() {
JCommander jc = JCommander.newBuilder()
.addObject(new ArgsOutOfMemory())
.build();
- jc.setUsageFormatter(new UnixStyleUsageFormatter(jc));
- jc.getUsageFormatter().usage(new StringBuilder());
+ jc.setUsageFormatter(new UnixStyleUsageFormatter());
+ jc.usage(new StringBuilder());
}
@Test
@@ -266,12 +266,12 @@ class Arg {
Arg args = new Arg();
String[] argv = {"--help"};
JCommander jc = JCommander.newBuilder().addObject(args).build();
- jc.setUsageFormatter(new UnixStyleUsageFormatter(jc));
+ jc.setUsageFormatter(new UnixStyleUsageFormatter());
jc.parse(argv);
StringBuilder sb = new StringBuilder();
- jc.getUsageFormatter().usage(sb);
+ jc.usage(sb);
Assert.assertFalse(sb.toString().contains("Default"));
}
@@ -296,12 +296,12 @@ class ArgCommandB {
JCommander jc = JCommander.newBuilder()
.addObject(a)
.build();
- jc.setUsageFormatter(new UnixStyleUsageFormatter(jc));
+ jc.setUsageFormatter(new UnixStyleUsageFormatter());
jc.addCommand("a", new ArgCommandA());
jc.addCommand("b", new ArgCommandB());
StringBuilder sb = new StringBuilder();
- jc.getUsageFormatter().usage(sb);
+ jc.usage(sb);
Assert.assertTrue(sb.toString().contains("[command options]\n Commands:"));
}
@@ -325,12 +325,12 @@ class ArgCommandB {
JCommander jc = JCommander.newBuilder()
.addObject(a)
.build();
- jc.setUsageFormatter(new UnixStyleUsageFormatter(jc));
+ jc.setUsageFormatter(new UnixStyleUsageFormatter());
jc.addCommand("a", new ArgCommandA());
jc.addCommand("b", new ArgCommandB());
StringBuilder sb = new StringBuilder();
- jc.getUsageFormatter().usage(sb);
+ jc.usage(sb);
Assert.assertTrue(sb.toString().contains("command a parameters\n\n b"));
}
@@ -354,7 +354,7 @@ class ArgCommandB {
JCommander jc = JCommander.newBuilder()
.addObject(a)
.build();
- jc.setUsageFormatter(new UnixStyleUsageFormatter(jc));
+ jc.setUsageFormatter(new UnixStyleUsageFormatter());
jc.setColumnSize(100);
jc.addCommand("a", new ArgCommandA());
@@ -363,7 +363,7 @@ class ArgCommandB {
aCommand.addCommand("b", new ArgCommandB());
StringBuilder sb = new StringBuilder();
- jc.getUsageFormatter().usage(sb);
+ jc.usage(sb);
Assert.assertTrue(sb.toString().contains("command a parameters\n Commands:"));
Assert.assertTrue(sb.toString().contains("command b\n Usage:"));
}
@@ -379,8 +379,8 @@ class Arg {
JCommander jc = JCommander.newBuilder()
.addObject(a)
.build();
- jc.setUsageFormatter(new UnixStyleUsageFormatter(jc));
- jc.getUsageFormatter().usage(sb);
+ jc.setUsageFormatter(new UnixStyleUsageFormatter());
+ jc.usage(sb);
Assert.assertTrue(sb.toString().contains("default: "));
}
}
diff --git a/src/test/java/com/beust/jcommander/command/CommandAliasTest.java b/src/test/java/com/beust/jcommander/command/CommandAliasTest.java
index 631097cd..9d3073c2 100644
--- a/src/test/java/com/beust/jcommander/command/CommandAliasTest.java
+++ b/src/test/java/com/beust/jcommander/command/CommandAliasTest.java
@@ -119,15 +119,15 @@ public void usageCanBeRetrievedWithBothCommandAndAlias() {
CommandCommit commit = new CommandCommit();
jc.addCommand("commit", commit, "ci", "cmt");
StringBuilder out = new StringBuilder();
- jc.getUsageFormatter().usage("commit", out);
+ jc.getUsageFormatter().usage(jc, "commit", out);
patternMatchesTimes("commit\\(ci,cmt\\)", out.toString(), 1);
out = new StringBuilder();
- jc.getUsageFormatter().usage("ci", out);
+ jc.getUsageFormatter().usage(jc, "ci", out);
patternMatchesTimes("commit\\(ci,cmt\\)", out.toString(), 1);
out = new StringBuilder();
- jc.getUsageFormatter().usage("cmt", out);
+ jc.getUsageFormatter().usage(jc, "cmt", out);
patternMatchesTimes("commit\\(ci,cmt\\)", out.toString(), 1);
}
@@ -138,7 +138,7 @@ public void usageDisplaysCommandWithAliasesOnlyOnce() {
CommandCommit commit = new CommandCommit();
jc.addCommand("commit", commit, "ci", "cmt");
StringBuilder out = new StringBuilder();
- jc.getUsageFormatter().usage(out);
+ jc.getUsageFormatter().usage(jc, out);
// The usage should display this string twice: one as the command name
// and one after Usage:
patternMatchesTimes("commit\\(ci,cmt\\)", out.toString(), 2);
@@ -156,12 +156,12 @@ public void formattingLooksNice(){
CommandCommit commit = new CommandCommit();
jc.addCommand("commit", commit, "ci", "cmt");
StringBuilder sb = new StringBuilder();
- jc.getUsageFormatter().usage(sb);
+ jc.getUsageFormatter().usage(jc, sb);
System.out.println("--- usage() formatting ---");
System.out.println(sb.toString());
sb = new StringBuilder();
- jc.getUsageFormatter().usage("commit", sb);
+ jc.getUsageFormatter().usage(jc, "commit", sb);
System.out.println("--- usage('commit') formatting ---");
System.out.println(sb.toString());
}
diff --git a/src/test/java/com/beust/jcommander/command/CommandTest.java b/src/test/java/com/beust/jcommander/command/CommandTest.java
index a625bc5c..18fc2799 100644
--- a/src/test/java/com/beust/jcommander/command/CommandTest.java
+++ b/src/test/java/com/beust/jcommander/command/CommandTest.java
@@ -99,7 +99,7 @@ public void hiddenCommandTest() {
jc.setProgramName("TestCommander");
StringBuilder out = new StringBuilder();
- jc.getUsageFormatter().usage(out);
+ jc.getUsageFormatter().usage(jc, 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"));
@@ -114,7 +114,7 @@ public void noParametersAnnotationOnCommandTest() {
jc.setProgramName("TestCommander");
StringBuilder out = new StringBuilder();
- jc.getUsageFormatter().usage(out);
+ jc.getUsageFormatter().usage(jc, out);
Assert.assertTrue(out.toString().contains("no-annotation"));
}
@@ -129,7 +129,7 @@ public void noTrailingSpaceInUsageTest() {
jc.addCommand("commit", commit);
jc.parse("-v", "commit", "--amend", "--author=cbeust", "A.java", "B.java");
StringBuilder out = new StringBuilder();
- jc.getUsageFormatter().usage(out);
+ jc.getUsageFormatter().usage(jc, out);
String firstLine = out.toString().split("\n")[0];
Assert.assertFalse(firstLine.endsWith(" "), "Usage should not have trailing spaces");
}
diff --git a/src/test/java/com/beust/jcommander/dynamic/DynamicParameterTest.java b/src/test/java/com/beust/jcommander/dynamic/DynamicParameterTest.java
index 7d8e8e6c..3f305adc 100644
--- a/src/test/java/com/beust/jcommander/dynamic/DynamicParameterTest.java
+++ b/src/test/java/com/beust/jcommander/dynamic/DynamicParameterTest.java
@@ -40,7 +40,7 @@ public void usage() {
JCommander jc = JCommander.newBuilder()
.addObject(ds)
.build();
- jc.getUsageFormatter().usage(new StringBuilder());
+ jc.getUsageFormatter().usage(jc, new StringBuilder());
}
public void differentAssignment() {