@@ -57,33 +57,29 @@ boolean findNext() {
5757 }
5858
5959 if (lastCallable == null ) return false ;
60-
6160 var params = lastCallable .nodes ().flatMap (Streams .cast (Parameter .class )).toList ();
62- node = params .getFirst ();
61+ if (!(node instanceof Parameter )) node = params .getFirst ();
62+
6363 if (node instanceof Parameter param ) {
6464 // store argString
6565 var argString = new StringBuilder (fullCommand [fullCommandIndex ]);
66- switch (param .getAttribute ().stringMode ()) {
67- case NORMAL , GREEDY -> {
68- if (!argString .toString ().startsWith ("\" " )) break ;
69- // immediately consume greedy argument
70- argString = new StringBuilder (argString .substring (1 ));
71- String next ;
72- do {
73- argString .append (next = fullCommand [++fullCommandIndex ]);
74- } while (!next .endsWith ("\" " ) && fullCommandIndex + 1 < fullCommand .length );
75- if (next .endsWith ("\" " )) argString .deleteCharAt (argString .length () - 1 );
76- }
66+ if (Objects .requireNonNull (param .getAttribute ().stringMode ()) == StringMode .GREEDY ) {
67+ // immediately consume greedy argument
68+ if (!argString .isEmpty () && argString .charAt (0 ) == '"' ) argString .deleteCharAt (0 );
69+ String read = "" ;
70+ while (!read .endsWith ("\" " ) && fullCommandIndex + 1 < fullCommand .length ) argString .append (' ' )
71+ .append (read = fullCommand [++fullCommandIndex ]);
72+ if (read .endsWith ("\" " )) argString .deleteCharAt (argString .length () - 1 );
7773 }
7874 if (!argString .toString ().isBlank ()) argumentStrings .put (param , argString .toString ());
7975
8076 // advance parameter if possible
8177 var nextIndex = params .indexOf (param ) + 1 ;
82- if (nextIndex == - 1 ) return false ;
83- if ( nextIndex >= params . size () && param .getAttribute ()
84- .stringMode () == StringMode .SINGLE_WORD || nextIndex + 1 >= params . size ())
85- return false ;
86- this .node = params .get (nextIndex + 1 );
78+ if (nextIndex >= params . size () || params . get ( nextIndex )
79+ .getAttribute ()
80+ .stringMode () == StringMode .SINGLE_WORD ) return false ;
81+
82+ this .node = params .get (nextIndex );
8783 this .fullCommandIndex += 1 ;
8884 return true ;
8985 }
0 commit comments