--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/TaskHelper.java Tue Oct 25 14:55:29 2016 -0700
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/TaskHelper.java Wed Oct 26 10:42:55 2016 +0530
@@ -466,7 +466,21 @@
return pp;
}
+ // used by jimage. Return unhandled arguments like "create", "describe".
public List<String> handleOptions(T task, String[] args) throws BadArgs {
+ return handleOptions(task, args, true);
+ }
+
+ // used by jlink. No unhandled arguments like "create", "describe".
+ void handleOptionsNoUnhandled(T task, String[] args) throws BadArgs {
+ handleOptions(task, args, false);
+ }
+
+ // shared code that handles options for both jlink and jimage. jimage uses arguments like
+ // "create", "describe" etc. as "task names". Those arguments are unhandled here and returned
+ // as "unhandled arguments list". jlink does not want such arguments. "collectUnhandled" flag
+ // tells whether to allow for unhandled arguments or not.
+ private List<String> handleOptions(T task, String[] args, boolean collectUnhandled) throws BadArgs {
// findbugs warning, copy instead of keeping a reference.
command = Arrays.copyOf(args, args.length);
@@ -499,10 +513,10 @@
String[] arr = new String[filteredArgs.size()];
args = filteredArgs.toArray(arr);
- List<String> rest = new ArrayList<>();
+ List<String> rest = collectUnhandled? new ArrayList<>() : null;
// process options
for (int i = 0; i < args.length; i++) {
- if (!args[i].isEmpty() && args[i].charAt(0) == '-') {
+ if (args[i].charAt(0) == '-') {
String name = args[i];
PlugOption pluginOption = null;
Option<T> option = getOption(name);
@@ -539,7 +553,12 @@
i = args.length;
}
} else {
- rest.add(args[i]);
+ if (collectUnhandled) {
+ rest.add(args[i]);
+ } else {
+ throw new BadArgs("err.orphan.argument", args[i]).
+ showUsage(true);
+ }
}
}
return rest;