Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 16 additions & 4 deletions src/ArgsParser/ArgsParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,8 @@ public class ArgsParser {
private final String[] args;
private final Map<String, Parameter<?>> parameterMap = new HashMap<>();
private final Set<Parameter<?>> mandatoryParameters = new HashSet<>();
private final Set<String> fullFlags = new HashSet<>();
private final Set<String> shortFlags = new HashSet<>();
protected boolean parseArgsWasCalled = false;
private int longestFlagSize = 0;
private int longestShortFlag = 0;
Expand Down Expand Up @@ -92,6 +94,11 @@ private <T> Parameter<T> createParameter(String fullFlag,
boolean isMandatory,
T defaultValue) {

// check if the flag names are already used
if (fullFlags.contains(fullFlag)) throw new IllegalArgumentException("Flag already exists: " + fullFlag);
if (shortFlags.contains(shortFlag)) throw new IllegalArgumentException("Flag already exists: " + shortFlag);

// create new parameter instance
Parameter<T> parameter = new Parameter<T>(makeFlag(fullFlag, false),
makeFlag(shortFlag, true),
description, type, isMandatory, this);
Expand All @@ -100,17 +107,22 @@ private <T> Parameter<T> createParameter(String fullFlag,
parameter.setDefault(defaultValue);
}

// add parameter to the map
parameterMap.put(parameter.getFullFlag(), parameter);
if (parameter.getShortFlag() != null) parameterMap.put(parameter.getShortFlag(), parameter);

// check for the lengths of the name
int nameSize = parameter.getFullFlag().length();
if (longestFlagSize < nameSize) longestFlagSize = nameSize;

if (parameter.getShortFlag() != null) {
int shortSize = parameter.getShortFlag().length();
if (longestShortFlag < shortSize) longestShortFlag = shortSize;
}
int shortSize = parameter.getShortFlag().length();
if (longestShortFlag < shortSize) longestShortFlag = shortSize;

// add names to the name sets
fullFlags.add(fullFlag);
shortFlags.add(shortFlag);

// add to mandatory parameters if parameter is mandatory
if (parameter.isMandatory()) mandatoryParameters.add(parameter);

return parameter;
Expand Down
12 changes: 12 additions & 0 deletions src/test/TestArgsParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -521,4 +521,16 @@ public void testBool2() {
Boolean result = bool.getArgument();
assertFalse(result);
}

@Test
public void testSameFlagNameException() {
ArgsParser parser = new ArgsParser(new String[] {"--file", "file.txt", "--file", "file2.txt"});
Parameter<String> file = parser.addStringParameter("file", "f", "descr", true);
try {
Parameter<String> file2 = parser.addStringParameter("file", "f2", "descr", true);
parser.parseArgs();
} catch (Exception e) {
assertEquals("Flag already exists: file", e.getMessage());
}
}
}