Code view:

A painting is a person's account of this edit as text, recorded independently of the node mapping - a rendering often has several equally defensible answers where the mapping has one. Deletions and insertions carry no position on the opposite side in a painting, so that panel draws no caret for them.

Before

…lines 1–34 unchanged (34 lines)
35 private List tokens = new ArrayList();
36
37 /** specifies if bursting should continue */
38 private boolean eatTheRest;
39
40 /** holder for the current option */
41
42 /** the command line Options */
43 private Options options;
44
45 /**
46 * Resets the members to their original state i.e. remove
47 * all of <code>tokens</code> entries and set <code>eatTheRest</code>
…lines 48–109 unchanged (62 lines)
110 {
111 int pos = token.indexOf('=');
112 String opt = pos == -1 ? token : token.substring(0, pos); // --foo
113
114 if (!options.hasOption(opt))
115 {
116 processNonOptionToken(token);
117 }
118 else
119 {
120
121 tokens.add(opt);
122 if (pos != -1)
123 {
124 tokens.add(token.substring(pos + 1));
125 }
126 }
…lines 127–139 unchanged (13 lines)
140 // requires bursting
141 else
142 {
143 burstToken(token, stopAtNonOption);
144 }
145 }
146 else if (stopAtNonOption)
147 {
148 processNonOptionToken(token);
149 }
150 else
151 {
152 tokens.add(token);
153 }
154
155 gobble(iter);
156 }
157
158 return (String[]) tokens.toArray(new String[tokens.size()]);
159 }
…lines 160–177 unchanged (18 lines)
178 * Add the special token "<b>--</b>" and the current <code>value</code>
179 * to the processed tokens list. Then add all the remaining
180 * <code>argument</code> values to the processed tokens list.
181 *
182 * @param value The current token
183 */
184 private void processNonOptionToken(String value)
185 {
186 eatTheRest = true;
187 tokens.add("--");
188
189 tokens.add(value);
190 }
191
192 /**
193 * <p>If an {@link Option} exists for <code>token</code> then
194 * add the token to the processed list.</p>
…lines 195–203 unchanged (9 lines)
204 private void processOptionToken(String token, boolean stopAtNonOption)
205 {
206 if (stopAtNonOption && !options.hasOption(token))
207 {
208 eatTheRest = true;
209 }
210
211
212 tokens.add(token);
213 }
214
215 /**
216 * Breaks <code>token</code> into its constituent parts
…lines 217–236 unchanged (20 lines)
237 * @param token The current token to be <b>burst</b>
238 * @param stopAtNonOption Specifies whether to stop processing
239 * at the first non-Option encountered.
240 */
241 protected void burstToken(String token, boolean stopAtNonOption)
242 {
243 Option currentOption;
244 for (int i = 1; i < token.length(); i++)
245 {
246 String ch = String.valueOf(token.charAt(i));
247
248 if (options.hasOption(ch))
249 {
…lines 250–255 unchanged (6 lines)
256
257 break;
258 }
259 }
260 else if (stopAtNonOption)
261 {
262 processNonOptionToken(token.substring(i));
263 break;
264 }
265 else
266 {
267 tokens.add(token);
268 break;
…lines 269–273 unchanged (5 lines)

After

…lines 1–34 unchanged (34 lines)
35 private List tokens = new ArrayList();
36
37 /** specifies if bursting should continue */
38 private boolean eatTheRest;
39
40 /** holder for the current option */
41 private Option currentOption;
42
43 /** the command line Options */
44 private Options options;
45
46 /**
47 * Resets the members to their original state i.e. remove
…lines 48–110 unchanged (63 lines)
111 {
112 int pos = token.indexOf('=');
113 String opt = pos == -1 ? token : token.substring(0, pos); // --foo
114
115 if (!options.hasOption(opt))
116 {
117 processNonOptionToken(token, stopAtNonOption);
118 }
119 else
120 {
121 currentOption = options.getOption(opt);
122
123 tokens.add(opt);
124 if (pos != -1)
125 {
126 tokens.add(token.substring(pos + 1));
127 }
…lines 128–142 unchanged (15 lines)
143 else
144 {
145 burstToken(token, stopAtNonOption);
146 }
147 }
148 else
149 {
150 processNonOptionToken(token, stopAtNonOption);
151 }
152
153 gobble(iter);
154 }
155
156 return (String[]) tokens.toArray(new String[tokens.size()]);
157 }
158
…lines 159–175 unchanged (17 lines)
176 * Add the special token "<b>--</b>" and the current <code>value</code>
177 * to the processed tokens list. Then add all the remaining
178 * <code>argument</code> values to the processed tokens list.
179 *
180 * @param value The current token
181 */
182 private void processNonOptionToken(String value, boolean stopAtNonOption)
183 {
184 if (stopAtNonOption && (currentOption == null || !currentOption.hasArg()))
185 {
186 eatTheRest = true;
187 tokens.add("--");
188 }
189
190 tokens.add(value);
191 }
192
193 /**
194 * <p>If an {@link Option} exists for <code>token</code> then
…lines 195–205 unchanged (11 lines)
206 {
207 if (stopAtNonOption && !options.hasOption(token))
208 {
209 eatTheRest = true;
210 }
211
212 if (options.hasOption(token))
213 {
214 currentOption = options.getOption(token);
215 }
216
217 tokens.add(token);
218 }
219
220 /**
221 * Breaks <code>token</code> into its constituent parts
…lines 222–241 unchanged (20 lines)
242 * @param token The current token to be <b>burst</b>
243 * @param stopAtNonOption Specifies whether to stop processing
244 * at the first non-Option encountered.
245 */
246 protected void burstToken(String token, boolean stopAtNonOption)
247 {
248 for (int i = 1; i < token.length(); i++)
249 {
250 String ch = String.valueOf(token.charAt(i));
251
252 if (options.hasOption(ch))
253 {
254 tokens.add("-" + ch);
…lines 255–259 unchanged (5 lines)
260
261 break;
262 }
263 }
264 else if (stopAtNonOption)
265 {
266 processNonOptionToken(token.substring(i), true);
267 break;
268 }
269 else
270 {
271 tokens.add(token);
272 break;
…lines 273–277 unchanged (5 lines)

Before

program
block_comment "/**\n * Licensed to the Apache Software Foundation (ASF) unde"...
package_declaration
package "package"
scoped_identifier
scoped_identifier
scoped_identifier
identifier "org"
. "."
identifier "apache"
. "."
identifier "commons"
. "."
identifier "cli"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "java"
. "."
identifier "util"
. "."
identifier "ArrayList"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "java"
. "."
identifier "util"
. "."
identifier "Arrays"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "java"
. "."
identifier "util"
. "."
identifier "Iterator"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "java"
. "."
identifier "util"
. "."
identifier "List"
; ";"
block_comment "/**\n * The class PosixParser provides an implementation of t"...
class_declaration
modifiers
public "public"
class "class"
identifier "PosixParser"
superclass
extends "extends"
type_identifier "Parser"
class_body
{ "{"
block_comment "/** holder for flattened tokens */"
field_declaration
modifiers
private "private"
type_identifier "List"
variable_declarator
identifier "tokens"
= "="
object_creation_expression
new "new"
type_identifier "ArrayList"
argument_list
( "("
) ")"
; ";"
block_comment "/** specifies if bursting should continue */"
field_declaration
modifiers
private "private"
boolean_type "boolean"
variable_declarator
identifier "eatTheRest"
; ";"
block_comment "/** holder for the current option */"
block_comment "/** the command line Options */"
field_declaration
modifiers
private "private"
type_identifier "Options"
variable_declarator
identifier "options"
; ";"
block_comment "/**\n * Resets the members to their original state i.e. r"...
method_declaration (+26 nodes collapsed)
block_comment "/**\n * <p>An implementation of {@link Parser}'s abstract"...
method_declaration
modifiers
protected "protected"
array_type
type_identifier "String"
dimensions
[ "["
] "]"
identifier "flatten"
formal_parameters
( "("
formal_parameter
type_identifier "Options"
identifier "options"
, ","
formal_parameter
array_type
type_identifier "String"
dimensions
[ "["
] "]"
identifier "arguments"
, ","
formal_parameter
boolean_type "boolean"
identifier "stopAtNonOption"
) ")"
block
{ "{"
expression_statement
method_invocation
identifier "init"
argument_list
( "("
) ")"
; ";"
expression_statement
assignment_expression
field_access
this "this"
. "."
identifier "options"
= "="
identifier "options"
; ";"
line_comment "// an iterator for the command line tokens"
local_variable_declaration
type_identifier "Iterator"
variable_declarator
identifier "iter"
= "="
method_invocation
method_invocation
identifier "Arrays"
. "."
identifier "asList"
argument_list
( "("
identifier "arguments"
) ")"
. "."
identifier "iterator"
argument_list
( "("
) ")"
; ";"
line_comment "// process each command line token"
while_statement
while "while"
parenthesized_expression
( "("
method_invocation
identifier "iter"
. "."
identifier "hasNext"
argument_list
( "("
) ")"
) ")"
block
{ "{"
line_comment "// get the next command line token"
local_variable_declaration
type_identifier "String"
variable_declarator
identifier "token"
= "="
cast_expression
( "("
type_identifier "String"
) ")"
method_invocation
identifier "iter"
. "."
identifier "next"
argument_list
( "("
) ")"
; ";"
line_comment "// handle long option --foo or --foo=bar"
if_statement
if "if"
parenthesized_expression
( "("
method_invocation
identifier "token"
. "."
identifier "startsWith"
argument_list
( "("
string_literal
" "\""
string_fragment "--"
" "\""
) ")"
) ")"
block
{ "{"
local_variable_declaration
integral_type
int "int"
variable_declarator
identifier "pos"
= "="
method_invocation
identifier "token"
. "."
identifier "indexOf"
argument_list
( "("
character_literal "'='"
) ")"
; ";"
local_variable_declaration (+26 nodes collapsed)
line_comment "// --foo"
if_statement
if "if"
parenthesized_expression
( "("
unary_expression
! "!"
method_invocation
identifier "options"
. "."
identifier "hasOption"
argument_list
( "("
identifier "opt"
) ")"
) ")"
block
{ "{"
expression_statement
method_invocation
identifier "processNonOptionToken"
argument_list
( "("
identifier "token"
) ")"
; ";"
} "}"
else "else"
block
{ "{"
expression_statement
method_invocation
identifier "tokens"
. "."
identifier "add"
argument_list
( "("
identifier "opt"
) ")"
; ";"
if_statement (+34 nodes collapsed)
} "}"
} "}"
line_comment "// single hyphen"
else "else"
if_statement
if "if"
parenthesized_expression
( "("
method_invocation
string_literal
" "\""
string_fragment "-"
" "\""
. "."
identifier "equals"
argument_list
( "("
identifier "token"
) ")"
) ")"
block
{ "{"
expression_statement
method_invocation
identifier "tokens"
. "."
identifier "add"
argument_list
( "("
identifier "token"
) ")"
; ";"
} "}"
else "else"
if_statement
if "if"
parenthesized_expression
( "("
method_invocation
identifier "token"
. "."
identifier "startsWith"
argument_list
( "("
string_literal
" "\""
string_fragment "-"
" "\""
) ")"
) ")"
block (+56 nodes collapsed)
else "else"
if_statement
if "if"
parenthesized_expression
( "("
identifier "stopAtNonOption"
) ")"
block
{ "{"
expression_statement
method_invocation
identifier "processNonOptionToken"
argument_list
( "("
identifier "token"
) ")"
; ";"
} "}"
else "else"
block
{ "{"
expression_statement
method_invocation
identifier "tokens"
. "."
identifier "add"
argument_list
( "("
identifier "token"
) ")"
; ";"
} "}"
expression_statement
method_invocation
identifier "gobble"
argument_list
( "("
identifier "iter"
) ")"
; ";"
} "}"
return_statement (+31 nodes collapsed)
} "}"
block_comment "/**\n * Adds the remaining tokens to the processed tokens"...
method_declaration (+54 nodes collapsed)
block_comment "/**\n * Add the special token \"<b>--</b>\" and the current"...
method_declaration
modifiers
private "private"
void_type "void"
identifier "processNonOptionToken"
formal_parameters
( "("
formal_parameter
type_identifier "String"
identifier "value"
) ")"
block
{ "{"
expression_statement
assignment_expression
identifier "eatTheRest"
= "="
true "true"
; ";"
expression_statement
method_invocation
identifier "tokens"
. "."
identifier "add"
argument_list
( "("
string_literal
" "\""
string_fragment "--"
" "\""
) ")"
; ";"
expression_statement
method_invocation
identifier "tokens"
. "."
identifier "add"
argument_list
( "("
identifier "value"
) ")"
; ";"
} "}"
block_comment "/**\n * <p>If an {@link Option} exists for <code>token</c"...
method_declaration
modifiers
private "private"
void_type "void"
identifier "processOptionToken"
formal_parameters
( "("
formal_parameter
type_identifier "String"
identifier "token"
, ","
formal_parameter
boolean_type "boolean"
identifier "stopAtNonOption"
) ")"
block
{ "{"
if_statement (+27 nodes collapsed)
expression_statement
method_invocation
identifier "tokens"
. "."
identifier "add"
argument_list
( "("
identifier "token"
) ")"
; ";"
} "}"
block_comment "/**\n * Breaks <code>token</code> into its constituent pa"...
method_declaration
modifiers
protected "protected"
void_type "void"
identifier "burstToken"
formal_parameters
( "("
formal_parameter
type_identifier "String"
identifier "token"
, ","
formal_parameter
boolean_type "boolean"
identifier "stopAtNonOption"
) ")"
block
{ "{"
local_variable_declaration
type_identifier "Option"
variable_declarator
identifier "currentOption"
; ";"
for_statement
for "for"
( "("
local_variable_declaration
integral_type
int "int"
variable_declarator
identifier "i"
= "="
decimal_integer_literal "1"
; ";"
binary_expression
identifier "i"
< "<"
method_invocation
identifier "token"
. "."
identifier "length"
argument_list
( "("
) ")"
; ";"
update_expression
identifier "i"
++ "++"
) ")"
block
{ "{"
local_variable_declaration (+21 nodes collapsed)
if_statement
if "if"
parenthesized_expression
( "("
method_invocation
identifier "options"
. "."
identifier "hasOption"
argument_list
( "("
identifier "ch"
) ")"
) ")"
block (+91 nodes collapsed)
else "else"
if_statement
if "if"
parenthesized_expression
( "("
identifier "stopAtNonOption"
) ")"
block
{ "{"
expression_statement
method_invocation
identifier "processNonOptionToken"
argument_list
( "("
method_invocation
identifier "token"
. "."
identifier "substring"
argument_list
( "("
identifier "i"
) ")"
) ")"
; ";"
break_statement
break "break"
; ";"
} "}"
else "else"
block
{ "{"
expression_statement
method_invocation
identifier "tokens"
. "."
identifier "add"
argument_list
( "("
identifier "token"
) ")"
; ";"
break_statement
break "break"
; ";"
} "}"
} "}"
} "}"
} "}"

After

program
block_comment "/**\n * Licensed to the Apache Software Foundation (ASF) unde"...
package_declaration
package "package"
scoped_identifier
scoped_identifier
scoped_identifier
identifier "org"
. "."
identifier "apache"
. "."
identifier "commons"
. "."
identifier "cli"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "java"
. "."
identifier "util"
. "."
identifier "ArrayList"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "java"
. "."
identifier "util"
. "."
identifier "Arrays"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "java"
. "."
identifier "util"
. "."
identifier "Iterator"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "java"
. "."
identifier "util"
. "."
identifier "List"
; ";"
block_comment "/**\n * The class PosixParser provides an implementation of t"...
class_declaration
modifiers
public "public"
class "class"
identifier "PosixParser"
superclass
extends "extends"
type_identifier "Parser"
class_body
{ "{"
block_comment "/** holder for flattened tokens */"
field_declaration
modifiers
private "private"
type_identifier "List"
variable_declarator
identifier "tokens"
= "="
object_creation_expression
new "new"
type_identifier "ArrayList"
argument_list
( "("
) ")"
; ";"
block_comment "/** specifies if bursting should continue */"
field_declaration
modifiers
private "private"
boolean_type "boolean"
variable_declarator
identifier "eatTheRest"
; ";"
block_comment "/** holder for the current option */"
field_declaration
modifiers
private "private"
type_identifier "Option"
variable_declarator
identifier "currentOption"
; ";"
block_comment "/** the command line Options */"
field_declaration
modifiers
private "private"
type_identifier "Options"
variable_declarator
identifier "options"
; ";"
block_comment "/**\n * Resets the members to their original state i.e. r"...
method_declaration (+26 nodes collapsed)
block_comment "/**\n * <p>An implementation of {@link Parser}'s abstract"...
method_declaration
modifiers
protected "protected"
array_type
type_identifier "String"
dimensions
[ "["
] "]"
identifier "flatten"
formal_parameters
( "("
formal_parameter
type_identifier "Options"
identifier "options"
, ","
formal_parameter
array_type
type_identifier "String"
dimensions
[ "["
] "]"
identifier "arguments"
, ","
formal_parameter
boolean_type "boolean"
identifier "stopAtNonOption"
) ")"
block
{ "{"
expression_statement
method_invocation
identifier "init"
argument_list
( "("
) ")"
; ";"
expression_statement
assignment_expression
field_access
this "this"
. "."
identifier "options"
= "="
identifier "options"
; ";"
line_comment "// an iterator for the command line tokens"
local_variable_declaration
type_identifier "Iterator"
variable_declarator
identifier "iter"
= "="
method_invocation
method_invocation
identifier "Arrays"
. "."
identifier "asList"
argument_list
( "("
identifier "arguments"
) ")"
. "."
identifier "iterator"
argument_list
( "("
) ")"
; ";"
line_comment "// process each command line token"
while_statement
while "while"
parenthesized_expression
( "("
method_invocation
identifier "iter"
. "."
identifier "hasNext"
argument_list
( "("
) ")"
) ")"
block
{ "{"
line_comment "// get the next command line token"
local_variable_declaration
type_identifier "String"
variable_declarator
identifier "token"
= "="
cast_expression
( "("
type_identifier "String"
) ")"
method_invocation
identifier "iter"
. "."
identifier "next"
argument_list
( "("
) ")"
; ";"
line_comment "// handle long option --foo or --foo=bar"
if_statement
if "if"
parenthesized_expression
( "("
method_invocation
identifier "token"
. "."
identifier "startsWith"
argument_list
( "("
string_literal
" "\""
string_fragment "--"
" "\""
) ")"
) ")"
block
{ "{"
local_variable_declaration
integral_type
int "int"
variable_declarator
identifier "pos"
= "="
method_invocation
identifier "token"
. "."
identifier "indexOf"
argument_list
( "("
character_literal "'='"
) ")"
; ";"
local_variable_declaration (+26 nodes collapsed)
line_comment "// --foo"
if_statement
if "if"
parenthesized_expression
( "("
unary_expression
! "!"
method_invocation
identifier "options"
. "."
identifier "hasOption"
argument_list
( "("
identifier "opt"
) ")"
) ")"
block
{ "{"
expression_statement
method_invocation
identifier "processNonOptionToken"
argument_list
( "("
identifier "token"
, ","
identifier "stopAtNonOption"
) ")"
; ";"
} "}"
else "else"
block
{ "{"
expression_statement
assignment_expression
identifier "currentOption"
= "="
method_invocation
identifier "options"
. "."
identifier "getOption"
argument_list
( "("
identifier "opt"
) ")"
; ";"
expression_statement
method_invocation
identifier "tokens"
. "."
identifier "add"
argument_list
( "("
identifier "opt"
) ")"
; ";"
if_statement (+34 nodes collapsed)
} "}"
} "}"
line_comment "// single hyphen"
else "else"
if_statement
if "if"
parenthesized_expression
( "("
method_invocation
string_literal
" "\""
string_fragment "-"
" "\""
. "."
identifier "equals"
argument_list
( "("
identifier "token"
) ")"
) ")"
block
{ "{"
expression_statement
method_invocation
identifier "tokens"
. "."
identifier "add"
argument_list
( "("
identifier "token"
) ")"
; ";"
} "}"
else "else"
if_statement
if "if"
parenthesized_expression
( "("
method_invocation
identifier "token"
. "."
identifier "startsWith"
argument_list
( "("
string_literal
" "\""
string_fragment "-"
" "\""
) ")"
) ")"
block (+56 nodes collapsed)
else "else"
block
{ "{"
expression_statement
method_invocation
identifier "processNonOptionToken"
argument_list
( "("
identifier "token"
, ","
identifier "stopAtNonOption"
) ")"
; ";"
} "}"
expression_statement
method_invocation
identifier "gobble"
argument_list
( "("
identifier "iter"
) ")"
; ";"
} "}"
return_statement (+31 nodes collapsed)
} "}"
block_comment "/**\n * Adds the remaining tokens to the processed tokens"...
method_declaration (+54 nodes collapsed)
block_comment "/**\n * Add the special token \"<b>--</b>\" and the current"...
method_declaration
modifiers
private "private"
void_type "void"
identifier "processNonOptionToken"
formal_parameters
( "("
formal_parameter
type_identifier "String"
identifier "value"
, ","
formal_parameter
boolean_type "boolean"
identifier "stopAtNonOption"
) ")"
block
{ "{"
if_statement
if "if"
parenthesized_expression
( "("
binary_expression
identifier "stopAtNonOption"
&& "&&"
parenthesized_expression
( "("
binary_expression
binary_expression
identifier "currentOption"
== "=="
null_literal "null"
|| "||"
unary_expression
! "!"
method_invocation
identifier "currentOption"
. "."
identifier "hasArg"
argument_list
( "("
) ")"
) ")"
) ")"
block
{ "{"
expression_statement
assignment_expression
identifier "eatTheRest"
= "="
true "true"
; ";"
expression_statement
method_invocation
identifier "tokens"
. "."
identifier "add"
argument_list
( "("
string_literal
" "\""
string_fragment "--"
" "\""
) ")"
; ";"
} "}"
expression_statement
method_invocation
identifier "tokens"
. "."
identifier "add"
argument_list
( "("
identifier "value"
) ")"
; ";"
} "}"
block_comment "/**\n * <p>If an {@link Option} exists for <code>token</c"...
method_declaration
modifiers
private "private"
void_type "void"
identifier "processOptionToken"
formal_parameters
( "("
formal_parameter
type_identifier "String"
identifier "token"
, ","
formal_parameter
boolean_type "boolean"
identifier "stopAtNonOption"
) ")"
block
{ "{"
if_statement (+27 nodes collapsed)
if_statement
if "if"
parenthesized_expression
( "("
method_invocation
identifier "options"
. "."
identifier "hasOption"
argument_list
( "("
identifier "token"
) ")"
) ")"
block
{ "{"
expression_statement
assignment_expression
identifier "currentOption"
= "="
method_invocation
identifier "options"
. "."
identifier "getOption"
argument_list
( "("
identifier "token"
) ")"
; ";"
} "}"
expression_statement
method_invocation
identifier "tokens"
. "."
identifier "add"
argument_list
( "("
identifier "token"
) ")"
; ";"
} "}"
block_comment "/**\n * Breaks <code>token</code> into its constituent pa"...
method_declaration
modifiers
protected "protected"
void_type "void"
identifier "burstToken"
formal_parameters
( "("
formal_parameter
type_identifier "String"
identifier "token"
, ","
formal_parameter
boolean_type "boolean"
identifier "stopAtNonOption"
) ")"
block
{ "{"
for_statement
for "for"
( "("
local_variable_declaration
integral_type
int "int"
variable_declarator
identifier "i"
= "="
decimal_integer_literal "1"
; ";"
binary_expression
identifier "i"
< "<"
method_invocation
identifier "token"
. "."
identifier "length"
argument_list
( "("
) ")"
; ";"
update_expression
identifier "i"
++ "++"
) ")"
block
{ "{"
local_variable_declaration (+21 nodes collapsed)
if_statement
if "if"
parenthesized_expression
( "("
method_invocation
identifier "options"
. "."
identifier "hasOption"
argument_list
( "("
identifier "ch"
) ")"
) ")"
block (+91 nodes collapsed)
else "else"
if_statement
if "if"
parenthesized_expression
( "("
identifier "stopAtNonOption"
) ")"
block
{ "{"
expression_statement
method_invocation
identifier "processNonOptionToken"
argument_list
( "("
method_invocation
identifier "token"
. "."
identifier "substring"
argument_list
( "("
identifier "i"
) ")"
, ","
true "true"
) ")"
; ";"
break_statement
break "break"
; ";"
} "}"
else "else"
block
{ "{"
expression_statement
method_invocation
identifier "tokens"
. "."
identifier "add"
argument_list
( "("
identifier "token"
) ")"
; ";"
break_statement
break "break"
; ";"
} "}"
} "}"
} "}"
} "}"