@@ -416,16 +416,34 @@ public void displayHelp(final boolean extended) {
416
416
* @param args arguments from command line
417
417
*/
418
418
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 );
419
423
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 ();
427
443
processArgList (argList );
428
444
assert argList .isEmpty ();
445
+ processArgList (postArgList );
446
+ assert postArgList .isEmpty ();
429
447
}
430
448
431
449
private void processArgList (final LinkedList <String > argList ) {
@@ -529,6 +547,23 @@ private static void addSystemProperties(final String sysPropName, final List<Str
529
547
}
530
548
}
531
549
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
+
532
567
/**
533
568
* Retrieves an option template identified by key.
534
569
* @param shortKey the short (that is without the e.g. "nashorn.option." part) key
0 commit comments