diff --git a/src/main/java/net/locusworks/argparser/ArgParser.java b/src/main/java/net/locusworks/argparser/ArgParser.java index 04b48eb..d2551ca 100644 --- a/src/main/java/net/locusworks/argparser/ArgParser.java +++ b/src/main/java/net/locusworks/argparser/ArgParser.java @@ -9,6 +9,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Optional; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -149,16 +150,17 @@ public class ArgParser { @SuppressWarnings("unchecked") private T parseItem(String[] args) throws InstantiationException, IllegalAccessException { if (argClass == null) throw new IllegalArgumentException("Argument class was not specified"); - Object obj = argClass.newInstance(); - this.fields = Stream.of(obj.getClass().getDeclaredFields()) - .filter(f -> f.isAnnotationPresent(Parameter.class)) - .map(f -> { - f.setAccessible(true); - return f; - }) - .collect(Collectors.toList()); List argList = new ArrayList<>(Arrays.asList(args)); + + Optional helpTest = argList.stream().filter(s -> s.trim().equals("-h") || s.trim().equals("--help")).findFirst(); + if (helpTest.isPresent()) { + help(); + System.exit(0); + } + + Object obj = argClass.newInstance(); + recollectFields(); List positional = new ArrayList<>(); for(Iterator iter = fields.iterator(); iter.hasNext();) { diff --git a/src/test/java/test/argparser/ArgParserTest.java b/src/test/java/test/argparser/ArgParserTest.java index 40a6b03..b7da304 100644 --- a/src/test/java/test/argparser/ArgParserTest.java +++ b/src/test/java/test/argparser/ArgParserTest.java @@ -33,8 +33,8 @@ public class ArgParserTest { Args arg = ArgParser.newBuilder().withArgClass(Args.class).parse(args); - assertTrue(arg.position2.equals(args[0])); - assertTrue(arg.position1.equals(args[1])); + assertTrue(arg.position2.equals(args[1])); + assertTrue(arg.position1.equals(args[0])); assertTrue(arg.values.size() == 2); assertTrue(arg.count == 1); }