Skip to content

Commit f31f26a

Browse files
Alexey Bakhtingnu-andrew
authored andcommitted
8351422: Improve scripting supports
Reviewed-by: mbalao, andrew
1 parent ae39653 commit f31f26a

File tree

1 file changed

+42
-7
lines changed
  • src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/options

1 file changed

+42
-7
lines changed

src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/options/Options.java

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -416,16 +416,34 @@ public void displayHelp(final boolean extended) {
416416
* @param args arguments from command line
417417
*/
418418
public void process(final String[] args) {
419+
final LinkedList<String> prepArgList = new LinkedList<>();
420+
addSystemProperties(NASHORN_ARGS_PREPEND_PROPERTY, prepArgList);
421+
final LinkedList<String> postArgList = new LinkedList<>();
422+
addSystemProperties(NASHORN_ARGS_PROPERTY, postArgList);
419423
final LinkedList<String> argList = new LinkedList<>();
420-
addSystemProperties(NASHORN_ARGS_PREPEND_PROPERTY, argList);
421-
processArgList(argList);
422-
assert argList.isEmpty();
423-
Collections.addAll(argList, args);
424-
processArgList(argList);
425-
assert argList.isEmpty();
426-
addSystemProperties(NASHORN_ARGS_PROPERTY, argList);
424+
for (final String arg : args) {
425+
if (arg.startsWith(definePropPrefix)) {
426+
final String value = arg.substring(definePropPrefix.length());
427+
final int eq = value.indexOf('=');
428+
if (eq != -1) {
429+
String name = value.substring(0, eq);
430+
if (name.equals(NASHORN_ARGS_PREPEND_PROPERTY)) {
431+
addNashornProperties(value.substring(eq + 1), prepArgList, false);
432+
continue;
433+
} else if (name.equals(NASHORN_ARGS_PROPERTY)) {
434+
addNashornProperties(value.substring(eq + 1), postArgList, true);
435+
continue;
436+
}
437+
}
438+
}
439+
argList.add(arg);
440+
}
441+
processArgList(prepArgList);
442+
assert prepArgList.isEmpty();
427443
processArgList(argList);
428444
assert argList.isEmpty();
445+
processArgList(postArgList);
446+
assert postArgList.isEmpty();
429447
}
430448

431449
private void processArgList(final LinkedList<String> argList) {
@@ -529,6 +547,23 @@ private static void addSystemProperties(final String sysPropName, final List<Str
529547
}
530548
}
531549

550+
private static void addNashornProperties(final String args, final LinkedList<String> argList, boolean prepend) {
551+
if (args != null) {
552+
final StringTokenizer st = new StringTokenizer(args);
553+
final LinkedList<String> prepArgList = new LinkedList<>();
554+
while (st.hasMoreTokens()) {
555+
if (prepend) {
556+
prepArgList.add(st.nextToken());
557+
} else {
558+
argList.add(st.nextToken());
559+
}
560+
}
561+
if (prepend) {
562+
argList.addAll(0,prepArgList);
563+
}
564+
}
565+
}
566+
532567
/**
533568
* Retrieves an option template identified by key.
534569
* @param shortKey the short (that is without the e.g. "nashorn.option." part) key

0 commit comments

Comments
 (0)