Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(12)

Side by Side Diff: pkg/analyzer-experimental/lib/src/generated/ast.dart

Issue 12838003: Rename analyzer-experimental to analyzer_experimental. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // This code was auto-generated, is not intended to be edited, and is subject to
2 // significant change. Please see the README file for more information.
3
4 library engine.ast;
5
6 import 'dart:collection';
7 import 'java_core.dart';
8 import 'java_engine.dart';
9 import 'error.dart';
10 import 'source.dart' show LineInfo;
11 import 'scanner.dart';
12 import 'engine.dart' show AnalysisEngine;
13 import 'utilities_dart.dart';
14 import 'element.dart' hide Annotation;
15
16 /**
17 * The abstract class {@code ASTNode} defines the behavior common to all nodes i n the AST structure
18 * for a Dart program.
19 * @coverage dart.engine.ast
20 */
21 abstract class ASTNode {
22 /**
23 * The parent of the node, or {@code null} if the node is the root of an AST s tructure.
24 */
25 ASTNode _parent;
26 /**
27 * A table mapping the names of properties to their values, or {@code null} if this node does not
28 * have any properties associated with it.
29 */
30 Map<String, Object> _propertyMap;
31 /**
32 * A comparator that can be used to sort AST nodes in lexical order. In other words,{@code compare} will return a negative value if the offset of the first no de is less than the
33 * offset of the second node, zero (0) if the nodes have the same offset, and a positive value if
34 * if the offset of the first node is greater than the offset of the second no de.
35 */
36 static Comparator<ASTNode> LEXICAL_ORDER = (ASTNode first, ASTNode second) => second.offset - first.offset;
37 /**
38 * Use the given visitor to visit this node.
39 * @param visitor the visitor that will visit this node
40 * @return the value returned by the visitor as a result of visiting this node
41 */
42 accept(ASTVisitor visitor);
43 /**
44 * @return the {@link ASTNode} of given {@link Class} which is {@link ASTNode} itself, or one of
45 * its parents.
46 */
47 ASTNode getAncestor(Type enclosingClass) {
48 ASTNode node = this;
49 while (node != null && !isInstanceOf(node, enclosingClass)) {
50 node = node.parent;
51 }
52 ;
53 return node as ASTNode;
54 }
55 /**
56 * Return the first token included in this node's source range.
57 * @return the first token included in this node's source range
58 */
59 Token get beginToken;
60 /**
61 * Return the offset of the character immediately following the last character of this node's
62 * source range. This is equivalent to {@code node.getOffset() + node.getLengt h()}. For a
63 * compilation unit this will be equal to the length of the unit's source. For synthetic nodes
64 * this will be equivalent to the node's offset (because the length is zero (0 ) by definition).
65 * @return the offset of the character just past the node's source range
66 */
67 int get end => offset + length;
68 /**
69 * Return the last token included in this node's source range.
70 * @return the last token included in this node's source range
71 */
72 Token get endToken;
73 /**
74 * Return the number of characters in the node's source range.
75 * @return the number of characters in the node's source range
76 */
77 int get length {
78 Token beginToken2 = beginToken;
79 Token endToken2 = endToken;
80 if (beginToken2 == null || endToken2 == null) {
81 return -1;
82 }
83 return endToken2.offset + endToken2.length - beginToken2.offset;
84 }
85 /**
86 * Return the offset from the beginning of the file to the first character in the node's source
87 * range.
88 * @return the offset from the beginning of the file to the first character in the node's source
89 * range
90 */
91 int get offset {
92 Token beginToken3 = beginToken;
93 if (beginToken3 == null) {
94 return -1;
95 }
96 return beginToken.offset;
97 }
98 /**
99 * Return this node's parent node, or {@code null} if this node is the root of an AST structure.
100 * <p>
101 * Note that the relationship between an AST node and its parent node may chan ge over the lifetime
102 * of a node.
103 * @return the parent of this node, or {@code null} if none
104 */
105 ASTNode get parent => _parent;
106 /**
107 * Return the value of the property with the given name, or {@code null} if th is node does not
108 * have a property with the given name.
109 * @return the value of the property with the given name
110 */
111 Object getProperty(String propertyName) {
112 if (_propertyMap == null) {
113 return null;
114 }
115 return _propertyMap[propertyName];
116 }
117 /**
118 * Return the node at the root of this node's AST structure. Note that this me thod's performance
119 * is linear with respect to the depth of the node in the AST structure (O(dep th)).
120 * @return the node at the root of this node's AST structure
121 */
122 ASTNode get root {
123 ASTNode root = this;
124 ASTNode parent2 = parent;
125 while (parent2 != null) {
126 root = parent2;
127 parent2 = root.parent;
128 }
129 return root;
130 }
131 /**
132 * Return {@code true} if this node is a synthetic node. A synthetic node is a node that was
133 * introduced by the parser in order to recover from an error in the code. Syn thetic nodes always
134 * have a length of zero ({@code 0}).
135 * @return {@code true} if this node is a synthetic node
136 */
137 bool isSynthetic() => false;
138 /**
139 * Set the value of the property with the given name to the given value. If th e value is{@code null}, the property will effectively be removed.
140 * @param propertyName the name of the property whose value is to be set
141 * @param propertyValue the new value of the property
142 */
143 void setProperty(String propertyName, Object propertyValue) {
144 if (propertyValue == null) {
145 if (_propertyMap != null) {
146 _propertyMap.remove(propertyName);
147 if (_propertyMap.isEmpty) {
148 _propertyMap = null;
149 }
150 }
151 } else {
152 if (_propertyMap == null) {
153 _propertyMap = new Map<String, Object>();
154 }
155 _propertyMap[propertyName] = propertyValue;
156 }
157 }
158 /**
159 * Return a textual description of this node in a form approximating valid sou rce. The returned
160 * string will not be valid source primarily in the case where the node itself is not well-formed.
161 * @return the source code equivalent of this node
162 */
163 String toSource() {
164 PrintStringWriter writer = new PrintStringWriter();
165 accept(new ToSourceVisitor(writer));
166 return writer.toString();
167 }
168 String toString() => toSource();
169 /**
170 * Use the given visitor to visit all of the children of this node. The childr en will be visited
171 * in source order.
172 * @param visitor the visitor that will be used to visit the children of this node
173 */
174 void visitChildren(ASTVisitor<Object> visitor);
175 /**
176 * Make this node the parent of the given child node.
177 * @param child the node that will become a child of this node
178 * @return the node that was made a child of this node
179 */
180 ASTNode becomeParentOf(ASTNode child) {
181 if (child != null) {
182 ASTNode node = child;
183 node.parent = this;
184 }
185 return child;
186 }
187 /**
188 * If the given child is not {@code null}, use the given visitor to visit it.
189 * @param child the child to be visited
190 * @param visitor the visitor that will be used to visit the child
191 */
192 void safelyVisitChild(ASTNode child, ASTVisitor<Object> visitor) {
193 if (child != null) {
194 child.accept(visitor);
195 }
196 }
197 /**
198 * Set the parent of this node to the given node.
199 * @param newParent the node that is to be made the parent of this node
200 */
201 void set parent(ASTNode newParent) {
202 _parent = newParent;
203 }
204 static int _hashCodeGenerator = 0;
205 final int hashCode = ++_hashCodeGenerator;
206 }
207 /**
208 * The interface {@code ASTVisitor} defines the behavior of objects that can be used to visit an AST
209 * structure.
210 * @coverage dart.engine.ast
211 */
212 abstract class ASTVisitor<R> {
213 R visitAdjacentStrings(AdjacentStrings node);
214 R visitAnnotation(Annotation node);
215 R visitArgumentDefinitionTest(ArgumentDefinitionTest node);
216 R visitArgumentList(ArgumentList node);
217 R visitAsExpression(AsExpression node);
218 R visitAssertStatement(AssertStatement assertStatement);
219 R visitAssignmentExpression(AssignmentExpression node);
220 R visitBinaryExpression(BinaryExpression node);
221 R visitBlock(Block node);
222 R visitBlockFunctionBody(BlockFunctionBody node);
223 R visitBooleanLiteral(BooleanLiteral node);
224 R visitBreakStatement(BreakStatement node);
225 R visitCascadeExpression(CascadeExpression node);
226 R visitCatchClause(CatchClause node);
227 R visitClassDeclaration(ClassDeclaration node);
228 R visitClassTypeAlias(ClassTypeAlias node);
229 R visitComment(Comment node);
230 R visitCommentReference(CommentReference node);
231 R visitCompilationUnit(CompilationUnit node);
232 R visitConditionalExpression(ConditionalExpression node);
233 R visitConstructorDeclaration(ConstructorDeclaration node);
234 R visitConstructorFieldInitializer(ConstructorFieldInitializer node);
235 R visitConstructorName(ConstructorName node);
236 R visitContinueStatement(ContinueStatement node);
237 R visitDeclaredIdentifier(DeclaredIdentifier node);
238 R visitDefaultFormalParameter(DefaultFormalParameter node);
239 R visitDoStatement(DoStatement node);
240 R visitDoubleLiteral(DoubleLiteral node);
241 R visitEmptyFunctionBody(EmptyFunctionBody node);
242 R visitEmptyStatement(EmptyStatement node);
243 R visitExportDirective(ExportDirective node);
244 R visitExpressionFunctionBody(ExpressionFunctionBody node);
245 R visitExpressionStatement(ExpressionStatement node);
246 R visitExtendsClause(ExtendsClause node);
247 R visitFieldDeclaration(FieldDeclaration node);
248 R visitFieldFormalParameter(FieldFormalParameter node);
249 R visitForEachStatement(ForEachStatement node);
250 R visitFormalParameterList(FormalParameterList node);
251 R visitForStatement(ForStatement node);
252 R visitFunctionDeclaration(FunctionDeclaration node);
253 R visitFunctionDeclarationStatement(FunctionDeclarationStatement node);
254 R visitFunctionExpression(FunctionExpression node);
255 R visitFunctionExpressionInvocation(FunctionExpressionInvocation node);
256 R visitFunctionTypeAlias(FunctionTypeAlias functionTypeAlias);
257 R visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node);
258 R visitHideCombinator(HideCombinator node);
259 R visitIfStatement(IfStatement node);
260 R visitImplementsClause(ImplementsClause node);
261 R visitImportDirective(ImportDirective node);
262 R visitIndexExpression(IndexExpression node);
263 R visitInstanceCreationExpression(InstanceCreationExpression node);
264 R visitIntegerLiteral(IntegerLiteral node);
265 R visitInterpolationExpression(InterpolationExpression node);
266 R visitInterpolationString(InterpolationString node);
267 R visitIsExpression(IsExpression node);
268 R visitLabel(Label node);
269 R visitLabeledStatement(LabeledStatement node);
270 R visitLibraryDirective(LibraryDirective node);
271 R visitLibraryIdentifier(LibraryIdentifier node);
272 R visitListLiteral(ListLiteral node);
273 R visitMapLiteral(MapLiteral node);
274 R visitMapLiteralEntry(MapLiteralEntry node);
275 R visitMethodDeclaration(MethodDeclaration node);
276 R visitMethodInvocation(MethodInvocation node);
277 R visitNamedExpression(NamedExpression node);
278 R visitNullLiteral(NullLiteral node);
279 R visitParenthesizedExpression(ParenthesizedExpression node);
280 R visitPartDirective(PartDirective node);
281 R visitPartOfDirective(PartOfDirective node);
282 R visitPostfixExpression(PostfixExpression node);
283 R visitPrefixedIdentifier(PrefixedIdentifier node);
284 R visitPrefixExpression(PrefixExpression node);
285 R visitPropertyAccess(PropertyAccess node);
286 R visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) ;
287 R visitReturnStatement(ReturnStatement node);
288 R visitScriptTag(ScriptTag node);
289 R visitShowCombinator(ShowCombinator node);
290 R visitSimpleFormalParameter(SimpleFormalParameter node);
291 R visitSimpleIdentifier(SimpleIdentifier node);
292 R visitSimpleStringLiteral(SimpleStringLiteral node);
293 R visitStringInterpolation(StringInterpolation node);
294 R visitSuperConstructorInvocation(SuperConstructorInvocation node);
295 R visitSuperExpression(SuperExpression node);
296 R visitSwitchCase(SwitchCase node);
297 R visitSwitchDefault(SwitchDefault node);
298 R visitSwitchStatement(SwitchStatement node);
299 R visitThisExpression(ThisExpression node);
300 R visitThrowExpression(ThrowExpression node);
301 R visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node);
302 R visitTryStatement(TryStatement node);
303 R visitTypeArgumentList(TypeArgumentList node);
304 R visitTypeName(TypeName node);
305 R visitTypeParameter(TypeParameter node);
306 R visitTypeParameterList(TypeParameterList node);
307 R visitVariableDeclaration(VariableDeclaration node);
308 R visitVariableDeclarationList(VariableDeclarationList node);
309 R visitVariableDeclarationStatement(VariableDeclarationStatement node);
310 R visitWhileStatement(WhileStatement node);
311 R visitWithClause(WithClause node);
312 }
313 /**
314 * Instances of the class {@code AdjacentStrings} represents two or more string literals that are
315 * implicitly concatenated because of being adjacent (separated only by whitespa ce).
316 * <p>
317 * While the grammar only allows adjacent strings when all of the strings are of the same kind
318 * (single line or multi-line), this class doesn't enforce that restriction.
319 * <pre>
320 * adjacentStrings ::={@link StringLiteral string} {@link StringLiteral string}+
321 * </pre>
322 * @coverage dart.engine.ast
323 */
324 class AdjacentStrings extends StringLiteral {
325 /**
326 * The strings that are implicitly concatenated.
327 */
328 NodeList<StringLiteral> _strings;
329 /**
330 * Initialize a newly created list of adjacent strings.
331 * @param strings the strings that are implicitly concatenated
332 */
333 AdjacentStrings.full(List<StringLiteral> strings) {
334 this._strings = new NodeList<StringLiteral>(this);
335 this._strings.addAll(strings);
336 }
337 /**
338 * Initialize a newly created list of adjacent strings.
339 * @param strings the strings that are implicitly concatenated
340 */
341 AdjacentStrings({List<StringLiteral> strings}) : this.full(strings);
342 accept(ASTVisitor visitor) => visitor.visitAdjacentStrings(this);
343 Token get beginToken => _strings.beginToken;
344 Token get endToken => _strings.endToken;
345 /**
346 * Return the strings that are implicitly concatenated.
347 * @return the strings that are implicitly concatenated
348 */
349 NodeList<StringLiteral> get strings => _strings;
350 void visitChildren(ASTVisitor<Object> visitor) {
351 _strings.accept(visitor);
352 }
353 }
354 /**
355 * The abstract class {@code AnnotatedNode} defines the behavior of nodes that c an be annotated with
356 * both a comment and metadata.
357 * @coverage dart.engine.ast
358 */
359 abstract class AnnotatedNode extends ASTNode {
360 /**
361 * The documentation comment associated with this node, or {@code null} if thi s node does not have
362 * a documentation comment associated with it.
363 */
364 Comment _comment;
365 /**
366 * The annotations associated with this node.
367 */
368 NodeList<Annotation> _metadata;
369 /**
370 * Initialize a newly created node.
371 * @param comment the documentation comment associated with this node
372 * @param metadata the annotations associated with this node
373 */
374 AnnotatedNode.full(Comment comment, List<Annotation> metadata) {
375 this._metadata = new NodeList<Annotation>(this);
376 this._comment = becomeParentOf(comment);
377 this._metadata.addAll(metadata);
378 }
379 /**
380 * Initialize a newly created node.
381 * @param comment the documentation comment associated with this node
382 * @param metadata the annotations associated with this node
383 */
384 AnnotatedNode({Comment comment, List<Annotation> metadata}) : this.full(commen t, metadata);
385 Token get beginToken {
386 if (_comment == null) {
387 if (_metadata.isEmpty) {
388 return firstTokenAfterCommentAndMetadata;
389 } else {
390 return _metadata.beginToken;
391 }
392 } else if (_metadata.isEmpty) {
393 return _comment.beginToken;
394 }
395 Token commentToken = _comment.beginToken;
396 Token metadataToken = _metadata.beginToken;
397 if (commentToken.offset < metadataToken.offset) {
398 return commentToken;
399 }
400 return metadataToken;
401 }
402 /**
403 * Return the documentation comment associated with this node, or {@code null} if this node does
404 * not have a documentation comment associated with it.
405 * @return the documentation comment associated with this node
406 */
407 Comment get documentationComment => _comment;
408 /**
409 * Return the annotations associated with this node.
410 * @return the annotations associated with this node
411 */
412 NodeList<Annotation> get metadata => _metadata;
413 /**
414 * Set the documentation comment associated with this node to the given commen t
415 * @param comment the documentation comment to be associated with this node
416 */
417 void set documentationComment(Comment comment2) {
418 this._comment = becomeParentOf(comment2);
419 }
420 void visitChildren(ASTVisitor<Object> visitor) {
421 if (commentIsBeforeAnnotations()) {
422 safelyVisitChild(_comment, visitor);
423 _metadata.accept(visitor);
424 } else {
425 for (ASTNode child in sortedCommentAndAnnotations) {
426 child.accept(visitor);
427 }
428 }
429 }
430 /**
431 * Return the first token following the comment and metadata.
432 * @return the first token following the comment and metadata
433 */
434 Token get firstTokenAfterCommentAndMetadata;
435 /**
436 * Return {@code true} if the comment is lexically before any annotations.
437 * @return {@code true} if the comment is lexically before any annotations
438 */
439 bool commentIsBeforeAnnotations() {
440 if (_comment == null || _metadata.isEmpty) {
441 return true;
442 }
443 Annotation firstAnnotation = _metadata[0];
444 return _comment.offset < firstAnnotation.offset;
445 }
446 /**
447 * Return an array containing the comment and annotations associated with this node, sorted in
448 * lexical order.
449 * @return the comment and annotations associated with this node in the order in which they
450 * appeared in the original source
451 */
452 List<ASTNode> get sortedCommentAndAnnotations {
453 List<ASTNode> childList = new List<ASTNode>();
454 childList.add(_comment);
455 childList.addAll(_metadata);
456 List<ASTNode> children = new List.from(childList);
457 children.sort();
458 return children;
459 }
460 }
461 /**
462 * Instances of the class {@code Annotation} represent an annotation that can be associated with an
463 * AST node.
464 * <pre>
465 * metadata ::=
466 * annotation
467 * annotation ::=
468 * '@' {@link Identifier qualified} (‘.’ {@link SimpleIdentifier identifier} )? {@link ArgumentList arguments}?
469 * </pre>
470 * @coverage dart.engine.ast
471 */
472 class Annotation extends ASTNode {
473 /**
474 * The at sign that introduced the annotation.
475 */
476 Token _atSign;
477 /**
478 * The name of the class defining the constructor that is being invoked or the name of the field
479 * that is being referenced.
480 */
481 Identifier _name;
482 /**
483 * The period before the constructor name, or {@code null} if this annotation is not the
484 * invocation of a named constructor.
485 */
486 Token _period;
487 /**
488 * The name of the constructor being invoked, or {@code null} if this annotati on is not the
489 * invocation of a named constructor.
490 */
491 SimpleIdentifier _constructorName;
492 /**
493 * The arguments to the constructor being invoked, or {@code null} if this ann otation is not the
494 * invocation of a constructor.
495 */
496 ArgumentList _arguments;
497 /**
498 * Initialize a newly created annotation.
499 * @param atSign the at sign that introduced the annotation
500 * @param name the name of the class defining the constructor that is being in voked or the name of
501 * the field that is being referenced
502 * @param period the period before the constructor name, or {@code null} if th is annotation is not
503 * the invocation of a named constructor
504 * @param constructorName the name of the constructor being invoked, or {@code null} if this
505 * annotation is not the invocation of a named constructor
506 * @param arguments the arguments to the constructor being invoked, or {@code null} if this
507 * annotation is not the invocation of a constructor
508 */
509 Annotation.full(Token atSign, Identifier name, Token period, SimpleIdentifier constructorName, ArgumentList arguments) {
510 this._atSign = atSign;
511 this._name = becomeParentOf(name);
512 this._period = period;
513 this._constructorName = becomeParentOf(constructorName);
514 this._arguments = becomeParentOf(arguments);
515 }
516 /**
517 * Initialize a newly created annotation.
518 * @param atSign the at sign that introduced the annotation
519 * @param name the name of the class defining the constructor that is being in voked or the name of
520 * the field that is being referenced
521 * @param period the period before the constructor name, or {@code null} if th is annotation is not
522 * the invocation of a named constructor
523 * @param constructorName the name of the constructor being invoked, or {@code null} if this
524 * annotation is not the invocation of a named constructor
525 * @param arguments the arguments to the constructor being invoked, or {@code null} if this
526 * annotation is not the invocation of a constructor
527 */
528 Annotation({Token atSign, Identifier name, Token period, SimpleIdentifier cons tructorName, ArgumentList arguments}) : this.full(atSign, name, period, construc torName, arguments);
529 accept(ASTVisitor visitor) => visitor.visitAnnotation(this);
530 /**
531 * Return the arguments to the constructor being invoked, or {@code null} if t his annotation is
532 * not the invocation of a constructor.
533 * @return the arguments to the constructor being invoked
534 */
535 ArgumentList get arguments => _arguments;
536 /**
537 * Return the at sign that introduced the annotation.
538 * @return the at sign that introduced the annotation
539 */
540 Token get atSign => _atSign;
541 Token get beginToken => _atSign;
542 /**
543 * Return the name of the constructor being invoked, or {@code null} if this a nnotation is not the
544 * invocation of a named constructor.
545 * @return the name of the constructor being invoked
546 */
547 SimpleIdentifier get constructorName => _constructorName;
548 Token get endToken {
549 if (_arguments != null) {
550 return _arguments.endToken;
551 } else if (_constructorName != null) {
552 return _constructorName.endToken;
553 }
554 return _name.endToken;
555 }
556 /**
557 * Return the name of the class defining the constructor that is being invoked or the name of the
558 * field that is being referenced.
559 * @return the name of the constructor being invoked or the name of the field being referenced
560 */
561 Identifier get name => _name;
562 /**
563 * Return the period before the constructor name, or {@code null} if this anno tation is not the
564 * invocation of a named constructor.
565 * @return the period before the constructor name
566 */
567 Token get period => _period;
568 /**
569 * Set the arguments to the constructor being invoked to the given arguments.
570 * @param arguments the arguments to the constructor being invoked
571 */
572 void set arguments(ArgumentList arguments2) {
573 this._arguments = becomeParentOf(arguments2);
574 }
575 /**
576 * Set the at sign that introduced the annotation to the given token.
577 * @param atSign the at sign that introduced the annotation
578 */
579 void set atSign(Token atSign2) {
580 this._atSign = atSign2;
581 }
582 /**
583 * Set the name of the constructor being invoked to the given name.
584 * @param constructorName the name of the constructor being invoked
585 */
586 void set constructorName(SimpleIdentifier constructorName2) {
587 this._constructorName = becomeParentOf(constructorName2);
588 }
589 /**
590 * Set the name of the class defining the constructor that is being invoked or the name of the
591 * field that is being referenced to the given name.
592 * @param name the name of the constructor being invoked or the name of the fi eld being referenced
593 */
594 void set name(Identifier name2) {
595 this._name = becomeParentOf(name2);
596 }
597 /**
598 * Set the period before the constructor name to the given token.
599 * @param period the period before the constructor name
600 */
601 void set period(Token period2) {
602 this._period = period2;
603 }
604 void visitChildren(ASTVisitor<Object> visitor) {
605 safelyVisitChild(_name, visitor);
606 safelyVisitChild(_constructorName, visitor);
607 safelyVisitChild(_arguments, visitor);
608 }
609 }
610 /**
611 * Instances of the class {@code ArgumentDefinitionTest} represent an argument d efinition test.
612 * <pre>
613 * argumentDefinitionTest ::=
614 * '?' {@link SimpleIdentifier identifier}</pre>
615 * @coverage dart.engine.ast
616 */
617 class ArgumentDefinitionTest extends Expression {
618 /**
619 * The token representing the question mark.
620 */
621 Token _question;
622 /**
623 * The identifier representing the argument being tested.
624 */
625 SimpleIdentifier _identifier;
626 /**
627 * Initialize a newly created argument definition test.
628 * @param question the token representing the question mark
629 * @param identifier the identifier representing the argument being tested
630 */
631 ArgumentDefinitionTest.full(Token question, SimpleIdentifier identifier) {
632 this._question = question;
633 this._identifier = becomeParentOf(identifier);
634 }
635 /**
636 * Initialize a newly created argument definition test.
637 * @param question the token representing the question mark
638 * @param identifier the identifier representing the argument being tested
639 */
640 ArgumentDefinitionTest({Token question, SimpleIdentifier identifier}) : this.f ull(question, identifier);
641 accept(ASTVisitor visitor) => visitor.visitArgumentDefinitionTest(this);
642 Token get beginToken => _question;
643 Token get endToken => _identifier.endToken;
644 /**
645 * Return the identifier representing the argument being tested.
646 * @return the identifier representing the argument being tested
647 */
648 SimpleIdentifier get identifier => _identifier;
649 /**
650 * Return the token representing the question mark.
651 * @return the token representing the question mark
652 */
653 Token get question => _question;
654 /**
655 * Set the identifier representing the argument being tested to the given iden tifier.
656 * @param identifier the identifier representing the argument being tested
657 */
658 void set identifier(SimpleIdentifier identifier7) {
659 this._identifier = becomeParentOf(identifier7);
660 }
661 /**
662 * Set the token representing the question mark to the given token.
663 * @param question the token representing the question mark
664 */
665 void set question(Token question2) {
666 this._question = question2;
667 }
668 void visitChildren(ASTVisitor<Object> visitor) {
669 safelyVisitChild(_identifier, visitor);
670 }
671 }
672 /**
673 * Instances of the class {@code ArgumentList} represent a list of arguments in the invocation of a
674 * executable element: a function, method, or constructor.
675 * <pre>
676 * argumentList ::=
677 * '(' arguments? ')'
678 * arguments ::={@link NamedExpression namedArgument} (',' {@link NamedExpressio n namedArgument})
679 * | {@link Expression expressionList} (',' {@link NamedExpression namedArgument })
680 * </pre>
681 * @coverage dart.engine.ast
682 */
683 class ArgumentList extends ASTNode {
684 /**
685 * The left parenthesis.
686 */
687 Token _leftParenthesis;
688 /**
689 * The expressions producing the values of the arguments.
690 */
691 NodeList<Expression> _arguments;
692 /**
693 * The right parenthesis.
694 */
695 Token _rightParenthesis;
696 /**
697 * An array containing the elements representing the parameters corresponding to each of the
698 * arguments in this list, or {@code null} if the AST has not been resolved or if the function or
699 * method being invoked could not be determined. The array must be the same le ngth as the number
700 * of arguments, but can contain {@code null} entries if a given argument does not correspond to a
701 * formal parameter.
702 */
703 List<ParameterElement> _correspondingParameters;
704 /**
705 * Initialize a newly created list of arguments.
706 * @param leftParenthesis the left parenthesis
707 * @param arguments the expressions producing the values of the arguments
708 * @param rightParenthesis the right parenthesis
709 */
710 ArgumentList.full(Token leftParenthesis, List<Expression> arguments, Token rig htParenthesis) {
711 this._arguments = new NodeList<Expression>(this);
712 this._leftParenthesis = leftParenthesis;
713 this._arguments.addAll(arguments);
714 this._rightParenthesis = rightParenthesis;
715 }
716 /**
717 * Initialize a newly created list of arguments.
718 * @param leftParenthesis the left parenthesis
719 * @param arguments the expressions producing the values of the arguments
720 * @param rightParenthesis the right parenthesis
721 */
722 ArgumentList({Token leftParenthesis, List<Expression> arguments, Token rightPa renthesis}) : this.full(leftParenthesis, arguments, rightParenthesis);
723 accept(ASTVisitor visitor) => visitor.visitArgumentList(this);
724 /**
725 * Return the expressions producing the values of the arguments. Although the language requires
726 * that positional arguments appear before named arguments, this class allows them to be
727 * intermixed.
728 * @return the expressions producing the values of the arguments
729 */
730 NodeList<Expression> get arguments => _arguments;
731 Token get beginToken => _leftParenthesis;
732 Token get endToken => _rightParenthesis;
733 /**
734 * Return the left parenthesis.
735 * @return the left parenthesis
736 */
737 Token get leftParenthesis => _leftParenthesis;
738 /**
739 * Return the right parenthesis.
740 * @return the right parenthesis
741 */
742 Token get rightParenthesis => _rightParenthesis;
743 /**
744 * Set the parameter elements corresponding to each of the arguments in this l ist to the given
745 * array of parameters. The array of parameters must be the same length as the number of
746 * arguments, but can contain {@code null} entries if a given argument does no t correspond to a
747 * formal parameter.
748 * @param parameters the parameter elements corresponding to the arguments
749 */
750 void set correspondingParameters(List<ParameterElement> parameters) {
751 if (parameters.length != _arguments.length) {
752 throw new IllegalArgumentException("Expected ${_arguments.length} paramete rs, not ${parameters.length}");
753 }
754 _correspondingParameters = parameters;
755 }
756 /**
757 * Set the left parenthesis to the given token.
758 * @param parenthesis the left parenthesis
759 */
760 void set leftParenthesis(Token parenthesis) {
761 _leftParenthesis = parenthesis;
762 }
763 /**
764 * Set the right parenthesis to the given token.
765 * @param parenthesis the right parenthesis
766 */
767 void set rightParenthesis(Token parenthesis) {
768 _rightParenthesis = parenthesis;
769 }
770 void visitChildren(ASTVisitor<Object> visitor) {
771 _arguments.accept(visitor);
772 }
773 /**
774 * If the given expression is a child of this list, and the AST structure has been resolved, and
775 * the function being invoked is known, and the expression corresponds to one of the parameters of
776 * the function being invoked, then return the parameter element representing the parameter to
777 * which the value of the given expression will be bound. Otherwise, return {@ code null}.
778 * <p>
779 * This method is only intended to be used by {@link Expression#getParameterEl ement()}.
780 * @param expression the expression corresponding to the parameter to be retur ned
781 * @return the parameter element representing the parameter to which the value of the expression
782 * will be bound
783 */
784 ParameterElement getParameterElementFor(Expression expression) {
785 if (_correspondingParameters == null) {
786 return null;
787 }
788 int index = _arguments.indexOf(expression);
789 if (index < 0) {
790 return null;
791 }
792 return _correspondingParameters[index];
793 }
794 }
795 /**
796 * Instances of the class {@code AsExpression} represent an 'as' expression.
797 * <pre>
798 * asExpression ::={@link Expression expression} 'as' {@link TypeName type}</pre >
799 * @coverage dart.engine.ast
800 */
801 class AsExpression extends Expression {
802 /**
803 * The expression used to compute the value being cast.
804 */
805 Expression _expression;
806 /**
807 * The as operator.
808 */
809 Token _asOperator;
810 /**
811 * The name of the type being cast to.
812 */
813 TypeName _type;
814 /**
815 * Initialize a newly created as expression.
816 * @param expression the expression used to compute the value being cast
817 * @param isOperator the is operator
818 * @param type the name of the type being cast to
819 */
820 AsExpression.full(Expression expression, Token isOperator, TypeName type) {
821 this._expression = becomeParentOf(expression);
822 this._asOperator = isOperator;
823 this._type = becomeParentOf(type);
824 }
825 /**
826 * Initialize a newly created as expression.
827 * @param expression the expression used to compute the value being cast
828 * @param isOperator the is operator
829 * @param type the name of the type being cast to
830 */
831 AsExpression({Expression expression, Token isOperator, TypeName type}) : this. full(expression, isOperator, type);
832 accept(ASTVisitor visitor) => visitor.visitAsExpression(this);
833 /**
834 * Return the is operator being applied.
835 * @return the is operator being applied
836 */
837 Token get asOperator => _asOperator;
838 Token get beginToken => _expression.beginToken;
839 Token get endToken => _type.endToken;
840 /**
841 * Return the expression used to compute the value being cast.
842 * @return the expression used to compute the value being cast
843 */
844 Expression get expression => _expression;
845 /**
846 * Return the name of the type being cast to.
847 * @return the name of the type being cast to
848 */
849 TypeName get type => _type;
850 /**
851 * Set the is operator being applied to the given operator.
852 * @param asOperator the is operator being applied
853 */
854 void set asOperator(Token asOperator2) {
855 this._asOperator = asOperator2;
856 }
857 /**
858 * Set the expression used to compute the value being cast to the given expres sion.
859 * @param expression the expression used to compute the value being cast
860 */
861 void set expression(Expression expression2) {
862 this._expression = becomeParentOf(expression2);
863 }
864 /**
865 * Set the name of the type being cast to to the given name.
866 * @param name the name of the type being cast to
867 */
868 void set type(TypeName name) {
869 this._type = becomeParentOf(name);
870 }
871 void visitChildren(ASTVisitor<Object> visitor) {
872 safelyVisitChild(_expression, visitor);
873 safelyVisitChild(_type, visitor);
874 }
875 }
876 /**
877 * Instances of the class {@code AssertStatement} represent an assert statement.
878 * <pre>
879 * assertStatement ::=
880 * 'assert' '(' {@link Expression conditionalExpression} ')' ';'
881 * </pre>
882 * @coverage dart.engine.ast
883 */
884 class AssertStatement extends Statement {
885 /**
886 * The token representing the 'assert' keyword.
887 */
888 Token _keyword;
889 /**
890 * The left parenthesis.
891 */
892 Token _leftParenthesis;
893 /**
894 * The condition that is being asserted to be {@code true}.
895 */
896 Expression _condition;
897 /**
898 * The right parenthesis.
899 */
900 Token _rightParenthesis;
901 /**
902 * The semicolon terminating the statement.
903 */
904 Token _semicolon;
905 /**
906 * Initialize a newly created assert statement.
907 * @param keyword the token representing the 'assert' keyword
908 * @param leftParenthesis the left parenthesis
909 * @param condition the condition that is being asserted to be {@code true}
910 * @param rightParenthesis the right parenthesis
911 * @param semicolon the semicolon terminating the statement
912 */
913 AssertStatement.full(Token keyword, Token leftParenthesis, Expression conditio n, Token rightParenthesis, Token semicolon) {
914 this._keyword = keyword;
915 this._leftParenthesis = leftParenthesis;
916 this._condition = becomeParentOf(condition);
917 this._rightParenthesis = rightParenthesis;
918 this._semicolon = semicolon;
919 }
920 /**
921 * Initialize a newly created assert statement.
922 * @param keyword the token representing the 'assert' keyword
923 * @param leftParenthesis the left parenthesis
924 * @param condition the condition that is being asserted to be {@code true}
925 * @param rightParenthesis the right parenthesis
926 * @param semicolon the semicolon terminating the statement
927 */
928 AssertStatement({Token keyword, Token leftParenthesis, Expression condition, T oken rightParenthesis, Token semicolon}) : this.full(keyword, leftParenthesis, c ondition, rightParenthesis, semicolon);
929 accept(ASTVisitor visitor) => visitor.visitAssertStatement(this);
930 Token get beginToken => _keyword;
931 /**
932 * Return the condition that is being asserted to be {@code true}.
933 * @return the condition that is being asserted to be {@code true}
934 */
935 Expression get condition => _condition;
936 Token get endToken => _semicolon;
937 /**
938 * Return the token representing the 'assert' keyword.
939 * @return the token representing the 'assert' keyword
940 */
941 Token get keyword => _keyword;
942 /**
943 * Return the left parenthesis.
944 * @return the left parenthesis
945 */
946 Token get leftParenthesis => _leftParenthesis;
947 /**
948 * Return the right parenthesis.
949 * @return the right parenthesis
950 */
951 Token get rightParenthesis => _rightParenthesis;
952 /**
953 * Return the semicolon terminating the statement.
954 * @return the semicolon terminating the statement
955 */
956 Token get semicolon => _semicolon;
957 /**
958 * Set the condition that is being asserted to be {@code true} to the given ex pression.
959 * @param the condition that is being asserted to be {@code true}
960 */
961 void set condition(Expression condition2) {
962 this._condition = becomeParentOf(condition2);
963 }
964 /**
965 * Set the token representing the 'assert' keyword to the given token.
966 * @param keyword the token representing the 'assert' keyword
967 */
968 void set keyword(Token keyword3) {
969 this._keyword = keyword3;
970 }
971 /**
972 * Set the left parenthesis to the given token.
973 * @param the left parenthesis
974 */
975 void set leftParenthesis(Token leftParenthesis2) {
976 this._leftParenthesis = leftParenthesis2;
977 }
978 /**
979 * Set the right parenthesis to the given token.
980 * @param rightParenthesis the right parenthesis
981 */
982 void set rightParenthesis(Token rightParenthesis2) {
983 this._rightParenthesis = rightParenthesis2;
984 }
985 /**
986 * Set the semicolon terminating the statement to the given token.
987 * @param semicolon the semicolon terminating the statement
988 */
989 void set semicolon(Token semicolon2) {
990 this._semicolon = semicolon2;
991 }
992 void visitChildren(ASTVisitor<Object> visitor) {
993 safelyVisitChild(_condition, visitor);
994 }
995 }
996 /**
997 * Instances of the class {@code AssignmentExpression} represent an assignment e xpression.
998 * <pre>
999 * assignmentExpression ::={@link Expression leftHandSide} {@link Token operator } {@link Expression rightHandSide}</pre>
1000 * @coverage dart.engine.ast
1001 */
1002 class AssignmentExpression extends Expression {
1003 /**
1004 * The expression used to compute the left hand side.
1005 */
1006 Expression _leftHandSide;
1007 /**
1008 * The assignment operator being applied.
1009 */
1010 Token _operator;
1011 /**
1012 * The expression used to compute the right hand side.
1013 */
1014 Expression _rightHandSide;
1015 /**
1016 * The element associated with the operator, or {@code null} if the AST struct ure has not been
1017 * resolved, if the operator is not a compound operator, or if the operator co uld not be resolved.
1018 */
1019 MethodElement _element;
1020 /**
1021 * Initialize a newly created assignment expression.
1022 * @param leftHandSide the expression used to compute the left hand side
1023 * @param operator the assignment operator being applied
1024 * @param rightHandSide the expression used to compute the right hand side
1025 */
1026 AssignmentExpression.full(Expression leftHandSide, Token operator, Expression rightHandSide) {
1027 this._leftHandSide = becomeParentOf(leftHandSide);
1028 this._operator = operator;
1029 this._rightHandSide = becomeParentOf(rightHandSide);
1030 }
1031 /**
1032 * Initialize a newly created assignment expression.
1033 * @param leftHandSide the expression used to compute the left hand side
1034 * @param operator the assignment operator being applied
1035 * @param rightHandSide the expression used to compute the right hand side
1036 */
1037 AssignmentExpression({Expression leftHandSide, Token operator, Expression righ tHandSide}) : this.full(leftHandSide, operator, rightHandSide);
1038 accept(ASTVisitor visitor) => visitor.visitAssignmentExpression(this);
1039 Token get beginToken => _leftHandSide.beginToken;
1040 /**
1041 * Return the element associated with the operator, or {@code null} if the AST structure has not
1042 * been resolved, if the operator is not a compound operator, or if the operat or could not be
1043 * resolved. One example of the latter case is an operator that is not defined for the type of the
1044 * left-hand operand.
1045 * @return the element associated with the operator
1046 */
1047 MethodElement get element => _element;
1048 Token get endToken => _rightHandSide.endToken;
1049 /**
1050 * Set the expression used to compute the left hand side to the given expressi on.
1051 * @return the expression used to compute the left hand side
1052 */
1053 Expression get leftHandSide => _leftHandSide;
1054 /**
1055 * Return the assignment operator being applied.
1056 * @return the assignment operator being applied
1057 */
1058 Token get operator => _operator;
1059 /**
1060 * Return the expression used to compute the right hand side.
1061 * @return the expression used to compute the right hand side
1062 */
1063 Expression get rightHandSide => _rightHandSide;
1064 /**
1065 * Set the element associated with the operator to the given element.
1066 * @param element the element associated with the operator
1067 */
1068 void set element(MethodElement element3) {
1069 this._element = element3;
1070 }
1071 /**
1072 * Return the expression used to compute the left hand side.
1073 * @param expression the expression used to compute the left hand side
1074 */
1075 void set leftHandSide(Expression expression) {
1076 _leftHandSide = becomeParentOf(expression);
1077 }
1078 /**
1079 * Set the assignment operator being applied to the given operator.
1080 * @param operator the assignment operator being applied
1081 */
1082 void set operator(Token operator2) {
1083 this._operator = operator2;
1084 }
1085 /**
1086 * Set the expression used to compute the left hand side to the given expressi on.
1087 * @param expression the expression used to compute the left hand side
1088 */
1089 void set rightHandSide(Expression expression) {
1090 _rightHandSide = becomeParentOf(expression);
1091 }
1092 void visitChildren(ASTVisitor<Object> visitor) {
1093 safelyVisitChild(_leftHandSide, visitor);
1094 safelyVisitChild(_rightHandSide, visitor);
1095 }
1096 }
1097 /**
1098 * Instances of the class {@code BinaryExpression} represent a binary (infix) ex pression.
1099 * <pre>
1100 * binaryExpression ::={@link Expression leftOperand} {@link Token operator} {@l ink Expression rightOperand}</pre>
1101 * @coverage dart.engine.ast
1102 */
1103 class BinaryExpression extends Expression {
1104 /**
1105 * The expression used to compute the left operand.
1106 */
1107 Expression _leftOperand;
1108 /**
1109 * The binary operator being applied.
1110 */
1111 Token _operator;
1112 /**
1113 * The expression used to compute the right operand.
1114 */
1115 Expression _rightOperand;
1116 /**
1117 * The element associated with the operator, or {@code null} if the AST struct ure has not been
1118 * resolved, if the operator is not user definable, or if the operator could n ot be resolved.
1119 */
1120 MethodElement _element;
1121 /**
1122 * Initialize a newly created binary expression.
1123 * @param leftOperand the expression used to compute the left operand
1124 * @param operator the binary operator being applied
1125 * @param rightOperand the expression used to compute the right operand
1126 */
1127 BinaryExpression.full(Expression leftOperand, Token operator, Expression right Operand) {
1128 this._leftOperand = becomeParentOf(leftOperand);
1129 this._operator = operator;
1130 this._rightOperand = becomeParentOf(rightOperand);
1131 }
1132 /**
1133 * Initialize a newly created binary expression.
1134 * @param leftOperand the expression used to compute the left operand
1135 * @param operator the binary operator being applied
1136 * @param rightOperand the expression used to compute the right operand
1137 */
1138 BinaryExpression({Expression leftOperand, Token operator, Expression rightOper and}) : this.full(leftOperand, operator, rightOperand);
1139 accept(ASTVisitor visitor) => visitor.visitBinaryExpression(this);
1140 Token get beginToken => _leftOperand.beginToken;
1141 /**
1142 * Return the element associated with the operator, or {@code null} if the AST structure has not
1143 * been resolved, if the operator is not user definable, or if the operator co uld not be resolved.
1144 * One example of the latter case is an operator that is not defined for the t ype of the left-hand
1145 * operand.
1146 * @return the element associated with the operator
1147 */
1148 MethodElement get element => _element;
1149 Token get endToken => _rightOperand.endToken;
1150 /**
1151 * Return the expression used to compute the left operand.
1152 * @return the expression used to compute the left operand
1153 */
1154 Expression get leftOperand => _leftOperand;
1155 /**
1156 * Return the binary operator being applied.
1157 * @return the binary operator being applied
1158 */
1159 Token get operator => _operator;
1160 /**
1161 * Return the expression used to compute the right operand.
1162 * @return the expression used to compute the right operand
1163 */
1164 Expression get rightOperand => _rightOperand;
1165 /**
1166 * Set the element associated with the operator to the given element.
1167 * @param element the element associated with the operator
1168 */
1169 void set element(MethodElement element4) {
1170 this._element = element4;
1171 }
1172 /**
1173 * Set the expression used to compute the left operand to the given expression .
1174 * @param expression the expression used to compute the left operand
1175 */
1176 void set leftOperand(Expression expression) {
1177 _leftOperand = becomeParentOf(expression);
1178 }
1179 /**
1180 * Set the binary operator being applied to the given operator.
1181 * @return the binary operator being applied
1182 */
1183 void set operator(Token operator3) {
1184 this._operator = operator3;
1185 }
1186 /**
1187 * Set the expression used to compute the right operand to the given expressio n.
1188 * @param expression the expression used to compute the right operand
1189 */
1190 void set rightOperand(Expression expression) {
1191 _rightOperand = becomeParentOf(expression);
1192 }
1193 void visitChildren(ASTVisitor<Object> visitor) {
1194 safelyVisitChild(_leftOperand, visitor);
1195 safelyVisitChild(_rightOperand, visitor);
1196 }
1197 }
1198 /**
1199 * Instances of the class {@code Block} represent a sequence of statements.
1200 * <pre>
1201 * block ::=
1202 * '{' statement* '}'
1203 * </pre>
1204 * @coverage dart.engine.ast
1205 */
1206 class Block extends Statement {
1207 /**
1208 * The left curly bracket.
1209 */
1210 Token _leftBracket;
1211 /**
1212 * The statements contained in the block.
1213 */
1214 NodeList<Statement> _statements;
1215 /**
1216 * The right curly bracket.
1217 */
1218 Token _rightBracket;
1219 /**
1220 * Initialize a newly created block of code.
1221 * @param leftBracket the left curly bracket
1222 * @param statements the statements contained in the block
1223 * @param rightBracket the right curly bracket
1224 */
1225 Block.full(Token leftBracket, List<Statement> statements, Token rightBracket) {
1226 this._statements = new NodeList<Statement>(this);
1227 this._leftBracket = leftBracket;
1228 this._statements.addAll(statements);
1229 this._rightBracket = rightBracket;
1230 }
1231 /**
1232 * Initialize a newly created block of code.
1233 * @param leftBracket the left curly bracket
1234 * @param statements the statements contained in the block
1235 * @param rightBracket the right curly bracket
1236 */
1237 Block({Token leftBracket, List<Statement> statements, Token rightBracket}) : t his.full(leftBracket, statements, rightBracket);
1238 accept(ASTVisitor visitor) => visitor.visitBlock(this);
1239 Token get beginToken => _leftBracket;
1240 Token get endToken => _rightBracket;
1241 /**
1242 * Return the left curly bracket.
1243 * @return the left curly bracket
1244 */
1245 Token get leftBracket => _leftBracket;
1246 /**
1247 * Return the right curly bracket.
1248 * @return the right curly bracket
1249 */
1250 Token get rightBracket => _rightBracket;
1251 /**
1252 * Return the statements contained in the block.
1253 * @return the statements contained in the block
1254 */
1255 NodeList<Statement> get statements => _statements;
1256 /**
1257 * Set the left curly bracket to the given token.
1258 * @param leftBracket the left curly bracket
1259 */
1260 void set leftBracket(Token leftBracket2) {
1261 this._leftBracket = leftBracket2;
1262 }
1263 /**
1264 * Set the right curly bracket to the given token.
1265 * @param rightBracket the right curly bracket
1266 */
1267 void set rightBracket(Token rightBracket2) {
1268 this._rightBracket = rightBracket2;
1269 }
1270 void visitChildren(ASTVisitor<Object> visitor) {
1271 _statements.accept(visitor);
1272 }
1273 }
1274 /**
1275 * Instances of the class {@code BlockFunctionBody} represent a function body th at consists of a
1276 * block of statements.
1277 * <pre>
1278 * blockFunctionBody ::={@link Block block}</pre>
1279 * @coverage dart.engine.ast
1280 */
1281 class BlockFunctionBody extends FunctionBody {
1282 /**
1283 * The block representing the body of the function.
1284 */
1285 Block _block;
1286 /**
1287 * Initialize a newly created function body consisting of a block of statement s.
1288 * @param block the block representing the body of the function
1289 */
1290 BlockFunctionBody.full(Block block) {
1291 this._block = becomeParentOf(block);
1292 }
1293 /**
1294 * Initialize a newly created function body consisting of a block of statement s.
1295 * @param block the block representing the body of the function
1296 */
1297 BlockFunctionBody({Block block}) : this.full(block);
1298 accept(ASTVisitor visitor) => visitor.visitBlockFunctionBody(this);
1299 Token get beginToken => _block.beginToken;
1300 /**
1301 * Return the block representing the body of the function.
1302 * @return the block representing the body of the function
1303 */
1304 Block get block => _block;
1305 Token get endToken => _block.endToken;
1306 /**
1307 * Set the block representing the body of the function to the given block.
1308 * @param block the block representing the body of the function
1309 */
1310 void set block(Block block2) {
1311 this._block = becomeParentOf(block2);
1312 }
1313 void visitChildren(ASTVisitor<Object> visitor) {
1314 safelyVisitChild(_block, visitor);
1315 }
1316 }
1317 /**
1318 * Instances of the class {@code BooleanLiteral} represent a boolean literal exp ression.
1319 * <pre>
1320 * booleanLiteral ::=
1321 * 'false' | 'true'
1322 * </pre>
1323 * @coverage dart.engine.ast
1324 */
1325 class BooleanLiteral extends Literal {
1326 /**
1327 * The token representing the literal.
1328 */
1329 Token _literal;
1330 /**
1331 * The value of the literal.
1332 */
1333 bool _value = false;
1334 /**
1335 * Initialize a newly created boolean literal.
1336 * @param literal the token representing the literal
1337 * @param value the value of the literal
1338 */
1339 BooleanLiteral.full(Token literal, bool value) {
1340 this._literal = literal;
1341 this._value = value;
1342 }
1343 /**
1344 * Initialize a newly created boolean literal.
1345 * @param literal the token representing the literal
1346 * @param value the value of the literal
1347 */
1348 BooleanLiteral({Token literal, bool value}) : this.full(literal, value);
1349 accept(ASTVisitor visitor) => visitor.visitBooleanLiteral(this);
1350 Token get beginToken => _literal;
1351 Token get endToken => _literal;
1352 /**
1353 * Return the token representing the literal.
1354 * @return the token representing the literal
1355 */
1356 Token get literal => _literal;
1357 /**
1358 * Return the value of the literal.
1359 * @return the value of the literal
1360 */
1361 bool get value => _value;
1362 bool isSynthetic() => _literal.isSynthetic();
1363 /**
1364 * Set the token representing the literal to the given token.
1365 * @param literal the token representing the literal
1366 */
1367 void set literal(Token literal2) {
1368 this._literal = literal2;
1369 }
1370 /**
1371 * Set the value of the literal to the given value.
1372 * @param value the value of the literal
1373 */
1374 void set value(bool value4) {
1375 this._value = value4;
1376 }
1377 void visitChildren(ASTVisitor<Object> visitor) {
1378 }
1379 }
1380 /**
1381 * Instances of the class {@code BreakStatement} represent a break statement.
1382 * <pre>
1383 * breakStatement ::=
1384 * 'break' {@link SimpleIdentifier label}? ';'
1385 * </pre>
1386 * @coverage dart.engine.ast
1387 */
1388 class BreakStatement extends Statement {
1389 /**
1390 * The token representing the 'break' keyword.
1391 */
1392 Token _keyword;
1393 /**
1394 * The label associated with the statement, or {@code null} if there is no lab el.
1395 */
1396 SimpleIdentifier _label;
1397 /**
1398 * The semicolon terminating the statement.
1399 */
1400 Token _semicolon;
1401 /**
1402 * Initialize a newly created break statement.
1403 * @param keyword the token representing the 'break' keyword
1404 * @param label the label associated with the statement
1405 * @param semicolon the semicolon terminating the statement
1406 */
1407 BreakStatement.full(Token keyword, SimpleIdentifier label, Token semicolon) {
1408 this._keyword = keyword;
1409 this._label = becomeParentOf(label);
1410 this._semicolon = semicolon;
1411 }
1412 /**
1413 * Initialize a newly created break statement.
1414 * @param keyword the token representing the 'break' keyword
1415 * @param label the label associated with the statement
1416 * @param semicolon the semicolon terminating the statement
1417 */
1418 BreakStatement({Token keyword, SimpleIdentifier label, Token semicolon}) : thi s.full(keyword, label, semicolon);
1419 accept(ASTVisitor visitor) => visitor.visitBreakStatement(this);
1420 Token get beginToken => _keyword;
1421 Token get endToken => _semicolon;
1422 /**
1423 * Return the token representing the 'break' keyword.
1424 * @return the token representing the 'break' keyword
1425 */
1426 Token get keyword => _keyword;
1427 /**
1428 * Return the label associated with the statement, or {@code null} if there is no label.
1429 * @return the label associated with the statement
1430 */
1431 SimpleIdentifier get label => _label;
1432 /**
1433 * Return the semicolon terminating the statement.
1434 * @return the semicolon terminating the statement
1435 */
1436 Token get semicolon => _semicolon;
1437 /**
1438 * Set the token representing the 'break' keyword to the given token.
1439 * @param keyword the token representing the 'break' keyword
1440 */
1441 void set keyword(Token keyword4) {
1442 this._keyword = keyword4;
1443 }
1444 /**
1445 * Set the label associated with the statement to the given identifier.
1446 * @param identifier the label associated with the statement
1447 */
1448 void set label(SimpleIdentifier identifier) {
1449 _label = becomeParentOf(identifier);
1450 }
1451 /**
1452 * Set the semicolon terminating the statement to the given token.
1453 * @param semicolon the semicolon terminating the statement
1454 */
1455 void set semicolon(Token semicolon3) {
1456 this._semicolon = semicolon3;
1457 }
1458 void visitChildren(ASTVisitor<Object> visitor) {
1459 safelyVisitChild(_label, visitor);
1460 }
1461 }
1462 /**
1463 * Instances of the class {@code CascadeExpression} represent a sequence of casc aded expressions:
1464 * expressions that share a common target. There are three kinds of expressions that can be used in
1465 * a cascade expression: {@link IndexExpression}, {@link MethodInvocation} and{@ link PropertyAccess}.
1466 * <pre>
1467 * cascadeExpression ::={@link Expression conditionalExpression} cascadeSection
1468 * cascadeSection ::=
1469 * '..' (cascadeSelector arguments*) (assignableSelector arguments*)* (assignme ntOperator expressionWithoutCascade)?
1470 * cascadeSelector ::=
1471 * '[ ' expression '] '
1472 * | identifier
1473 * </pre>
1474 * @coverage dart.engine.ast
1475 */
1476 class CascadeExpression extends Expression {
1477 /**
1478 * The target of the cascade sections.
1479 */
1480 Expression _target;
1481 /**
1482 * The cascade sections sharing the common target.
1483 */
1484 NodeList<Expression> _cascadeSections;
1485 /**
1486 * Initialize a newly created cascade expression.
1487 * @param target the target of the cascade sections
1488 * @param cascadeSections the cascade sections sharing the common target
1489 */
1490 CascadeExpression.full(Expression target, List<Expression> cascadeSections) {
1491 this._cascadeSections = new NodeList<Expression>(this);
1492 this._target = becomeParentOf(target);
1493 this._cascadeSections.addAll(cascadeSections);
1494 }
1495 /**
1496 * Initialize a newly created cascade expression.
1497 * @param target the target of the cascade sections
1498 * @param cascadeSections the cascade sections sharing the common target
1499 */
1500 CascadeExpression({Expression target, List<Expression> cascadeSections}) : thi s.full(target, cascadeSections);
1501 accept(ASTVisitor visitor) => visitor.visitCascadeExpression(this);
1502 Token get beginToken => _target.beginToken;
1503 /**
1504 * Return the cascade sections sharing the common target.
1505 * @return the cascade sections sharing the common target
1506 */
1507 NodeList<Expression> get cascadeSections => _cascadeSections;
1508 Token get endToken => _cascadeSections.endToken;
1509 /**
1510 * Return the target of the cascade sections.
1511 * @return the target of the cascade sections
1512 */
1513 Expression get target => _target;
1514 /**
1515 * Set the target of the cascade sections to the given expression.
1516 * @param target the target of the cascade sections
1517 */
1518 void set target(Expression target2) {
1519 this._target = becomeParentOf(target2);
1520 }
1521 void visitChildren(ASTVisitor<Object> visitor) {
1522 safelyVisitChild(_target, visitor);
1523 _cascadeSections.accept(visitor);
1524 }
1525 }
1526 /**
1527 * Instances of the class {@code CatchClause} represent a catch clause within a try statement.
1528 * <pre>
1529 * onPart ::=
1530 * catchPart {@link Block block}| 'on' type catchPart? {@link Block block}catchP art ::=
1531 * 'catch' '(' {@link SimpleIdentifier exceptionParameter} (',' {@link SimpleIde ntifier stackTraceParameter})? ')'
1532 * </pre>
1533 * @coverage dart.engine.ast
1534 */
1535 class CatchClause extends ASTNode {
1536 /**
1537 * The token representing the 'on' keyword, or {@code null} if there is no 'on ' keyword.
1538 */
1539 Token _onKeyword;
1540 /**
1541 * The type of exceptions caught by this catch clause, or {@code null} if this catch clause
1542 * catches every type of exception.
1543 */
1544 TypeName _exceptionType;
1545 /**
1546 * The token representing the 'catch' keyword, or {@code null} if there is no 'catch' keyword.
1547 */
1548 Token _catchKeyword;
1549 /**
1550 * The left parenthesis.
1551 */
1552 Token _leftParenthesis;
1553 /**
1554 * The parameter whose value will be the exception that was thrown.
1555 */
1556 SimpleIdentifier _exceptionParameter;
1557 /**
1558 * The comma separating the exception parameter from the stack trace parameter .
1559 */
1560 Token _comma;
1561 /**
1562 * The parameter whose value will be the stack trace associated with the excep tion.
1563 */
1564 SimpleIdentifier _stackTraceParameter;
1565 /**
1566 * The right parenthesis.
1567 */
1568 Token _rightParenthesis;
1569 /**
1570 * The body of the catch block.
1571 */
1572 Block _body;
1573 /**
1574 * Initialize a newly created catch clause.
1575 * @param onKeyword the token representing the 'on' keyword
1576 * @param exceptionType the type of exceptions caught by this catch clause
1577 * @param leftParenthesis the left parenthesis
1578 * @param exceptionParameter the parameter whose value will be the exception t hat was thrown
1579 * @param comma the comma separating the exception parameter from the stack tr ace parameter
1580 * @param stackTraceParameter the parameter whose value will be the stack trac e associated with
1581 * the exception
1582 * @param rightParenthesis the right parenthesis
1583 * @param body the body of the catch block
1584 */
1585 CatchClause.full(Token onKeyword, TypeName exceptionType, Token catchKeyword, Token leftParenthesis, SimpleIdentifier exceptionParameter, Token comma, SimpleI dentifier stackTraceParameter, Token rightParenthesis, Block body) {
1586 this._onKeyword = onKeyword;
1587 this._exceptionType = becomeParentOf(exceptionType);
1588 this._catchKeyword = catchKeyword;
1589 this._leftParenthesis = leftParenthesis;
1590 this._exceptionParameter = becomeParentOf(exceptionParameter);
1591 this._comma = comma;
1592 this._stackTraceParameter = becomeParentOf(stackTraceParameter);
1593 this._rightParenthesis = rightParenthesis;
1594 this._body = becomeParentOf(body);
1595 }
1596 /**
1597 * Initialize a newly created catch clause.
1598 * @param onKeyword the token representing the 'on' keyword
1599 * @param exceptionType the type of exceptions caught by this catch clause
1600 * @param leftParenthesis the left parenthesis
1601 * @param exceptionParameter the parameter whose value will be the exception t hat was thrown
1602 * @param comma the comma separating the exception parameter from the stack tr ace parameter
1603 * @param stackTraceParameter the parameter whose value will be the stack trac e associated with
1604 * the exception
1605 * @param rightParenthesis the right parenthesis
1606 * @param body the body of the catch block
1607 */
1608 CatchClause({Token onKeyword, TypeName exceptionType, Token catchKeyword, Toke n leftParenthesis, SimpleIdentifier exceptionParameter, Token comma, SimpleIdent ifier stackTraceParameter, Token rightParenthesis, Block body}) : this.full(onKe yword, exceptionType, catchKeyword, leftParenthesis, exceptionParameter, comma, stackTraceParameter, rightParenthesis, body);
1609 accept(ASTVisitor visitor) => visitor.visitCatchClause(this);
1610 Token get beginToken {
1611 if (_onKeyword != null) {
1612 return _onKeyword;
1613 }
1614 return _catchKeyword;
1615 }
1616 /**
1617 * Return the body of the catch block.
1618 * @return the body of the catch block
1619 */
1620 Block get body => _body;
1621 /**
1622 * Return the token representing the 'catch' keyword, or {@code null} if there is no 'catch'
1623 * keyword.
1624 * @return the token representing the 'catch' keyword
1625 */
1626 Token get catchKeyword => _catchKeyword;
1627 /**
1628 * Return the comma.
1629 * @return the comma
1630 */
1631 Token get comma => _comma;
1632 Token get endToken => _body.endToken;
1633 /**
1634 * Return the parameter whose value will be the exception that was thrown.
1635 * @return the parameter whose value will be the exception that was thrown
1636 */
1637 SimpleIdentifier get exceptionParameter => _exceptionParameter;
1638 /**
1639 * Return the type of exceptions caught by this catch clause, or {@code null} if this catch clause
1640 * catches every type of exception.
1641 * @return the type of exceptions caught by this catch clause
1642 */
1643 TypeName get exceptionType => _exceptionType;
1644 /**
1645 * Return the left parenthesis.
1646 * @return the left parenthesis
1647 */
1648 Token get leftParenthesis => _leftParenthesis;
1649 /**
1650 * Return the token representing the 'on' keyword, or {@code null} if there is no 'on' keyword.
1651 * @return the token representing the 'on' keyword
1652 */
1653 Token get onKeyword => _onKeyword;
1654 /**
1655 * Return the right parenthesis.
1656 * @return the right parenthesis
1657 */
1658 Token get rightParenthesis => _rightParenthesis;
1659 /**
1660 * Return the parameter whose value will be the stack trace associated with th e exception.
1661 * @return the parameter whose value will be the stack trace associated with t he exception
1662 */
1663 SimpleIdentifier get stackTraceParameter => _stackTraceParameter;
1664 /**
1665 * Set the body of the catch block to the given block.
1666 * @param block the body of the catch block
1667 */
1668 void set body(Block block) {
1669 _body = becomeParentOf(block);
1670 }
1671 /**
1672 * Set the token representing the 'catch' keyword to the given token.
1673 * @param catchKeyword the token representing the 'catch' keyword
1674 */
1675 void set catchKeyword(Token catchKeyword2) {
1676 this._catchKeyword = catchKeyword2;
1677 }
1678 /**
1679 * Set the comma to the given token.
1680 * @param comma the comma
1681 */
1682 void set comma(Token comma2) {
1683 this._comma = comma2;
1684 }
1685 /**
1686 * Set the parameter whose value will be the exception that was thrown to the given parameter.
1687 * @param parameter the parameter whose value will be the exception that was t hrown
1688 */
1689 void set exceptionParameter(SimpleIdentifier parameter) {
1690 _exceptionParameter = becomeParentOf(parameter);
1691 }
1692 /**
1693 * Set the type of exceptions caught by this catch clause to the given type.
1694 * @param exceptionType the type of exceptions caught by this catch clause
1695 */
1696 void set exceptionType(TypeName exceptionType2) {
1697 this._exceptionType = exceptionType2;
1698 }
1699 /**
1700 * Set the left parenthesis to the given token.
1701 * @param parenthesis the left parenthesis
1702 */
1703 void set leftParenthesis(Token parenthesis) {
1704 _leftParenthesis = parenthesis;
1705 }
1706 /**
1707 * Set the token representing the 'on' keyword to the given keyword.
1708 * @param onKeyword the token representing the 'on' keyword
1709 */
1710 void set onKeyword(Token onKeyword2) {
1711 this._onKeyword = onKeyword2;
1712 }
1713 /**
1714 * Set the right parenthesis to the given token.
1715 * @param parenthesis the right parenthesis
1716 */
1717 void set rightParenthesis(Token parenthesis) {
1718 _rightParenthesis = parenthesis;
1719 }
1720 /**
1721 * Set the parameter whose value will be the stack trace associated with the e xception to the
1722 * given parameter.
1723 * @param parameter the parameter whose value will be the stack trace associat ed with the
1724 * exception
1725 */
1726 void set stackTraceParameter(SimpleIdentifier parameter) {
1727 _stackTraceParameter = becomeParentOf(parameter);
1728 }
1729 void visitChildren(ASTVisitor<Object> visitor) {
1730 safelyVisitChild(_exceptionType, visitor);
1731 safelyVisitChild(_exceptionParameter, visitor);
1732 safelyVisitChild(_stackTraceParameter, visitor);
1733 safelyVisitChild(_body, visitor);
1734 }
1735 }
1736 /**
1737 * Instances of the class {@code ClassDeclaration} represent the declaration of a class.
1738 * <pre>
1739 * classDeclaration ::=
1740 * 'abstract'? 'class' {@link SimpleIdentifier name} {@link TypeParameterList ty peParameterList}?
1741 * ({@link ExtendsClause extendsClause} {@link WithClause withClause}?)?{@link I mplementsClause implementsClause}?
1742 * '{' {@link ClassMember classMember}* '}'
1743 * </pre>
1744 * @coverage dart.engine.ast
1745 */
1746 class ClassDeclaration extends CompilationUnitMember {
1747 /**
1748 * The 'abstract' keyword, or {@code null} if the keyword was absent.
1749 */
1750 Token _abstractKeyword;
1751 /**
1752 * The token representing the 'class' keyword.
1753 */
1754 Token _classKeyword;
1755 /**
1756 * The name of the class being declared.
1757 */
1758 SimpleIdentifier _name;
1759 /**
1760 * The type parameters for the class, or {@code null} if the class does not ha ve any type
1761 * parameters.
1762 */
1763 TypeParameterList _typeParameters;
1764 /**
1765 * The extends clause for the class, or {@code null} if the class does not ext end any other class.
1766 */
1767 ExtendsClause _extendsClause;
1768 /**
1769 * The with clause for the class, or {@code null} if the class does not have a with clause.
1770 */
1771 WithClause _withClause;
1772 /**
1773 * The implements clause for the class, or {@code null} if the class does not implement any
1774 * interfaces.
1775 */
1776 ImplementsClause _implementsClause;
1777 /**
1778 * The left curly bracket.
1779 */
1780 Token _leftBracket;
1781 /**
1782 * The members defined by the class.
1783 */
1784 NodeList<ClassMember> _members;
1785 /**
1786 * The right curly bracket.
1787 */
1788 Token _rightBracket;
1789 /**
1790 * Initialize a newly created class declaration.
1791 * @param comment the documentation comment associated with this class
1792 * @param metadata the annotations associated with this class
1793 * @param abstractKeyword the 'abstract' keyword, or {@code null} if the keywo rd was absent
1794 * @param classKeyword the token representing the 'class' keyword
1795 * @param name the name of the class being declared
1796 * @param typeParameters the type parameters for the class
1797 * @param extendsClause the extends clause for the class
1798 * @param withClause the with clause for the class
1799 * @param implementsClause the implements clause for the class
1800 * @param leftBracket the left curly bracket
1801 * @param members the members defined by the class
1802 * @param rightBracket the right curly bracket
1803 */
1804 ClassDeclaration.full(Comment comment, List<Annotation> metadata, Token abstra ctKeyword, Token classKeyword, SimpleIdentifier name, TypeParameterList typePara meters, ExtendsClause extendsClause, WithClause withClause, ImplementsClause imp lementsClause, Token leftBracket, List<ClassMember> members, Token rightBracket) : super.full(comment, metadata) {
1805 this._members = new NodeList<ClassMember>(this);
1806 this._abstractKeyword = abstractKeyword;
1807 this._classKeyword = classKeyword;
1808 this._name = becomeParentOf(name);
1809 this._typeParameters = becomeParentOf(typeParameters);
1810 this._extendsClause = becomeParentOf(extendsClause);
1811 this._withClause = becomeParentOf(withClause);
1812 this._implementsClause = becomeParentOf(implementsClause);
1813 this._leftBracket = leftBracket;
1814 this._members.addAll(members);
1815 this._rightBracket = rightBracket;
1816 }
1817 /**
1818 * Initialize a newly created class declaration.
1819 * @param comment the documentation comment associated with this class
1820 * @param metadata the annotations associated with this class
1821 * @param abstractKeyword the 'abstract' keyword, or {@code null} if the keywo rd was absent
1822 * @param classKeyword the token representing the 'class' keyword
1823 * @param name the name of the class being declared
1824 * @param typeParameters the type parameters for the class
1825 * @param extendsClause the extends clause for the class
1826 * @param withClause the with clause for the class
1827 * @param implementsClause the implements clause for the class
1828 * @param leftBracket the left curly bracket
1829 * @param members the members defined by the class
1830 * @param rightBracket the right curly bracket
1831 */
1832 ClassDeclaration({Comment comment, List<Annotation> metadata, Token abstractKe yword, Token classKeyword, SimpleIdentifier name, TypeParameterList typeParamete rs, ExtendsClause extendsClause, WithClause withClause, ImplementsClause impleme ntsClause, Token leftBracket, List<ClassMember> members, Token rightBracket}) : this.full(comment, metadata, abstractKeyword, classKeyword, name, typeParameters , extendsClause, withClause, implementsClause, leftBracket, members, rightBracke t);
1833 accept(ASTVisitor visitor) => visitor.visitClassDeclaration(this);
1834 /**
1835 * Return the 'abstract' keyword, or {@code null} if the keyword was absent.
1836 * @return the 'abstract' keyword
1837 */
1838 Token get abstractKeyword => _abstractKeyword;
1839 /**
1840 * Return the token representing the 'class' keyword.
1841 * @return the token representing the 'class' keyword
1842 */
1843 Token get classKeyword => _classKeyword;
1844 ClassElement get element => _name != null ? (_name.element as ClassElement) : null;
1845 Token get endToken => _rightBracket;
1846 /**
1847 * Return the extends clause for this class, or {@code null} if the class does not extend any
1848 * other class.
1849 * @return the extends clause for this class
1850 */
1851 ExtendsClause get extendsClause => _extendsClause;
1852 /**
1853 * Return the implements clause for the class, or {@code null} if the class do es not implement any
1854 * interfaces.
1855 * @return the implements clause for the class
1856 */
1857 ImplementsClause get implementsClause => _implementsClause;
1858 /**
1859 * Return the left curly bracket.
1860 * @return the left curly bracket
1861 */
1862 Token get leftBracket => _leftBracket;
1863 /**
1864 * Return the members defined by the class.
1865 * @return the members defined by the class
1866 */
1867 NodeList<ClassMember> get members => _members;
1868 /**
1869 * Return the name of the class being declared.
1870 * @return the name of the class being declared
1871 */
1872 SimpleIdentifier get name => _name;
1873 /**
1874 * Return the right curly bracket.
1875 * @return the right curly bracket
1876 */
1877 Token get rightBracket => _rightBracket;
1878 /**
1879 * Return the type parameters for the class, or {@code null} if the class does not have any type
1880 * parameters.
1881 * @return the type parameters for the class
1882 */
1883 TypeParameterList get typeParameters => _typeParameters;
1884 /**
1885 * Return the with clause for the class, or {@code null} if the class does not have a with clause.
1886 * @return the with clause for the class
1887 */
1888 WithClause get withClause => _withClause;
1889 /**
1890 * Set the 'abstract' keyword to the given keyword.
1891 * @param abstractKeyword the 'abstract' keyword
1892 */
1893 void set abstractKeyword(Token abstractKeyword2) {
1894 this._abstractKeyword = abstractKeyword2;
1895 }
1896 /**
1897 * Set the token representing the 'class' keyword to the given token.
1898 * @param classKeyword the token representing the 'class' keyword
1899 */
1900 void set classKeyword(Token classKeyword2) {
1901 this._classKeyword = classKeyword2;
1902 }
1903 /**
1904 * Set the extends clause for this class to the given clause.
1905 * @param extendsClause the extends clause for this class
1906 */
1907 void set extendsClause(ExtendsClause extendsClause3) {
1908 this._extendsClause = becomeParentOf(extendsClause3);
1909 }
1910 /**
1911 * Set the implements clause for the class to the given clause.
1912 * @param implementsClause the implements clause for the class
1913 */
1914 void set implementsClause(ImplementsClause implementsClause4) {
1915 this._implementsClause = becomeParentOf(implementsClause4);
1916 }
1917 /**
1918 * Set the left curly bracket to the given token.
1919 * @param leftBracket the left curly bracket
1920 */
1921 void set leftBracket(Token leftBracket3) {
1922 this._leftBracket = leftBracket3;
1923 }
1924 /**
1925 * Set the name of the class being declared to the given identifier.
1926 * @param identifier the name of the class being declared
1927 */
1928 void set name(SimpleIdentifier identifier) {
1929 _name = becomeParentOf(identifier);
1930 }
1931 /**
1932 * Set the right curly bracket to the given token.
1933 * @param rightBracket the right curly bracket
1934 */
1935 void set rightBracket(Token rightBracket3) {
1936 this._rightBracket = rightBracket3;
1937 }
1938 /**
1939 * Set the type parameters for the class to the given list of type parameters.
1940 * @param typeParameters the type parameters for the class
1941 */
1942 void set typeParameters(TypeParameterList typeParameters2) {
1943 this._typeParameters = typeParameters2;
1944 }
1945 /**
1946 * Set the with clause for the class to the given clause.
1947 * @param withClause the with clause for the class
1948 */
1949 void set withClause(WithClause withClause4) {
1950 this._withClause = becomeParentOf(withClause4);
1951 }
1952 void visitChildren(ASTVisitor<Object> visitor) {
1953 safelyVisitChild(documentationComment, visitor);
1954 safelyVisitChild(_name, visitor);
1955 safelyVisitChild(_typeParameters, visitor);
1956 safelyVisitChild(_extendsClause, visitor);
1957 safelyVisitChild(_withClause, visitor);
1958 safelyVisitChild(_implementsClause, visitor);
1959 members.accept(visitor);
1960 }
1961 Token get firstTokenAfterCommentAndMetadata {
1962 if (_abstractKeyword != null) {
1963 return _abstractKeyword;
1964 }
1965 return _classKeyword;
1966 }
1967 }
1968 /**
1969 * The abstract class {@code ClassMember} defines the behavior common to nodes t hat declare a name
1970 * within the scope of a class.
1971 * @coverage dart.engine.ast
1972 */
1973 abstract class ClassMember extends Declaration {
1974 /**
1975 * Initialize a newly created member of a class.
1976 * @param comment the documentation comment associated with this member
1977 * @param metadata the annotations associated with this member
1978 */
1979 ClassMember.full(Comment comment, List<Annotation> metadata) : super.full(comm ent, metadata) {
1980 }
1981 /**
1982 * Initialize a newly created member of a class.
1983 * @param comment the documentation comment associated with this member
1984 * @param metadata the annotations associated with this member
1985 */
1986 ClassMember({Comment comment, List<Annotation> metadata}) : this.full(comment, metadata);
1987 }
1988 /**
1989 * Instances of the class {@code ClassTypeAlias} represent a class type alias.
1990 * <pre>
1991 * classTypeAlias ::={@link SimpleIdentifier identifier} {@link TypeParameterLis t typeParameters}? '=' 'abstract'? mixinApplication
1992 * mixinApplication ::={@link TypeName superclass} {@link WithClause withClause} {@link ImplementsClause implementsClause}? ';'
1993 * </pre>
1994 * @coverage dart.engine.ast
1995 */
1996 class ClassTypeAlias extends TypeAlias {
1997 /**
1998 * The name of the class being declared.
1999 */
2000 SimpleIdentifier _name;
2001 /**
2002 * The type parameters for the class, or {@code null} if the class does not ha ve any type
2003 * parameters.
2004 */
2005 TypeParameterList _typeParameters;
2006 /**
2007 * The token for the '=' separating the name from the definition.
2008 */
2009 Token _equals;
2010 /**
2011 * The token for the 'abstract' keyword, or {@code null} if this is not defini ng an abstract
2012 * class.
2013 */
2014 Token _abstractKeyword;
2015 /**
2016 * The name of the superclass of the class being declared.
2017 */
2018 TypeName _superclass;
2019 /**
2020 * The with clause for this class.
2021 */
2022 WithClause _withClause;
2023 /**
2024 * The implements clause for this class, or {@code null} if there is no implem ents clause.
2025 */
2026 ImplementsClause _implementsClause;
2027 /**
2028 * Initialize a newly created class type alias.
2029 * @param comment the documentation comment associated with this type alias
2030 * @param metadata the annotations associated with this type alias
2031 * @param keyword the token representing the 'typedef' keyword
2032 * @param name the name of the class being declared
2033 * @param typeParameters the type parameters for the class
2034 * @param equals the token for the '=' separating the name from the definition
2035 * @param abstractKeyword the token for the 'abstract' keyword
2036 * @param superclass the name of the superclass of the class being declared
2037 * @param withClause the with clause for this class
2038 * @param implementsClause the implements clause for this class
2039 * @param semicolon the semicolon terminating the declaration
2040 */
2041 ClassTypeAlias.full(Comment comment, List<Annotation> metadata, Token keyword, SimpleIdentifier name, TypeParameterList typeParameters, Token equals, Token ab stractKeyword, TypeName superclass, WithClause withClause, ImplementsClause impl ementsClause, Token semicolon) : super.full(comment, metadata, keyword, semicolo n) {
2042 this._name = becomeParentOf(name);
2043 this._typeParameters = becomeParentOf(typeParameters);
2044 this._equals = equals;
2045 this._abstractKeyword = abstractKeyword;
2046 this._superclass = becomeParentOf(superclass);
2047 this._withClause = becomeParentOf(withClause);
2048 this._implementsClause = becomeParentOf(implementsClause);
2049 }
2050 /**
2051 * Initialize a newly created class type alias.
2052 * @param comment the documentation comment associated with this type alias
2053 * @param metadata the annotations associated with this type alias
2054 * @param keyword the token representing the 'typedef' keyword
2055 * @param name the name of the class being declared
2056 * @param typeParameters the type parameters for the class
2057 * @param equals the token for the '=' separating the name from the definition
2058 * @param abstractKeyword the token for the 'abstract' keyword
2059 * @param superclass the name of the superclass of the class being declared
2060 * @param withClause the with clause for this class
2061 * @param implementsClause the implements clause for this class
2062 * @param semicolon the semicolon terminating the declaration
2063 */
2064 ClassTypeAlias({Comment comment, List<Annotation> metadata, Token keyword, Sim pleIdentifier name, TypeParameterList typeParameters, Token equals, Token abstra ctKeyword, TypeName superclass, WithClause withClause, ImplementsClause implemen tsClause, Token semicolon}) : this.full(comment, metadata, keyword, name, typePa rameters, equals, abstractKeyword, superclass, withClause, implementsClause, sem icolon);
2065 accept(ASTVisitor visitor) => visitor.visitClassTypeAlias(this);
2066 /**
2067 * Return the token for the 'abstract' keyword, or {@code null} if this is not defining an
2068 * abstract class.
2069 * @return the token for the 'abstract' keyword
2070 */
2071 Token get abstractKeyword => _abstractKeyword;
2072 ClassElement get element => _name != null ? (_name.element as ClassElement) : null;
2073 /**
2074 * Return the token for the '=' separating the name from the definition.
2075 * @return the token for the '=' separating the name from the definition
2076 */
2077 Token get equals => _equals;
2078 /**
2079 * Return the implements clause for this class, or {@code null} if there is no implements clause.
2080 * @return the implements clause for this class
2081 */
2082 ImplementsClause get implementsClause => _implementsClause;
2083 /**
2084 * Return the name of the class being declared.
2085 * @return the name of the class being declared
2086 */
2087 SimpleIdentifier get name => _name;
2088 /**
2089 * Return the name of the superclass of the class being declared.
2090 * @return the name of the superclass of the class being declared
2091 */
2092 TypeName get superclass => _superclass;
2093 /**
2094 * Return the type parameters for the class, or {@code null} if the class does not have any type
2095 * parameters.
2096 * @return the type parameters for the class
2097 */
2098 TypeParameterList get typeParameters => _typeParameters;
2099 /**
2100 * Return the with clause for this class.
2101 * @return the with clause for this class
2102 */
2103 WithClause get withClause => _withClause;
2104 /**
2105 * Set the token for the 'abstract' keyword to the given token.
2106 * @param abstractKeyword the token for the 'abstract' keyword
2107 */
2108 void set abstractKeyword(Token abstractKeyword3) {
2109 this._abstractKeyword = abstractKeyword3;
2110 }
2111 /**
2112 * Set the token for the '=' separating the name from the definition to the gi ven token.
2113 * @param equals the token for the '=' separating the name from the definition
2114 */
2115 void set equals(Token equals4) {
2116 this._equals = equals4;
2117 }
2118 /**
2119 * Set the implements clause for this class to the given implements clause.
2120 * @param implementsClause the implements clause for this class
2121 */
2122 void set implementsClause(ImplementsClause implementsClause5) {
2123 this._implementsClause = becomeParentOf(implementsClause5);
2124 }
2125 /**
2126 * Set the name of the class being declared to the given identifier.
2127 * @param name the name of the class being declared
2128 */
2129 void set name(SimpleIdentifier name3) {
2130 this._name = becomeParentOf(name3);
2131 }
2132 /**
2133 * Set the name of the superclass of the class being declared to the given nam e.
2134 * @param superclass the name of the superclass of the class being declared
2135 */
2136 void set superclass(TypeName superclass2) {
2137 this._superclass = becomeParentOf(superclass2);
2138 }
2139 /**
2140 * Set the type parameters for the class to the given list of parameters.
2141 * @param typeParameters the type parameters for the class
2142 */
2143 void set typeParameters(TypeParameterList typeParameters3) {
2144 this._typeParameters = becomeParentOf(typeParameters3);
2145 }
2146 /**
2147 * Set the with clause for this class to the given with clause.
2148 * @param withClause the with clause for this class
2149 */
2150 void set withClause(WithClause withClause5) {
2151 this._withClause = becomeParentOf(withClause5);
2152 }
2153 void visitChildren(ASTVisitor<Object> visitor) {
2154 super.visitChildren(visitor);
2155 safelyVisitChild(_name, visitor);
2156 safelyVisitChild(_typeParameters, visitor);
2157 safelyVisitChild(_superclass, visitor);
2158 safelyVisitChild(_withClause, visitor);
2159 safelyVisitChild(_implementsClause, visitor);
2160 }
2161 }
2162 /**
2163 * Instances of the class {@code Combinator} represent the combinator associated with an import
2164 * directive.
2165 * <pre>
2166 * combinator ::={@link HideCombinator hideCombinator}| {@link ShowCombinator sh owCombinator}</pre>
2167 * @coverage dart.engine.ast
2168 */
2169 abstract class Combinator extends ASTNode {
2170 /**
2171 * The keyword specifying what kind of processing is to be done on the importe d names.
2172 */
2173 Token _keyword;
2174 /**
2175 * Initialize a newly created import combinator.
2176 * @param keyword the keyword specifying what kind of processing is to be done on the imported
2177 * names
2178 */
2179 Combinator.full(Token keyword) {
2180 this._keyword = keyword;
2181 }
2182 /**
2183 * Initialize a newly created import combinator.
2184 * @param keyword the keyword specifying what kind of processing is to be done on the imported
2185 * names
2186 */
2187 Combinator({Token keyword}) : this.full(keyword);
2188 Token get beginToken => _keyword;
2189 /**
2190 * Return the keyword specifying what kind of processing is to be done on the imported names.
2191 * @return the keyword specifying what kind of processing is to be done on the imported names
2192 */
2193 Token get keyword => _keyword;
2194 /**
2195 * Set the keyword specifying what kind of processing is to be done on the imp orted names to the
2196 * given token.
2197 * @param keyword the keyword specifying what kind of processing is to be done on the imported
2198 * names
2199 */
2200 void set keyword(Token keyword5) {
2201 this._keyword = keyword5;
2202 }
2203 }
2204 /**
2205 * Instances of the class {@code Comment} represent a comment within the source code.
2206 * <pre>
2207 * comment ::=
2208 * endOfLineComment
2209 * | blockComment
2210 * | documentationComment
2211 * endOfLineComment ::=
2212 * '//' (CHARACTER - EOL)* EOL
2213 * blockComment ::=
2214 * '/ *' CHARACTER* '&#42;/'
2215 * documentationComment ::=
2216 * '/ **' (CHARACTER | {@link CommentReference commentReference})* '&#42;/'
2217 * | ('///' (CHARACTER - EOL)* EOL)+
2218 * </pre>
2219 * @coverage dart.engine.ast
2220 */
2221 class Comment extends ASTNode {
2222 /**
2223 * Create a block comment.
2224 * @param tokens the tokens representing the comment
2225 * @return the block comment that was created
2226 */
2227 static Comment createBlockComment(List<Token> tokens) => new Comment.full(toke ns, CommentType.BLOCK, null);
2228 /**
2229 * Create a documentation comment.
2230 * @param tokens the tokens representing the comment
2231 * @return the documentation comment that was created
2232 */
2233 static Comment createDocumentationComment(List<Token> tokens) => new Comment.f ull(tokens, CommentType.DOCUMENTATION, new List<CommentReference>());
2234 /**
2235 * Create a documentation comment.
2236 * @param tokens the tokens representing the comment
2237 * @param references the references embedded within the documentation comment
2238 * @return the documentation comment that was created
2239 */
2240 static Comment createDocumentationComment2(List<Token> tokens, List<CommentRef erence> references) => new Comment.full(tokens, CommentType.DOCUMENTATION, refer ences);
2241 /**
2242 * Create an end-of-line comment.
2243 * @param tokens the tokens representing the comment
2244 * @return the end-of-line comment that was created
2245 */
2246 static Comment createEndOfLineComment(List<Token> tokens) => new Comment.full( tokens, CommentType.END_OF_LINE, null);
2247 /**
2248 * The tokens representing the comment.
2249 */
2250 List<Token> _tokens;
2251 /**
2252 * The type of the comment.
2253 */
2254 CommentType _type;
2255 /**
2256 * The references embedded within the documentation comment. This list will be empty unless this
2257 * is a documentation comment that has references embedded within it.
2258 */
2259 NodeList<CommentReference> _references;
2260 /**
2261 * Initialize a newly created comment.
2262 * @param tokens the tokens representing the comment
2263 * @param type the type of the comment
2264 * @param references the references embedded within the documentation comment
2265 */
2266 Comment.full(List<Token> tokens, CommentType type, List<CommentReference> refe rences) {
2267 this._references = new NodeList<CommentReference>(this);
2268 this._tokens = tokens;
2269 this._type = type;
2270 this._references.addAll(references);
2271 }
2272 /**
2273 * Initialize a newly created comment.
2274 * @param tokens the tokens representing the comment
2275 * @param type the type of the comment
2276 * @param references the references embedded within the documentation comment
2277 */
2278 Comment({List<Token> tokens, CommentType type, List<CommentReference> referenc es}) : this.full(tokens, type, references);
2279 accept(ASTVisitor visitor) => visitor.visitComment(this);
2280 Token get beginToken => _tokens[0];
2281 Token get endToken => _tokens[_tokens.length - 1];
2282 /**
2283 * Return the references embedded within the documentation comment.
2284 * @return the references embedded within the documentation comment
2285 */
2286 NodeList<CommentReference> get references => _references;
2287 /**
2288 * Return {@code true} if this is a block comment.
2289 * @return {@code true} if this is a block comment
2290 */
2291 bool isBlock() => identical(_type, CommentType.BLOCK);
2292 /**
2293 * Return {@code true} if this is a documentation comment.
2294 * @return {@code true} if this is a documentation comment
2295 */
2296 bool isDocumentation() => identical(_type, CommentType.DOCUMENTATION);
2297 /**
2298 * Return {@code true} if this is an end-of-line comment.
2299 * @return {@code true} if this is an end-of-line comment
2300 */
2301 bool isEndOfLine() => identical(_type, CommentType.END_OF_LINE);
2302 void visitChildren(ASTVisitor<Object> visitor) {
2303 _references.accept(visitor);
2304 }
2305 }
2306 /**
2307 * The enumeration {@code CommentType} encodes all the different types of commen ts that are
2308 * recognized by the parser.
2309 */
2310 class CommentType {
2311 /**
2312 * An end-of-line comment.
2313 */
2314 static final CommentType END_OF_LINE = new CommentType('END_OF_LINE', 0);
2315 /**
2316 * A block comment.
2317 */
2318 static final CommentType BLOCK = new CommentType('BLOCK', 1);
2319 /**
2320 * A documentation comment.
2321 */
2322 static final CommentType DOCUMENTATION = new CommentType('DOCUMENTATION', 2);
2323 static final List<CommentType> values = [END_OF_LINE, BLOCK, DOCUMENTATION];
2324 final String __name;
2325 final int __ordinal;
2326 int get ordinal => __ordinal;
2327 CommentType(this.__name, this.__ordinal) {
2328 }
2329 String toString() => __name;
2330 }
2331 /**
2332 * Instances of the class {@code CommentReference} represent a reference to a Da rt element that is
2333 * found within a documentation comment.
2334 * <pre>
2335 * commentReference ::=
2336 * '[' 'new'? {@link Identifier identifier} ']'
2337 * </pre>
2338 * @coverage dart.engine.ast
2339 */
2340 class CommentReference extends ASTNode {
2341 /**
2342 * The token representing the 'new' keyword, or {@code null} if there was no ' new' keyword.
2343 */
2344 Token _newKeyword;
2345 /**
2346 * The identifier being referenced.
2347 */
2348 Identifier _identifier;
2349 /**
2350 * Initialize a newly created reference to a Dart element.
2351 * @param newKeyword the token representing the 'new' keyword
2352 * @param identifier the identifier being referenced
2353 */
2354 CommentReference.full(Token newKeyword, Identifier identifier) {
2355 this._newKeyword = newKeyword;
2356 this._identifier = becomeParentOf(identifier);
2357 }
2358 /**
2359 * Initialize a newly created reference to a Dart element.
2360 * @param newKeyword the token representing the 'new' keyword
2361 * @param identifier the identifier being referenced
2362 */
2363 CommentReference({Token newKeyword, Identifier identifier}) : this.full(newKey word, identifier);
2364 accept(ASTVisitor visitor) => visitor.visitCommentReference(this);
2365 Token get beginToken => _identifier.beginToken;
2366 Token get endToken => _identifier.endToken;
2367 /**
2368 * Return the identifier being referenced.
2369 * @return the identifier being referenced
2370 */
2371 Identifier get identifier => _identifier;
2372 /**
2373 * Return the token representing the 'new' keyword, or {@code null} if there w as no 'new' keyword.
2374 * @return the token representing the 'new' keyword
2375 */
2376 Token get newKeyword => _newKeyword;
2377 /**
2378 * Set the identifier being referenced to the given identifier.
2379 * @param identifier the identifier being referenced
2380 */
2381 void set identifier(Identifier identifier24) {
2382 identifier24 = becomeParentOf(identifier24);
2383 }
2384 /**
2385 * Set the token representing the 'new' keyword to the given token.
2386 * @param newKeyword the token representing the 'new' keyword
2387 */
2388 void set newKeyword(Token newKeyword2) {
2389 this._newKeyword = newKeyword2;
2390 }
2391 void visitChildren(ASTVisitor<Object> visitor) {
2392 safelyVisitChild(_identifier, visitor);
2393 }
2394 }
2395 /**
2396 * Instances of the class {@code CompilationUnit} represent a compilation unit.
2397 * <p>
2398 * While the grammar restricts the order of the directives and declarations with in a compilation
2399 * unit, this class does not enforce those restrictions. In particular, the chil dren of a
2400 * compilation unit will be visited in lexical order even if lexical order does not conform to the
2401 * restrictions of the grammar.
2402 * <pre>
2403 * compilationUnit ::=
2404 * directives declarations
2405 * directives ::={@link ScriptTag scriptTag}? {@link LibraryDirective libraryDir ective}? namespaceDirective* {@link PartDirective partDirective}| {@link PartOfD irective partOfDirective}namespaceDirective ::={@link ImportDirective importDire ctive}| {@link ExportDirective exportDirective}declarations ::={@link Compilatio nUnitMember compilationUnitMember}</pre>
2406 * @coverage dart.engine.ast
2407 */
2408 class CompilationUnit extends ASTNode {
2409 /**
2410 * The first token in the token stream that was parsed to form this compilatio n unit.
2411 */
2412 Token _beginToken;
2413 /**
2414 * The script tag at the beginning of the compilation unit, or {@code null} if there is no script
2415 * tag in this compilation unit.
2416 */
2417 ScriptTag _scriptTag;
2418 /**
2419 * The directives contained in this compilation unit.
2420 */
2421 NodeList<Directive> _directives;
2422 /**
2423 * The declarations contained in this compilation unit.
2424 */
2425 NodeList<CompilationUnitMember> _declarations;
2426 /**
2427 * The last token in the token stream that was parsed to form this compilation unit. This token
2428 * should always have a type of {@link TokenType.EOF}.
2429 */
2430 Token _endToken;
2431 /**
2432 * The element associated with this compilation unit, or {@code null} if the A ST structure has not
2433 * been resolved.
2434 */
2435 CompilationUnitElement _element;
2436 /**
2437 * The {@link LineInfo} for this {@link CompilationUnit}.
2438 */
2439 LineInfo _lineInfo;
2440 /**
2441 * The parsing errors encountered when the receiver was parsed.
2442 */
2443 List<AnalysisError> _parsingErrors = AnalysisError.NO_ERRORS;
2444 /**
2445 * The resolution errors encountered when the receiver was resolved.
2446 */
2447 List<AnalysisError> _resolutionErrors = AnalysisError.NO_ERRORS;
2448 /**
2449 * Initialize a newly created compilation unit to have the given directives an d declarations.
2450 * @param beginToken the first token in the token stream
2451 * @param scriptTag the script tag at the beginning of the compilation unit
2452 * @param directives the directives contained in this compilation unit
2453 * @param declarations the declarations contained in this compilation unit
2454 * @param endToken the last token in the token stream
2455 */
2456 CompilationUnit.full(Token beginToken, ScriptTag scriptTag, List<Directive> di rectives, List<CompilationUnitMember> declarations, Token endToken) {
2457 this._directives = new NodeList<Directive>(this);
2458 this._declarations = new NodeList<CompilationUnitMember>(this);
2459 this._beginToken = beginToken;
2460 this._scriptTag = becomeParentOf(scriptTag);
2461 this._directives.addAll(directives);
2462 this._declarations.addAll(declarations);
2463 this._endToken = endToken;
2464 }
2465 /**
2466 * Initialize a newly created compilation unit to have the given directives an d declarations.
2467 * @param beginToken the first token in the token stream
2468 * @param scriptTag the script tag at the beginning of the compilation unit
2469 * @param directives the directives contained in this compilation unit
2470 * @param declarations the declarations contained in this compilation unit
2471 * @param endToken the last token in the token stream
2472 */
2473 CompilationUnit({Token beginToken, ScriptTag scriptTag, List<Directive> direct ives, List<CompilationUnitMember> declarations, Token endToken}) : this.full(beg inToken, scriptTag, directives, declarations, endToken);
2474 accept(ASTVisitor visitor) => visitor.visitCompilationUnit(this);
2475 Token get beginToken => _beginToken;
2476 /**
2477 * Return the declarations contained in this compilation unit.
2478 * @return the declarations contained in this compilation unit
2479 */
2480 NodeList<CompilationUnitMember> get declarations => _declarations;
2481 /**
2482 * Return the directives contained in this compilation unit.
2483 * @return the directives contained in this compilation unit
2484 */
2485 NodeList<Directive> get directives => _directives;
2486 /**
2487 * Return the element associated with this compilation unit, or {@code null} i f the AST structure
2488 * has not been resolved.
2489 * @return the element associated with this compilation unit
2490 */
2491 CompilationUnitElement get element => _element;
2492 Token get endToken => _endToken;
2493 /**
2494 * Return an array containing all of the errors associated with the receiver. If the receiver has
2495 * not been resolved, then return {@code null}.
2496 * @return an array of errors (contains no {@code null}s) or {@code null} if t he receiver has not
2497 * been resolved
2498 */
2499 List<AnalysisError> get errors {
2500 List<AnalysisError> parserErrors = parsingErrors;
2501 List<AnalysisError> resolverErrors = resolutionErrors;
2502 if (resolverErrors.length == 0) {
2503 return parserErrors;
2504 } else if (parserErrors.length == 0) {
2505 return resolverErrors;
2506 } else {
2507 List<AnalysisError> allErrors = new List<AnalysisError>(parserErrors.lengt h + resolverErrors.length);
2508 JavaSystem.arraycopy(parserErrors, 0, allErrors, 0, parserErrors.length);
2509 JavaSystem.arraycopy(resolverErrors, 0, allErrors, parserErrors.length, re solverErrors.length);
2510 return allErrors;
2511 }
2512 }
2513 int get length {
2514 Token endToken3 = endToken;
2515 if (endToken3 == null) {
2516 return 0;
2517 }
2518 return endToken3.offset + endToken3.length;
2519 }
2520 /**
2521 * Get the {@link LineInfo} object for this compilation unit.
2522 * @return the associated {@link LineInfo}
2523 */
2524 LineInfo get lineInfo => _lineInfo;
2525 int get offset => 0;
2526 /**
2527 * Return an array containing all of the parsing errors associated with the re ceiver.
2528 * @return an array of errors (not {@code null}, contains no {@code null}s).
2529 */
2530 List<AnalysisError> get parsingErrors => _parsingErrors;
2531 /**
2532 * Return an array containing all of the resolution errors associated with the receiver. If the
2533 * receiver has not been resolved, then return {@code null}.
2534 * @return an array of errors (contains no {@code null}s) or {@code null} if t he receiver has not
2535 * been resolved
2536 */
2537 List<AnalysisError> get resolutionErrors => _resolutionErrors;
2538 /**
2539 * Return the script tag at the beginning of the compilation unit, or {@code n ull} if there is no
2540 * script tag in this compilation unit.
2541 * @return the script tag at the beginning of the compilation unit
2542 */
2543 ScriptTag get scriptTag => _scriptTag;
2544 /**
2545 * Set the element associated with this compilation unit to the given element.
2546 * @param element the element associated with this compilation unit
2547 */
2548 void set element(CompilationUnitElement element5) {
2549 this._element = element5;
2550 }
2551 /**
2552 * Set the {@link LineInfo} object for this compilation unit.
2553 * @param errors LineInfo to associate with this compilation unit
2554 */
2555 void set lineInfo(LineInfo lineInfo2) {
2556 this._lineInfo = lineInfo2;
2557 }
2558 /**
2559 * Called to cache the parsing errors when the unit is parsed.
2560 * @param errors an array of parsing errors, if <code>null</code> is passed, t he error array is
2561 * set to an empty array, {@link AnalysisError#NO_ERRORS}
2562 */
2563 void set parsingErrors(List<AnalysisError> errors) {
2564 _parsingErrors = errors == null ? AnalysisError.NO_ERRORS : errors;
2565 }
2566 /**
2567 * Called to cache the resolution errors when the unit is resolved.
2568 * @param errors an array of resolution errors, if <code>null</code> is passed , the error array is
2569 * set to an empty array, {@link AnalysisError#NO_ERRORS}
2570 */
2571 void set resolutionErrors(List<AnalysisError> errors) {
2572 _resolutionErrors = errors == null ? AnalysisError.NO_ERRORS : errors;
2573 }
2574 /**
2575 * Set the script tag at the beginning of the compilation unit to the given sc ript tag.
2576 * @param scriptTag the script tag at the beginning of the compilation unit
2577 */
2578 void set scriptTag(ScriptTag scriptTag2) {
2579 this._scriptTag = becomeParentOf(scriptTag2);
2580 }
2581 void visitChildren(ASTVisitor<Object> visitor) {
2582 safelyVisitChild(_scriptTag, visitor);
2583 if (directivesAreBeforeDeclarations()) {
2584 _directives.accept(visitor);
2585 _declarations.accept(visitor);
2586 } else {
2587 for (ASTNode child in sortedDirectivesAndDeclarations) {
2588 child.accept(visitor);
2589 }
2590 }
2591 }
2592 /**
2593 * Return {@code true} if all of the directives are lexically before any decla rations.
2594 * @return {@code true} if all of the directives are lexically before any decl arations
2595 */
2596 bool directivesAreBeforeDeclarations() {
2597 if (_directives.isEmpty || _declarations.isEmpty) {
2598 return true;
2599 }
2600 Directive lastDirective = _directives[_directives.length - 1];
2601 CompilationUnitMember firstDeclaration = _declarations[0];
2602 return lastDirective.offset < firstDeclaration.offset;
2603 }
2604 /**
2605 * Return an array containing all of the directives and declarations in this c ompilation unit,
2606 * sorted in lexical order.
2607 * @return the directives and declarations in this compilation unit in the ord er in which they
2608 * appeared in the original source
2609 */
2610 List<ASTNode> get sortedDirectivesAndDeclarations {
2611 List<ASTNode> childList = new List<ASTNode>();
2612 childList.addAll(_directives);
2613 childList.addAll(_declarations);
2614 List<ASTNode> children = new List.from(childList);
2615 children.sort();
2616 return children;
2617 }
2618 }
2619 /**
2620 * Instances of the class {@code CompilationUnitMember} defines the behavior com mon to nodes that
2621 * declare a name within the scope of a compilation unit.
2622 * <pre>
2623 * compilationUnitMember ::={@link ClassDeclaration classDeclaration}| {@link Ty peAlias typeAlias}| {@link FunctionDeclaration functionDeclaration}| {@link Meth odDeclaration getOrSetDeclaration}| {@link VariableDeclaration constantsDeclarat ion}| {@link VariableDeclaration variablesDeclaration}</pre>
2624 * @coverage dart.engine.ast
2625 */
2626 abstract class CompilationUnitMember extends Declaration {
2627 /**
2628 * Initialize a newly created generic compilation unit member.
2629 * @param comment the documentation comment associated with this member
2630 * @param metadata the annotations associated with this member
2631 */
2632 CompilationUnitMember.full(Comment comment, List<Annotation> metadata) : super .full(comment, metadata) {
2633 }
2634 /**
2635 * Initialize a newly created generic compilation unit member.
2636 * @param comment the documentation comment associated with this member
2637 * @param metadata the annotations associated with this member
2638 */
2639 CompilationUnitMember({Comment comment, List<Annotation> metadata}) : this.ful l(comment, metadata);
2640 }
2641 /**
2642 * Instances of the class {@code ConditionalExpression} represent a conditional expression.
2643 * <pre>
2644 * conditionalExpression ::={@link Expression condition} '?' {@link Expression t henExpression} ':' {@link Expression elseExpression}</pre>
2645 * @coverage dart.engine.ast
2646 */
2647 class ConditionalExpression extends Expression {
2648 /**
2649 * The condition used to determine which of the expressions is executed next.
2650 */
2651 Expression _condition;
2652 /**
2653 * The token used to separate the condition from the then expression.
2654 */
2655 Token _question;
2656 /**
2657 * The expression that is executed if the condition evaluates to {@code true}.
2658 */
2659 Expression _thenExpression;
2660 /**
2661 * The token used to separate the then expression from the else expression.
2662 */
2663 Token _colon;
2664 /**
2665 * The expression that is executed if the condition evaluates to {@code false} .
2666 */
2667 Expression _elseExpression;
2668 /**
2669 * Initialize a newly created conditional expression.
2670 * @param condition the condition used to determine which expression is execut ed next
2671 * @param question the token used to separate the condition from the then expr ession
2672 * @param thenExpression the expression that is executed if the condition eval uates to{@code true}
2673 * @param colon the token used to separate the then expression from the else e xpression
2674 * @param elseExpression the expression that is executed if the condition eval uates to{@code false}
2675 */
2676 ConditionalExpression.full(Expression condition, Token question, Expression th enExpression, Token colon, Expression elseExpression) {
2677 this._condition = becomeParentOf(condition);
2678 this._question = question;
2679 this._thenExpression = becomeParentOf(thenExpression);
2680 this._colon = colon;
2681 this._elseExpression = becomeParentOf(elseExpression);
2682 }
2683 /**
2684 * Initialize a newly created conditional expression.
2685 * @param condition the condition used to determine which expression is execut ed next
2686 * @param question the token used to separate the condition from the then expr ession
2687 * @param thenExpression the expression that is executed if the condition eval uates to{@code true}
2688 * @param colon the token used to separate the then expression from the else e xpression
2689 * @param elseExpression the expression that is executed if the condition eval uates to{@code false}
2690 */
2691 ConditionalExpression({Expression condition, Token question, Expression thenEx pression, Token colon, Expression elseExpression}) : this.full(condition, questi on, thenExpression, colon, elseExpression);
2692 accept(ASTVisitor visitor) => visitor.visitConditionalExpression(this);
2693 Token get beginToken => _condition.beginToken;
2694 /**
2695 * Return the token used to separate the then expression from the else express ion.
2696 * @return the token used to separate the then expression from the else expres sion
2697 */
2698 Token get colon => _colon;
2699 /**
2700 * Return the condition used to determine which of the expressions is executed next.
2701 * @return the condition used to determine which expression is executed next
2702 */
2703 Expression get condition => _condition;
2704 /**
2705 * Return the expression that is executed if the condition evaluates to {@code false}.
2706 * @return the expression that is executed if the condition evaluates to {@cod e false}
2707 */
2708 Expression get elseExpression => _elseExpression;
2709 Token get endToken => _elseExpression.endToken;
2710 /**
2711 * Return the token used to separate the condition from the then expression.
2712 * @return the token used to separate the condition from the then expression
2713 */
2714 Token get question => _question;
2715 /**
2716 * Return the expression that is executed if the condition evaluates to {@code true}.
2717 * @return the expression that is executed if the condition evaluates to {@cod e true}
2718 */
2719 Expression get thenExpression => _thenExpression;
2720 /**
2721 * Set the token used to separate the then expression from the else expression to the given token.
2722 * @param colon the token used to separate the then expression from the else e xpression
2723 */
2724 void set colon(Token colon2) {
2725 this._colon = colon2;
2726 }
2727 /**
2728 * Set the condition used to determine which of the expressions is executed ne xt to the given
2729 * expression.
2730 * @param expression the condition used to determine which expression is execu ted next
2731 */
2732 void set condition(Expression expression) {
2733 _condition = becomeParentOf(expression);
2734 }
2735 /**
2736 * Set the expression that is executed if the condition evaluates to {@code fa lse} to the given
2737 * expression.
2738 * @param expression the expression that is executed if the condition evaluate s to {@code false}
2739 */
2740 void set elseExpression(Expression expression) {
2741 _elseExpression = becomeParentOf(expression);
2742 }
2743 /**
2744 * Set the token used to separate the condition from the then expression to th e given token.
2745 * @param question the token used to separate the condition from the then expr ession
2746 */
2747 void set question(Token question3) {
2748 this._question = question3;
2749 }
2750 /**
2751 * Set the expression that is executed if the condition evaluates to {@code tr ue} to the given
2752 * expression.
2753 * @param expression the expression that is executed if the condition evaluate s to {@code true}
2754 */
2755 void set thenExpression(Expression expression) {
2756 _thenExpression = becomeParentOf(expression);
2757 }
2758 void visitChildren(ASTVisitor<Object> visitor) {
2759 safelyVisitChild(_condition, visitor);
2760 safelyVisitChild(_thenExpression, visitor);
2761 safelyVisitChild(_elseExpression, visitor);
2762 }
2763 }
2764 /**
2765 * Instances of the class {@code ConstructorDeclaration} represent a constructor declaration.
2766 * <pre>
2767 * constructorDeclaration ::=
2768 * constructorSignature {@link FunctionBody body}?
2769 * | constructorName formalParameterList ':' 'this' ('.' {@link SimpleIdentifier name})? arguments
2770 * constructorSignature ::=
2771 * 'external'? constructorName formalParameterList initializerList?
2772 * | 'external'? 'factory' factoryName formalParameterList initializerList?
2773 * | 'external'? 'const' constructorName formalParameterList initializerList?
2774 * constructorName ::={@link SimpleIdentifier returnType} ('.' {@link SimpleIden tifier name})?
2775 * factoryName ::={@link Identifier returnType} ('.' {@link SimpleIdentifier nam e})?
2776 * initializerList ::=
2777 * ':' {@link ConstructorInitializer initializer} (',' {@link ConstructorInitial izer initializer})
2778 * </pre>
2779 * @coverage dart.engine.ast
2780 */
2781 class ConstructorDeclaration extends ClassMember {
2782 /**
2783 * The token for the 'external' keyword, or {@code null} if the constructor is not external.
2784 */
2785 Token _externalKeyword;
2786 /**
2787 * The token for the 'const' keyword, or {@code null} if the constructor is no t a const
2788 * constructor.
2789 */
2790 Token _constKeyword;
2791 /**
2792 * The token for the 'factory' keyword, or {@code null} if the constructor is not a factory
2793 * constructor.
2794 */
2795 Token _factoryKeyword;
2796 /**
2797 * The type of object being created. This can be different than the type in wh ich the constructor
2798 * is being declared if the constructor is the implementation of a factory con structor.
2799 */
2800 Identifier _returnType;
2801 /**
2802 * The token for the period before the constructor name, or {@code null} if th e constructor being
2803 * declared is unnamed.
2804 */
2805 Token _period;
2806 /**
2807 * The name of the constructor, or {@code null} if the constructor being decla red is unnamed.
2808 */
2809 SimpleIdentifier _name;
2810 /**
2811 * The element associated with this constructor, or {@code null} if the AST st ructure has not been
2812 * resolved or if this constructor could not be resolved.
2813 */
2814 ConstructorElement _element;
2815 /**
2816 * The parameters associated with the constructor.
2817 */
2818 FormalParameterList _parameters;
2819 /**
2820 * The token for the separator (colon or equals) before the initializers, or { @code null} if there
2821 * are no initializers.
2822 */
2823 Token _separator;
2824 /**
2825 * The initializers associated with the constructor.
2826 */
2827 NodeList<ConstructorInitializer> _initializers;
2828 /**
2829 * The name of the constructor to which this constructor will be redirected, o r {@code null} if
2830 * this is not a redirecting factory constructor.
2831 */
2832 ConstructorName _redirectedConstructor;
2833 /**
2834 * The body of the constructor, or {@code null} if the constructor does not ha ve a body.
2835 */
2836 FunctionBody _body;
2837 /**
2838 * Initialize a newly created constructor declaration.
2839 * @param externalKeyword the token for the 'external' keyword
2840 * @param comment the documentation comment associated with this constructor
2841 * @param metadata the annotations associated with this constructor
2842 * @param constKeyword the token for the 'const' keyword
2843 * @param factoryKeyword the token for the 'factory' keyword
2844 * @param returnType the return type of the constructor
2845 * @param period the token for the period before the constructor name
2846 * @param name the name of the constructor
2847 * @param parameters the parameters associated with the constructor
2848 * @param separator the token for the colon or equals before the initializers
2849 * @param initializers the initializers associated with the constructor
2850 * @param redirectedConstructor the name of the constructor to which this cons tructor will be
2851 * redirected
2852 * @param body the body of the constructor
2853 */
2854 ConstructorDeclaration.full(Comment comment, List<Annotation> metadata, Token externalKeyword, Token constKeyword, Token factoryKeyword, Identifier returnType , Token period, SimpleIdentifier name, FormalParameterList parameters, Token sep arator, List<ConstructorInitializer> initializers, ConstructorName redirectedCon structor, FunctionBody body) : super.full(comment, metadata) {
2855 this._initializers = new NodeList<ConstructorInitializer>(this);
2856 this._externalKeyword = externalKeyword;
2857 this._constKeyword = constKeyword;
2858 this._factoryKeyword = factoryKeyword;
2859 this._returnType = becomeParentOf(returnType);
2860 this._period = period;
2861 this._name = becomeParentOf(name);
2862 this._parameters = becomeParentOf(parameters);
2863 this._separator = separator;
2864 this._initializers.addAll(initializers);
2865 this._redirectedConstructor = becomeParentOf(redirectedConstructor);
2866 this._body = becomeParentOf(body);
2867 }
2868 /**
2869 * Initialize a newly created constructor declaration.
2870 * @param externalKeyword the token for the 'external' keyword
2871 * @param comment the documentation comment associated with this constructor
2872 * @param metadata the annotations associated with this constructor
2873 * @param constKeyword the token for the 'const' keyword
2874 * @param factoryKeyword the token for the 'factory' keyword
2875 * @param returnType the return type of the constructor
2876 * @param period the token for the period before the constructor name
2877 * @param name the name of the constructor
2878 * @param parameters the parameters associated with the constructor
2879 * @param separator the token for the colon or equals before the initializers
2880 * @param initializers the initializers associated with the constructor
2881 * @param redirectedConstructor the name of the constructor to which this cons tructor will be
2882 * redirected
2883 * @param body the body of the constructor
2884 */
2885 ConstructorDeclaration({Comment comment, List<Annotation> metadata, Token exte rnalKeyword, Token constKeyword, Token factoryKeyword, Identifier returnType, To ken period, SimpleIdentifier name, FormalParameterList parameters, Token separat or, List<ConstructorInitializer> initializers, ConstructorName redirectedConstru ctor, FunctionBody body}) : this.full(comment, metadata, externalKeyword, constK eyword, factoryKeyword, returnType, period, name, parameters, separator, initial izers, redirectedConstructor, body);
2886 accept(ASTVisitor visitor) => visitor.visitConstructorDeclaration(this);
2887 /**
2888 * Return the body of the constructor, or {@code null} if the constructor does not have a body.
2889 * @return the body of the constructor
2890 */
2891 FunctionBody get body => _body;
2892 /**
2893 * Return the token for the 'const' keyword.
2894 * @return the token for the 'const' keyword
2895 */
2896 Token get constKeyword => _constKeyword;
2897 ConstructorElement get element => _element;
2898 Token get endToken {
2899 if (_body != null) {
2900 return _body.endToken;
2901 } else if (!_initializers.isEmpty) {
2902 return _initializers.endToken;
2903 }
2904 return _parameters.endToken;
2905 }
2906 /**
2907 * Return the token for the 'external' keyword, or {@code null} if the constru ctor is not
2908 * external.
2909 * @return the token for the 'external' keyword
2910 */
2911 Token get externalKeyword => _externalKeyword;
2912 /**
2913 * Return the token for the 'factory' keyword.
2914 * @return the token for the 'factory' keyword
2915 */
2916 Token get factoryKeyword => _factoryKeyword;
2917 /**
2918 * Return the initializers associated with the constructor.
2919 * @return the initializers associated with the constructor
2920 */
2921 NodeList<ConstructorInitializer> get initializers => _initializers;
2922 /**
2923 * Return the name of the constructor, or {@code null} if the constructor bein g declared is
2924 * unnamed.
2925 * @return the name of the constructor
2926 */
2927 SimpleIdentifier get name => _name;
2928 /**
2929 * Return the parameters associated with the constructor.
2930 * @return the parameters associated with the constructor
2931 */
2932 FormalParameterList get parameters => _parameters;
2933 /**
2934 * Return the token for the period before the constructor name, or {@code null } if the constructor
2935 * being declared is unnamed.
2936 * @return the token for the period before the constructor name
2937 */
2938 Token get period => _period;
2939 /**
2940 * Return the name of the constructor to which this constructor will be redire cted, or{@code null} if this is not a redirecting factory constructor.
2941 * @return the name of the constructor to which this constructor will be redir ected
2942 */
2943 ConstructorName get redirectedConstructor => _redirectedConstructor;
2944 /**
2945 * Return the type of object being created. This can be different than the typ e in which the
2946 * constructor is being declared if the constructor is the implementation of a factory
2947 * constructor.
2948 * @return the type of object being created
2949 */
2950 Identifier get returnType => _returnType;
2951 /**
2952 * Return the token for the separator (colon or equals) before the initializer s, or {@code null}if there are no initializers.
2953 * @return the token for the separator (colon or equals) before the initialize rs
2954 */
2955 Token get separator => _separator;
2956 /**
2957 * Set the body of the constructor to the given function body.
2958 * @param functionBody the body of the constructor
2959 */
2960 void set body(FunctionBody functionBody) {
2961 _body = becomeParentOf(functionBody);
2962 }
2963 /**
2964 * Set the token for the 'const' keyword to the given token.
2965 * @param constKeyword the token for the 'const' keyword
2966 */
2967 void set constKeyword(Token constKeyword2) {
2968 this._constKeyword = constKeyword2;
2969 }
2970 /**
2971 * Set the element associated with this constructor to the given element.
2972 * @param element the element associated with this constructor
2973 */
2974 void set element(ConstructorElement element6) {
2975 this._element = element6;
2976 }
2977 /**
2978 * Set the token for the 'external' keyword to the given token.
2979 * @param externalKeyword the token for the 'external' keyword
2980 */
2981 void set externalKeyword(Token externalKeyword2) {
2982 this._externalKeyword = externalKeyword2;
2983 }
2984 /**
2985 * Set the token for the 'factory' keyword to the given token.
2986 * @param factoryKeyword the token for the 'factory' keyword
2987 */
2988 void set factoryKeyword(Token factoryKeyword2) {
2989 this._factoryKeyword = factoryKeyword2;
2990 }
2991 /**
2992 * Set the name of the constructor to the given identifier.
2993 * @param identifier the name of the constructor
2994 */
2995 void set name(SimpleIdentifier identifier) {
2996 _name = becomeParentOf(identifier);
2997 }
2998 /**
2999 * Set the parameters associated with the constructor to the given list of par ameters.
3000 * @param parameters the parameters associated with the constructor
3001 */
3002 void set parameters(FormalParameterList parameters2) {
3003 this._parameters = becomeParentOf(parameters2);
3004 }
3005 /**
3006 * Set the token for the period before the constructor name to the given token .
3007 * @param period the token for the period before the constructor name
3008 */
3009 void set period(Token period3) {
3010 this._period = period3;
3011 }
3012 /**
3013 * Set the name of the constructor to which this constructor will be redirecte d to the given
3014 * constructor name.
3015 * @param redirectedConstructor the name of the constructor to which this cons tructor will be
3016 * redirected
3017 */
3018 void set redirectedConstructor(ConstructorName redirectedConstructor2) {
3019 this._redirectedConstructor = becomeParentOf(redirectedConstructor2);
3020 }
3021 /**
3022 * Set the type of object being created to the given type name.
3023 * @param typeName the type of object being created
3024 */
3025 void set returnType(Identifier typeName) {
3026 _returnType = becomeParentOf(typeName);
3027 }
3028 /**
3029 * Set the token for the separator (colon or equals) before the initializers t o the given token.
3030 * @param separator the token for the separator (colon or equals) before the i nitializers
3031 */
3032 void set separator(Token separator2) {
3033 this._separator = separator2;
3034 }
3035 void visitChildren(ASTVisitor<Object> visitor) {
3036 super.visitChildren(visitor);
3037 safelyVisitChild(_returnType, visitor);
3038 safelyVisitChild(_name, visitor);
3039 safelyVisitChild(_parameters, visitor);
3040 _initializers.accept(visitor);
3041 safelyVisitChild(_redirectedConstructor, visitor);
3042 safelyVisitChild(_body, visitor);
3043 }
3044 Token get firstTokenAfterCommentAndMetadata {
3045 Token leftMost2 = leftMost([_externalKeyword, _constKeyword, _factoryKeyword ]);
3046 if (leftMost2 != null) {
3047 return leftMost2;
3048 }
3049 return _returnType.beginToken;
3050 }
3051 /**
3052 * Return the left-most of the given tokens, or {@code null} if there are no t okens given or if
3053 * all of the given tokens are {@code null}.
3054 * @param tokens the tokens being compared to find the left-most token
3055 * @return the left-most of the given tokens
3056 */
3057 Token leftMost(List<Token> tokens) {
3058 Token leftMost = null;
3059 int offset = 2147483647;
3060 for (Token token in tokens) {
3061 if (token != null && token.offset < offset) {
3062 leftMost = token;
3063 }
3064 }
3065 return leftMost;
3066 }
3067 }
3068 /**
3069 * Instances of the class {@code ConstructorFieldInitializer} represent the init ialization of a
3070 * field within a constructor's initialization list.
3071 * <pre>
3072 * fieldInitializer ::=
3073 * ('this' '.')? {@link SimpleIdentifier fieldName} '=' {@link Expression condit ionalExpression cascadeSection*}</pre>
3074 * @coverage dart.engine.ast
3075 */
3076 class ConstructorFieldInitializer extends ConstructorInitializer {
3077 /**
3078 * The token for the 'this' keyword, or {@code null} if there is no 'this' key word.
3079 */
3080 Token _keyword;
3081 /**
3082 * The token for the period after the 'this' keyword, or {@code null} if there is no 'this'
3083 * keyword.
3084 */
3085 Token _period;
3086 /**
3087 * The name of the field being initialized.
3088 */
3089 SimpleIdentifier _fieldName;
3090 /**
3091 * The token for the equal sign between the field name and the expression.
3092 */
3093 Token _equals;
3094 /**
3095 * The expression computing the value to which the field will be initialized.
3096 */
3097 Expression _expression;
3098 /**
3099 * Initialize a newly created field initializer to initialize the field with t he given name to the
3100 * value of the given expression.
3101 * @param keyword the token for the 'this' keyword
3102 * @param period the token for the period after the 'this' keyword
3103 * @param fieldName the name of the field being initialized
3104 * @param equals the token for the equal sign between the field name and the e xpression
3105 * @param expression the expression computing the value to which the field wil l be initialized
3106 */
3107 ConstructorFieldInitializer.full(Token keyword, Token period, SimpleIdentifier fieldName, Token equals, Expression expression) {
3108 this._keyword = keyword;
3109 this._period = period;
3110 this._fieldName = becomeParentOf(fieldName);
3111 this._equals = equals;
3112 this._expression = becomeParentOf(expression);
3113 }
3114 /**
3115 * Initialize a newly created field initializer to initialize the field with t he given name to the
3116 * value of the given expression.
3117 * @param keyword the token for the 'this' keyword
3118 * @param period the token for the period after the 'this' keyword
3119 * @param fieldName the name of the field being initialized
3120 * @param equals the token for the equal sign between the field name and the e xpression
3121 * @param expression the expression computing the value to which the field wil l be initialized
3122 */
3123 ConstructorFieldInitializer({Token keyword, Token period, SimpleIdentifier fie ldName, Token equals, Expression expression}) : this.full(keyword, period, field Name, equals, expression);
3124 accept(ASTVisitor visitor) => visitor.visitConstructorFieldInitializer(this);
3125 Token get beginToken {
3126 if (_keyword != null) {
3127 return _keyword;
3128 }
3129 return _fieldName.beginToken;
3130 }
3131 Token get endToken => _expression.endToken;
3132 /**
3133 * Return the token for the equal sign between the field name and the expressi on.
3134 * @return the token for the equal sign between the field name and the express ion
3135 */
3136 Token get equals => _equals;
3137 /**
3138 * Return the expression computing the value to which the field will be initia lized.
3139 * @return the expression computing the value to which the field will be initi alized
3140 */
3141 Expression get expression => _expression;
3142 /**
3143 * Return the name of the field being initialized.
3144 * @return the name of the field being initialized
3145 */
3146 SimpleIdentifier get fieldName => _fieldName;
3147 /**
3148 * Return the token for the 'this' keyword, or {@code null} if there is no 'th is' keyword.
3149 * @return the token for the 'this' keyword
3150 */
3151 Token get keyword => _keyword;
3152 /**
3153 * Return the token for the period after the 'this' keyword, or {@code null} i f there is no 'this'
3154 * keyword.
3155 * @return the token for the period after the 'this' keyword
3156 */
3157 Token get period => _period;
3158 /**
3159 * Set the token for the equal sign between the field name and the expression to the given token.
3160 * @param equals the token for the equal sign between the field name and the e xpression
3161 */
3162 void set equals(Token equals5) {
3163 this._equals = equals5;
3164 }
3165 /**
3166 * Set the expression computing the value to which the field will be initializ ed to the given
3167 * expression.
3168 * @param expression the expression computing the value to which the field wil l be initialized
3169 */
3170 void set expression(Expression expression3) {
3171 this._expression = becomeParentOf(expression3);
3172 }
3173 /**
3174 * Set the name of the field being initialized to the given identifier.
3175 * @param identifier the name of the field being initialized
3176 */
3177 void set fieldName(SimpleIdentifier identifier) {
3178 _fieldName = becomeParentOf(identifier);
3179 }
3180 /**
3181 * Set the token for the 'this' keyword to the given token.
3182 * @param keyword the token for the 'this' keyword
3183 */
3184 void set keyword(Token keyword6) {
3185 this._keyword = keyword6;
3186 }
3187 /**
3188 * Set the token for the period after the 'this' keyword to the given token.
3189 * @param period the token for the period after the 'this' keyword
3190 */
3191 void set period(Token period4) {
3192 this._period = period4;
3193 }
3194 void visitChildren(ASTVisitor<Object> visitor) {
3195 safelyVisitChild(_fieldName, visitor);
3196 safelyVisitChild(_expression, visitor);
3197 }
3198 }
3199 /**
3200 * Instances of the class {@code ConstructorInitializer} defines the behavior of nodes that can
3201 * occur in the initializer list of a constructor declaration.
3202 * <pre>
3203 * constructorInitializer ::={@link SuperConstructorInvocation superInvocation}| {@link ConstructorFieldInitializer fieldInitializer}</pre>
3204 * @coverage dart.engine.ast
3205 */
3206 abstract class ConstructorInitializer extends ASTNode {
3207 }
3208 /**
3209 * Instances of the class {@code ConstructorName} represent the name of the cons tructor.
3210 * <pre>
3211 * constructorName:
3212 * type ('.' identifier)?
3213 * </pre>
3214 * @coverage dart.engine.ast
3215 */
3216 class ConstructorName extends ASTNode {
3217 /**
3218 * The name of the type defining the constructor.
3219 */
3220 TypeName _type;
3221 /**
3222 * The token for the period before the constructor name, or {@code null} if th e specified
3223 * constructor is the unnamed constructor.
3224 */
3225 Token _period;
3226 /**
3227 * The name of the constructor, or {@code null} if the specified constructor i s the unnamed
3228 * constructor.
3229 */
3230 SimpleIdentifier _name;
3231 /**
3232 * The element associated with this constructor name, or {@code null} if the A ST structure has not
3233 * been resolved or if this constructor name could not be resolved.
3234 */
3235 ConstructorElement _element;
3236 /**
3237 * Initialize a newly created constructor name.
3238 * @param type the name of the type defining the constructor
3239 * @param period the token for the period before the constructor name
3240 * @param name the name of the constructor
3241 */
3242 ConstructorName.full(TypeName type, Token period, SimpleIdentifier name) {
3243 this._type = becomeParentOf(type);
3244 this._period = period;
3245 this._name = becomeParentOf(name);
3246 }
3247 /**
3248 * Initialize a newly created constructor name.
3249 * @param type the name of the type defining the constructor
3250 * @param period the token for the period before the constructor name
3251 * @param name the name of the constructor
3252 */
3253 ConstructorName({TypeName type, Token period, SimpleIdentifier name}) : this.f ull(type, period, name);
3254 accept(ASTVisitor visitor) => visitor.visitConstructorName(this);
3255 Token get beginToken => _type.beginToken;
3256 /**
3257 * Return the element associated with this constructor name, or {@code null} i f the AST structure
3258 * has not been resolved or if this constructor name could not be resolved.
3259 * @return the element associated with this constructor name
3260 */
3261 ConstructorElement get element => _element;
3262 Token get endToken {
3263 if (_name != null) {
3264 return _name.endToken;
3265 }
3266 return _type.endToken;
3267 }
3268 /**
3269 * Return the name of the constructor, or {@code null} if the specified constr uctor is the unnamed
3270 * constructor.
3271 * @return the name of the constructor
3272 */
3273 SimpleIdentifier get name => _name;
3274 /**
3275 * Return the token for the period before the constructor name, or {@code null } if the specified
3276 * constructor is the unnamed constructor.
3277 * @return the token for the period before the constructor name
3278 */
3279 Token get period => _period;
3280 /**
3281 * Return the name of the type defining the constructor.
3282 * @return the name of the type defining the constructor
3283 */
3284 TypeName get type => _type;
3285 /**
3286 * Set the element associated with this constructor name to the given element.
3287 * @param element the element associated with this constructor name
3288 */
3289 void set element(ConstructorElement element7) {
3290 this._element = element7;
3291 }
3292 /**
3293 * Set the name of the constructor to the given name.
3294 * @param name the name of the constructor
3295 */
3296 void set name(SimpleIdentifier name4) {
3297 this._name = becomeParentOf(name4);
3298 }
3299 /**
3300 * Return the token for the period before the constructor name to the given to ken.
3301 * @param period the token for the period before the constructor name
3302 */
3303 void set period(Token period5) {
3304 this._period = period5;
3305 }
3306 /**
3307 * Set the name of the type defining the constructor to the given type name.
3308 * @param type the name of the type defining the constructor
3309 */
3310 void set type(TypeName type2) {
3311 this._type = becomeParentOf(type2);
3312 }
3313 void visitChildren(ASTVisitor<Object> visitor) {
3314 safelyVisitChild(_type, visitor);
3315 safelyVisitChild(_name, visitor);
3316 }
3317 }
3318 /**
3319 * Instances of the class {@code ContinueStatement} represent a continue stateme nt.
3320 * <pre>
3321 * continueStatement ::=
3322 * 'continue' {@link SimpleIdentifier label}? ';'
3323 * </pre>
3324 * @coverage dart.engine.ast
3325 */
3326 class ContinueStatement extends Statement {
3327 /**
3328 * The token representing the 'continue' keyword.
3329 */
3330 Token _keyword;
3331 /**
3332 * The label associated with the statement, or {@code null} if there is no lab el.
3333 */
3334 SimpleIdentifier _label;
3335 /**
3336 * The semicolon terminating the statement.
3337 */
3338 Token _semicolon;
3339 /**
3340 * Initialize a newly created continue statement.
3341 * @param keyword the token representing the 'continue' keyword
3342 * @param label the label associated with the statement
3343 * @param semicolon the semicolon terminating the statement
3344 */
3345 ContinueStatement.full(Token keyword, SimpleIdentifier label, Token semicolon) {
3346 this._keyword = keyword;
3347 this._label = becomeParentOf(label);
3348 this._semicolon = semicolon;
3349 }
3350 /**
3351 * Initialize a newly created continue statement.
3352 * @param keyword the token representing the 'continue' keyword
3353 * @param label the label associated with the statement
3354 * @param semicolon the semicolon terminating the statement
3355 */
3356 ContinueStatement({Token keyword, SimpleIdentifier label, Token semicolon}) : this.full(keyword, label, semicolon);
3357 accept(ASTVisitor visitor) => visitor.visitContinueStatement(this);
3358 Token get beginToken => _keyword;
3359 Token get endToken => _semicolon;
3360 /**
3361 * Return the token representing the 'continue' keyword.
3362 * @return the token representing the 'continue' keyword
3363 */
3364 Token get keyword => _keyword;
3365 /**
3366 * Return the label associated with the statement, or {@code null} if there is no label.
3367 * @return the label associated with the statement
3368 */
3369 SimpleIdentifier get label => _label;
3370 /**
3371 * Return the semicolon terminating the statement.
3372 * @return the semicolon terminating the statement
3373 */
3374 Token get semicolon => _semicolon;
3375 /**
3376 * Set the token representing the 'continue' keyword to the given token.
3377 * @param keyword the token representing the 'continue' keyword
3378 */
3379 void set keyword(Token keyword7) {
3380 this._keyword = keyword7;
3381 }
3382 /**
3383 * Set the label associated with the statement to the given label.
3384 * @param identifier the label associated with the statement
3385 */
3386 void set label(SimpleIdentifier identifier) {
3387 _label = becomeParentOf(identifier);
3388 }
3389 /**
3390 * Set the semicolon terminating the statement to the given token.
3391 * @param semicolon the semicolon terminating the statement
3392 */
3393 void set semicolon(Token semicolon4) {
3394 this._semicolon = semicolon4;
3395 }
3396 void visitChildren(ASTVisitor<Object> visitor) {
3397 safelyVisitChild(_label, visitor);
3398 }
3399 }
3400 /**
3401 * The abstract class {@code Declaration} defines the behavior common to nodes t hat represent the
3402 * declaration of a name. Each declared name is visible within a name scope.
3403 * @coverage dart.engine.ast
3404 */
3405 abstract class Declaration extends AnnotatedNode {
3406 /**
3407 * Initialize a newly created declaration.
3408 * @param comment the documentation comment associated with this declaration
3409 * @param metadata the annotations associated with this declaration
3410 */
3411 Declaration.full(Comment comment, List<Annotation> metadata) : super.full(comm ent, metadata) {
3412 }
3413 /**
3414 * Initialize a newly created declaration.
3415 * @param comment the documentation comment associated with this declaration
3416 * @param metadata the annotations associated with this declaration
3417 */
3418 Declaration({Comment comment, List<Annotation> metadata}) : this.full(comment, metadata);
3419 /**
3420 * Return the element associated with this declaration, or {@code null} if eit her this node
3421 * corresponds to a list of declarations or if the AST structure has not been resolved.
3422 * @return the element associated with this declaration
3423 */
3424 Element get element;
3425 }
3426 /**
3427 * Instances of the class {@code DeclaredIdentifier} represent the declaration o f a single
3428 * identifier.
3429 * <pre>
3430 * declaredIdentifier ::=
3431 * ({@link Annotation metadata} finalConstVarOrType {@link SimpleIdentifier iden tifier}</pre>
3432 * @coverage dart.engine.ast
3433 */
3434 class DeclaredIdentifier extends Declaration {
3435 /**
3436 * The token representing either the 'final', 'const' or 'var' keyword, or {@c ode null} if no
3437 * keyword was used.
3438 */
3439 Token _keyword;
3440 /**
3441 * The name of the declared type of the parameter, or {@code null} if the para meter does not have
3442 * a declared type.
3443 */
3444 TypeName _type;
3445 /**
3446 * The name of the variable being declared.
3447 */
3448 SimpleIdentifier _identifier;
3449 /**
3450 * Initialize a newly created formal parameter.
3451 * @param comment the documentation comment associated with this parameter
3452 * @param metadata the annotations associated with this parameter
3453 * @param keyword the token representing either the 'final', 'const' or 'var' keyword
3454 * @param type the name of the declared type of the parameter
3455 * @param identifier the name of the parameter being declared
3456 */
3457 DeclaredIdentifier.full(Comment comment, List<Annotation> metadata, Token keyw ord, TypeName type, SimpleIdentifier identifier) : super.full(comment, metadata) {
3458 this._keyword = keyword;
3459 this._type = becomeParentOf(type);
3460 this._identifier = becomeParentOf(identifier);
3461 }
3462 /**
3463 * Initialize a newly created formal parameter.
3464 * @param comment the documentation comment associated with this parameter
3465 * @param metadata the annotations associated with this parameter
3466 * @param keyword the token representing either the 'final', 'const' or 'var' keyword
3467 * @param type the name of the declared type of the parameter
3468 * @param identifier the name of the parameter being declared
3469 */
3470 DeclaredIdentifier({Comment comment, List<Annotation> metadata, Token keyword, TypeName type, SimpleIdentifier identifier}) : this.full(comment, metadata, key word, type, identifier);
3471 accept(ASTVisitor visitor) => visitor.visitDeclaredIdentifier(this);
3472 LocalVariableElement get element {
3473 SimpleIdentifier identifier11 = identifier;
3474 if (identifier11 == null) {
3475 return null;
3476 }
3477 return identifier11.element as LocalVariableElement;
3478 }
3479 Token get endToken => _identifier.endToken;
3480 /**
3481 * Return the name of the variable being declared.
3482 * @return the name of the variable being declared
3483 */
3484 SimpleIdentifier get identifier => _identifier;
3485 /**
3486 * Return the token representing either the 'final', 'const' or 'var' keyword.
3487 * @return the token representing either the 'final', 'const' or 'var' keyword
3488 */
3489 Token get keyword => _keyword;
3490 /**
3491 * Return the name of the declared type of the parameter, or {@code null} if t he parameter does
3492 * not have a declared type.
3493 * @return the name of the declared type of the parameter
3494 */
3495 TypeName get type => _type;
3496 /**
3497 * Return {@code true} if this variable was declared with the 'const' modifier .
3498 * @return {@code true} if this variable was declared with the 'const' modifie r
3499 */
3500 bool isConst() => (_keyword is KeywordToken) && identical(((_keyword as Keywor dToken)).keyword, Keyword.CONST);
3501 /**
3502 * Return {@code true} if this variable was declared with the 'final' modifier . Variables that are
3503 * declared with the 'const' modifier will return {@code false} even though th ey are implicitly
3504 * final.
3505 * @return {@code true} if this variable was declared with the 'final' modifie r
3506 */
3507 bool isFinal() => (_keyword is KeywordToken) && identical(((_keyword as Keywor dToken)).keyword, Keyword.FINAL);
3508 /**
3509 * Set the token representing either the 'final', 'const' or 'var' keyword to the given token.
3510 * @param keyword the token representing either the 'final', 'const' or 'var' keyword
3511 */
3512 void set keyword(Token keyword8) {
3513 this._keyword = keyword8;
3514 }
3515 /**
3516 * Set the name of the declared type of the parameter to the given type name.
3517 * @param typeName the name of the declared type of the parameter
3518 */
3519 void set type(TypeName typeName) {
3520 _type = becomeParentOf(typeName);
3521 }
3522 void visitChildren(ASTVisitor<Object> visitor) {
3523 super.visitChildren(visitor);
3524 safelyVisitChild(_type, visitor);
3525 safelyVisitChild(_identifier, visitor);
3526 }
3527 Token get firstTokenAfterCommentAndMetadata {
3528 if (_keyword != null) {
3529 return _keyword;
3530 } else if (_type != null) {
3531 return _type.beginToken;
3532 }
3533 return _identifier.beginToken;
3534 }
3535 }
3536 /**
3537 * Instances of the class {@code DefaultFormalParameter} represent a formal para meter with a default
3538 * value. There are two kinds of parameters that are both represented by this cl ass: named formal
3539 * parameters and positional formal parameters.
3540 * <pre>
3541 * defaultFormalParameter ::={@link NormalFormalParameter normalFormalParameter} ('=' {@link Expression defaultValue})?
3542 * defaultNamedParameter ::={@link NormalFormalParameter normalFormalParameter} (':' {@link Expression defaultValue})?
3543 * </pre>
3544 * @coverage dart.engine.ast
3545 */
3546 class DefaultFormalParameter extends FormalParameter {
3547 /**
3548 * The formal parameter with which the default value is associated.
3549 */
3550 NormalFormalParameter _parameter;
3551 /**
3552 * The kind of this parameter.
3553 */
3554 ParameterKind _kind;
3555 /**
3556 * The token separating the parameter from the default value, or {@code null} if there is no
3557 * default value.
3558 */
3559 Token _separator;
3560 /**
3561 * The expression computing the default value for the parameter, or {@code nul l} if there is no
3562 * default value.
3563 */
3564 Expression _defaultValue;
3565 /**
3566 * Initialize a newly created default formal parameter.
3567 * @param parameter the formal parameter with which the default value is assoc iated
3568 * @param kind the kind of this parameter
3569 * @param separator the token separating the parameter from the default value
3570 * @param defaultValue the expression computing the default value for the para meter
3571 */
3572 DefaultFormalParameter.full(NormalFormalParameter parameter, ParameterKind kin d, Token separator, Expression defaultValue) {
3573 this._parameter = becomeParentOf(parameter);
3574 this._kind = kind;
3575 this._separator = separator;
3576 this._defaultValue = becomeParentOf(defaultValue);
3577 }
3578 /**
3579 * Initialize a newly created default formal parameter.
3580 * @param parameter the formal parameter with which the default value is assoc iated
3581 * @param kind the kind of this parameter
3582 * @param separator the token separating the parameter from the default value
3583 * @param defaultValue the expression computing the default value for the para meter
3584 */
3585 DefaultFormalParameter({NormalFormalParameter parameter, ParameterKind kind, T oken separator, Expression defaultValue}) : this.full(parameter, kind, separator , defaultValue);
3586 accept(ASTVisitor visitor) => visitor.visitDefaultFormalParameter(this);
3587 Token get beginToken => _parameter.beginToken;
3588 /**
3589 * Return the expression computing the default value for the parameter, or {@c ode null} if there
3590 * is no default value.
3591 * @return the expression computing the default value for the parameter
3592 */
3593 Expression get defaultValue => _defaultValue;
3594 Token get endToken {
3595 if (_defaultValue != null) {
3596 return _defaultValue.endToken;
3597 }
3598 return _parameter.endToken;
3599 }
3600 SimpleIdentifier get identifier => _parameter.identifier;
3601 ParameterKind get kind => _kind;
3602 /**
3603 * Return the formal parameter with which the default value is associated.
3604 * @return the formal parameter with which the default value is associated
3605 */
3606 NormalFormalParameter get parameter => _parameter;
3607 /**
3608 * Return the token separating the parameter from the default value, or {@code null} if there is
3609 * no default value.
3610 * @return the token separating the parameter from the default value
3611 */
3612 Token get separator => _separator;
3613 /**
3614 * Return {@code true} if this parameter was declared with the 'const' modifie r.
3615 * @return {@code true} if this parameter was declared with the 'const' modifi er
3616 */
3617 bool isConst() => _parameter != null && _parameter.isConst();
3618 /**
3619 * Return {@code true} if this parameter was declared with the 'final' modifie r. Parameters that
3620 * are declared with the 'const' modifier will return {@code false} even thoug h they are
3621 * implicitly final.
3622 * @return {@code true} if this parameter was declared with the 'final' modifi er
3623 */
3624 bool isFinal() => _parameter != null && _parameter.isFinal();
3625 /**
3626 * Set the expression computing the default value for the parameter to the giv en expression.
3627 * @param expression the expression computing the default value for the parame ter
3628 */
3629 void set defaultValue(Expression expression) {
3630 _defaultValue = becomeParentOf(expression);
3631 }
3632 /**
3633 * Set the kind of this parameter to the given kind.
3634 * @param kind the kind of this parameter
3635 */
3636 void set kind(ParameterKind kind2) {
3637 this._kind = kind2;
3638 }
3639 /**
3640 * Set the formal parameter with which the default value is associated to the given parameter.
3641 * @param formalParameter the formal parameter with which the default value is associated
3642 */
3643 void set parameter(NormalFormalParameter formalParameter) {
3644 _parameter = becomeParentOf(formalParameter);
3645 }
3646 /**
3647 * Set the token separating the parameter from the default value to the given token.
3648 * @param separator the token separating the parameter from the default value
3649 */
3650 void set separator(Token separator3) {
3651 this._separator = separator3;
3652 }
3653 void visitChildren(ASTVisitor<Object> visitor) {
3654 safelyVisitChild(_parameter, visitor);
3655 safelyVisitChild(_defaultValue, visitor);
3656 }
3657 }
3658 /**
3659 * The abstract class {@code Directive} defines the behavior common to nodes tha t represent a
3660 * directive.
3661 * <pre>
3662 * directive ::={@link ExportDirective exportDirective}| {@link ImportDirective importDirective}| {@link LibraryDirective libraryDirective}| {@link PartDirectiv e partDirective}| {@link PartOfDirective partOfDirective}</pre>
3663 * @coverage dart.engine.ast
3664 */
3665 abstract class Directive extends AnnotatedNode {
3666 /**
3667 * The element associated with this directive, or {@code null} if the AST stru cture has not been
3668 * resolved or if this directive could not be resolved.
3669 */
3670 Element _element;
3671 /**
3672 * Initialize a newly create directive.
3673 * @param comment the documentation comment associated with this directive
3674 * @param metadata the annotations associated with the directive
3675 */
3676 Directive.full(Comment comment, List<Annotation> metadata) : super.full(commen t, metadata) {
3677 }
3678 /**
3679 * Initialize a newly create directive.
3680 * @param comment the documentation comment associated with this directive
3681 * @param metadata the annotations associated with the directive
3682 */
3683 Directive({Comment comment, List<Annotation> metadata}) : this.full(comment, m etadata);
3684 /**
3685 * Return the element associated with this directive, or {@code null} if the A ST structure has not
3686 * been resolved or if this directive could not be resolved. Examples of the l atter case include a
3687 * directive that contains an invalid URL or a URL that does not exist.
3688 * @return the element associated with this directive
3689 */
3690 Element get element => _element;
3691 /**
3692 * Return the token representing the keyword that introduces this directive (' import', 'export',
3693 * 'library' or 'part').
3694 * @return the token representing the keyword that introduces this directive
3695 */
3696 Token get keyword;
3697 /**
3698 * Set the element associated with this directive to the given element.
3699 * @param element the element associated with this directive
3700 */
3701 void set element(Element element8) {
3702 this._element = element8;
3703 }
3704 }
3705 /**
3706 * Instances of the class {@code DoStatement} represent a do statement.
3707 * <pre>
3708 * doStatement ::=
3709 * 'do' {@link Statement body} 'while' '(' {@link Expression condition} ')' ';'
3710 * </pre>
3711 * @coverage dart.engine.ast
3712 */
3713 class DoStatement extends Statement {
3714 /**
3715 * The token representing the 'do' keyword.
3716 */
3717 Token _doKeyword;
3718 /**
3719 * The body of the loop.
3720 */
3721 Statement _body;
3722 /**
3723 * The token representing the 'while' keyword.
3724 */
3725 Token _whileKeyword;
3726 /**
3727 * The left parenthesis.
3728 */
3729 Token _leftParenthesis;
3730 /**
3731 * The condition that determines when the loop will terminate.
3732 */
3733 Expression _condition;
3734 /**
3735 * The right parenthesis.
3736 */
3737 Token _rightParenthesis;
3738 /**
3739 * The semicolon terminating the statement.
3740 */
3741 Token _semicolon;
3742 /**
3743 * Initialize a newly created do loop.
3744 * @param doKeyword the token representing the 'do' keyword
3745 * @param body the body of the loop
3746 * @param whileKeyword the token representing the 'while' keyword
3747 * @param leftParenthesis the left parenthesis
3748 * @param condition the condition that determines when the loop will terminate
3749 * @param rightParenthesis the right parenthesis
3750 * @param semicolon the semicolon terminating the statement
3751 */
3752 DoStatement.full(Token doKeyword, Statement body, Token whileKeyword, Token le ftParenthesis, Expression condition, Token rightParenthesis, Token semicolon) {
3753 this._doKeyword = doKeyword;
3754 this._body = becomeParentOf(body);
3755 this._whileKeyword = whileKeyword;
3756 this._leftParenthesis = leftParenthesis;
3757 this._condition = becomeParentOf(condition);
3758 this._rightParenthesis = rightParenthesis;
3759 this._semicolon = semicolon;
3760 }
3761 /**
3762 * Initialize a newly created do loop.
3763 * @param doKeyword the token representing the 'do' keyword
3764 * @param body the body of the loop
3765 * @param whileKeyword the token representing the 'while' keyword
3766 * @param leftParenthesis the left parenthesis
3767 * @param condition the condition that determines when the loop will terminate
3768 * @param rightParenthesis the right parenthesis
3769 * @param semicolon the semicolon terminating the statement
3770 */
3771 DoStatement({Token doKeyword, Statement body, Token whileKeyword, Token leftPa renthesis, Expression condition, Token rightParenthesis, Token semicolon}) : thi s.full(doKeyword, body, whileKeyword, leftParenthesis, condition, rightParenthes is, semicolon);
3772 accept(ASTVisitor visitor) => visitor.visitDoStatement(this);
3773 Token get beginToken => _doKeyword;
3774 /**
3775 * Return the body of the loop.
3776 * @return the body of the loop
3777 */
3778 Statement get body => _body;
3779 /**
3780 * Return the condition that determines when the loop will terminate.
3781 * @return the condition that determines when the loop will terminate
3782 */
3783 Expression get condition => _condition;
3784 /**
3785 * Return the token representing the 'do' keyword.
3786 * @return the token representing the 'do' keyword
3787 */
3788 Token get doKeyword => _doKeyword;
3789 Token get endToken => _semicolon;
3790 /**
3791 * Return the left parenthesis.
3792 * @return the left parenthesis
3793 */
3794 Token get leftParenthesis => _leftParenthesis;
3795 /**
3796 * Return the right parenthesis.
3797 * @return the right parenthesis
3798 */
3799 Token get rightParenthesis => _rightParenthesis;
3800 /**
3801 * Return the semicolon terminating the statement.
3802 * @return the semicolon terminating the statement
3803 */
3804 Token get semicolon => _semicolon;
3805 /**
3806 * Return the token representing the 'while' keyword.
3807 * @return the token representing the 'while' keyword
3808 */
3809 Token get whileKeyword => _whileKeyword;
3810 /**
3811 * Set the body of the loop to the given statement.
3812 * @param statement the body of the loop
3813 */
3814 void set body(Statement statement) {
3815 _body = becomeParentOf(statement);
3816 }
3817 /**
3818 * Set the condition that determines when the loop will terminate to the given expression.
3819 * @param expression the condition that determines when the loop will terminat e
3820 */
3821 void set condition(Expression expression) {
3822 _condition = becomeParentOf(expression);
3823 }
3824 /**
3825 * Set the token representing the 'do' keyword to the given token.
3826 * @param doKeyword the token representing the 'do' keyword
3827 */
3828 void set doKeyword(Token doKeyword2) {
3829 this._doKeyword = doKeyword2;
3830 }
3831 /**
3832 * Set the left parenthesis to the given token.
3833 * @param parenthesis the left parenthesis
3834 */
3835 void set leftParenthesis(Token parenthesis) {
3836 _leftParenthesis = parenthesis;
3837 }
3838 /**
3839 * Set the right parenthesis to the given token.
3840 * @param parenthesis the right parenthesis
3841 */
3842 void set rightParenthesis(Token parenthesis) {
3843 _rightParenthesis = parenthesis;
3844 }
3845 /**
3846 * Set the semicolon terminating the statement to the given token.
3847 * @param semicolon the semicolon terminating the statement
3848 */
3849 void set semicolon(Token semicolon5) {
3850 this._semicolon = semicolon5;
3851 }
3852 /**
3853 * Set the token representing the 'while' keyword to the given token.
3854 * @param whileKeyword the token representing the 'while' keyword
3855 */
3856 void set whileKeyword(Token whileKeyword2) {
3857 this._whileKeyword = whileKeyword2;
3858 }
3859 void visitChildren(ASTVisitor<Object> visitor) {
3860 safelyVisitChild(_body, visitor);
3861 safelyVisitChild(_condition, visitor);
3862 }
3863 }
3864 /**
3865 * Instances of the class {@code DoubleLiteral} represent a floating point liter al expression.
3866 * <pre>
3867 * doubleLiteral ::=
3868 * decimalDigit+ ('.' decimalDigit*)? exponent?
3869 * | '.' decimalDigit+ exponent?
3870 * exponent ::=
3871 * ('e' | 'E') ('+' | '-')? decimalDigit+
3872 * </pre>
3873 * @coverage dart.engine.ast
3874 */
3875 class DoubleLiteral extends Literal {
3876 /**
3877 * The token representing the literal.
3878 */
3879 Token _literal;
3880 /**
3881 * The value of the literal.
3882 */
3883 double _value = 0.0;
3884 /**
3885 * Initialize a newly created floating point literal.
3886 * @param literal the token representing the literal
3887 * @param value the value of the literal
3888 */
3889 DoubleLiteral.full(Token literal, double value) {
3890 this._literal = literal;
3891 this._value = value;
3892 }
3893 /**
3894 * Initialize a newly created floating point literal.
3895 * @param literal the token representing the literal
3896 * @param value the value of the literal
3897 */
3898 DoubleLiteral({Token literal, double value}) : this.full(literal, value);
3899 accept(ASTVisitor visitor) => visitor.visitDoubleLiteral(this);
3900 Token get beginToken => _literal;
3901 Token get endToken => _literal;
3902 /**
3903 * Return the token representing the literal.
3904 * @return the token representing the literal
3905 */
3906 Token get literal => _literal;
3907 /**
3908 * Return the value of the literal.
3909 * @return the value of the literal
3910 */
3911 double get value => _value;
3912 /**
3913 * Set the token representing the literal to the given token.
3914 * @param literal the token representing the literal
3915 */
3916 void set literal(Token literal3) {
3917 this._literal = literal3;
3918 }
3919 /**
3920 * Set the value of the literal to the given value.
3921 * @param value the value of the literal
3922 */
3923 void set value(double value5) {
3924 this._value = value5;
3925 }
3926 void visitChildren(ASTVisitor<Object> visitor) {
3927 }
3928 }
3929 /**
3930 * Instances of the class {@code EmptyFunctionBody} represent an empty function body, which can only
3931 * appear in constructors or abstract methods.
3932 * <pre>
3933 * emptyFunctionBody ::=
3934 * ';'
3935 * </pre>
3936 * @coverage dart.engine.ast
3937 */
3938 class EmptyFunctionBody extends FunctionBody {
3939 /**
3940 * The token representing the semicolon that marks the end of the function bod y.
3941 */
3942 Token _semicolon;
3943 /**
3944 * Initialize a newly created function body.
3945 * @param semicolon the token representing the semicolon that marks the end of the function body
3946 */
3947 EmptyFunctionBody.full(Token semicolon) {
3948 this._semicolon = semicolon;
3949 }
3950 /**
3951 * Initialize a newly created function body.
3952 * @param semicolon the token representing the semicolon that marks the end of the function body
3953 */
3954 EmptyFunctionBody({Token semicolon}) : this.full(semicolon);
3955 accept(ASTVisitor visitor) => visitor.visitEmptyFunctionBody(this);
3956 Token get beginToken => _semicolon;
3957 Token get endToken => _semicolon;
3958 /**
3959 * Return the token representing the semicolon that marks the end of the funct ion body.
3960 * @return the token representing the semicolon that marks the end of the func tion body
3961 */
3962 Token get semicolon => _semicolon;
3963 /**
3964 * Set the token representing the semicolon that marks the end of the function body to the given
3965 * token.
3966 * @param semicolon the token representing the semicolon that marks the end of the function body
3967 */
3968 void set semicolon(Token semicolon6) {
3969 this._semicolon = semicolon6;
3970 }
3971 void visitChildren(ASTVisitor<Object> visitor) {
3972 }
3973 }
3974 /**
3975 * Instances of the class {@code EmptyStatement} represent an empty statement.
3976 * <pre>
3977 * emptyStatement ::=
3978 * ';'
3979 * </pre>
3980 * @coverage dart.engine.ast
3981 */
3982 class EmptyStatement extends Statement {
3983 /**
3984 * The semicolon terminating the statement.
3985 */
3986 Token _semicolon;
3987 /**
3988 * Initialize a newly created empty statement.
3989 * @param semicolon the semicolon terminating the statement
3990 */
3991 EmptyStatement.full(Token semicolon) {
3992 this._semicolon = semicolon;
3993 }
3994 /**
3995 * Initialize a newly created empty statement.
3996 * @param semicolon the semicolon terminating the statement
3997 */
3998 EmptyStatement({Token semicolon}) : this.full(semicolon);
3999 accept(ASTVisitor visitor) => visitor.visitEmptyStatement(this);
4000 Token get beginToken => _semicolon;
4001 Token get endToken => _semicolon;
4002 /**
4003 * Return the semicolon terminating the statement.
4004 * @return the semicolon terminating the statement
4005 */
4006 Token get semicolon => _semicolon;
4007 /**
4008 * Set the semicolon terminating the statement to the given token.
4009 * @param semicolon the semicolon terminating the statement
4010 */
4011 void set semicolon(Token semicolon7) {
4012 this._semicolon = semicolon7;
4013 }
4014 void visitChildren(ASTVisitor<Object> visitor) {
4015 }
4016 }
4017 /**
4018 * Ephemeral identifiers are created as needed to mimic the presence of an empty identifier.
4019 * @coverage dart.engine.ast
4020 */
4021 class EphemeralIdentifier extends SimpleIdentifier {
4022 EphemeralIdentifier.full(ASTNode parent, int location) : super.full(new Token( TokenType.IDENTIFIER, location)) {
4023 parent.becomeParentOf(this);
4024 }
4025 EphemeralIdentifier({ASTNode parent, int location}) : this.full(parent, locati on);
4026 }
4027 /**
4028 * Instances of the class {@code ExportDirective} represent an export directive.
4029 * <pre>
4030 * exportDirective ::={@link Annotation metadata} 'export' {@link StringLiteral libraryUri} {@link Combinator combinator}* ';'
4031 * </pre>
4032 * @coverage dart.engine.ast
4033 */
4034 class ExportDirective extends NamespaceDirective {
4035 /**
4036 * Initialize a newly created export directive.
4037 * @param comment the documentation comment associated with this directive
4038 * @param metadata the annotations associated with the directive
4039 * @param keyword the token representing the 'export' keyword
4040 * @param libraryUri the URI of the library being exported
4041 * @param combinators the combinators used to control which names are exported
4042 * @param semicolon the semicolon terminating the directive
4043 */
4044 ExportDirective.full(Comment comment, List<Annotation> metadata, Token keyword , StringLiteral libraryUri, List<Combinator> combinators, Token semicolon) : sup er.full(comment, metadata, keyword, libraryUri, combinators, semicolon) {
4045 }
4046 /**
4047 * Initialize a newly created export directive.
4048 * @param comment the documentation comment associated with this directive
4049 * @param metadata the annotations associated with the directive
4050 * @param keyword the token representing the 'export' keyword
4051 * @param libraryUri the URI of the library being exported
4052 * @param combinators the combinators used to control which names are exported
4053 * @param semicolon the semicolon terminating the directive
4054 */
4055 ExportDirective({Comment comment, List<Annotation> metadata, Token keyword, St ringLiteral libraryUri, List<Combinator> combinators, Token semicolon}) : this.f ull(comment, metadata, keyword, libraryUri, combinators, semicolon);
4056 accept(ASTVisitor visitor) => visitor.visitExportDirective(this);
4057 void visitChildren(ASTVisitor<Object> visitor) {
4058 super.visitChildren(visitor);
4059 combinators.accept(visitor);
4060 }
4061 }
4062 /**
4063 * Instances of the class {@code Expression} defines the behavior common to node s that represent an
4064 * expression.
4065 * <pre>
4066 * expression ::={@link AssignmentExpression assignmentExpression}| {@link Condi tionalExpression conditionalExpression} cascadeSection
4067 * | {@link ThrowExpression throwExpression}</pre>
4068 * @coverage dart.engine.ast
4069 */
4070 abstract class Expression extends ASTNode {
4071 /**
4072 * The static type of this expression, or {@code null} if the AST structure ha s not been resolved.
4073 */
4074 Type2 _staticType;
4075 /**
4076 * The propagated type of this expression, or {@code null} if type propagation has not been
4077 * performed on the AST structure.
4078 */
4079 Type2 _propagatedType;
4080 /**
4081 * If this expression is an argument to an invocation, and the AST structure h as been resolved,
4082 * and the function being invoked is known, and this expression corresponds to one of the
4083 * parameters of the function being invoked, then return the parameter element representing the
4084 * parameter to which the value of this expression will be bound. Otherwise, r eturn {@code null}.
4085 * @return the parameter element representing the parameter to which the value of this expression
4086 * will be bound
4087 */
4088 ParameterElement get parameterElement {
4089 ASTNode parent3 = parent;
4090 if (parent3 is ArgumentList) {
4091 return ((parent3 as ArgumentList)).getParameterElementFor(this);
4092 }
4093 return null;
4094 }
4095 /**
4096 * Return the propagated type of this expression, or {@code null} if type prop agation has not been
4097 * performed on the AST structure.
4098 * @return the propagated type of this expression
4099 */
4100 Type2 get propagatedType => _propagatedType;
4101 /**
4102 * Return the static type of this expression, or {@code null} if the AST struc ture has not been
4103 * resolved.
4104 * @return the static type of this expression
4105 */
4106 Type2 get staticType => _staticType;
4107 /**
4108 * Return {@code true} if this expression is syntactically valid for the LHS o f an{@link AssignmentExpression assignment expression}.
4109 * @return {@code true} if this expression matches the {@code assignableExpres sion} production
4110 */
4111 bool isAssignable() => false;
4112 /**
4113 * Set the propagated type of this expression to the given type.
4114 * @param propagatedType the propagated type of this expression
4115 */
4116 void set propagatedType(Type2 propagatedType2) {
4117 this._propagatedType = propagatedType2;
4118 }
4119 /**
4120 * Set the static type of this expression to the given type.
4121 * @param staticType the static type of this expression
4122 */
4123 void set staticType(Type2 staticType2) {
4124 this._staticType = staticType2;
4125 }
4126 }
4127 /**
4128 * Instances of the class {@code ExpressionFunctionBody} represent a function bo dy consisting of a
4129 * single expression.
4130 * <pre>
4131 * expressionFunctionBody ::=
4132 * '=>' {@link Expression expression} ';'
4133 * </pre>
4134 * @coverage dart.engine.ast
4135 */
4136 class ExpressionFunctionBody extends FunctionBody {
4137 /**
4138 * The token introducing the expression that represents the body of the functi on.
4139 */
4140 Token _functionDefinition;
4141 /**
4142 * The expression representing the body of the function.
4143 */
4144 Expression _expression;
4145 /**
4146 * The semicolon terminating the statement.
4147 */
4148 Token _semicolon;
4149 /**
4150 * Initialize a newly created function body consisting of a block of statement s.
4151 * @param functionDefinition the token introducing the expression that represe nts the body of the
4152 * function
4153 * @param expression the expression representing the body of the function
4154 * @param semicolon the semicolon terminating the statement
4155 */
4156 ExpressionFunctionBody.full(Token functionDefinition, Expression expression, T oken semicolon) {
4157 this._functionDefinition = functionDefinition;
4158 this._expression = becomeParentOf(expression);
4159 this._semicolon = semicolon;
4160 }
4161 /**
4162 * Initialize a newly created function body consisting of a block of statement s.
4163 * @param functionDefinition the token introducing the expression that represe nts the body of the
4164 * function
4165 * @param expression the expression representing the body of the function
4166 * @param semicolon the semicolon terminating the statement
4167 */
4168 ExpressionFunctionBody({Token functionDefinition, Expression expression, Token semicolon}) : this.full(functionDefinition, expression, semicolon);
4169 accept(ASTVisitor visitor) => visitor.visitExpressionFunctionBody(this);
4170 Token get beginToken => _functionDefinition;
4171 Token get endToken {
4172 if (_semicolon != null) {
4173 return _semicolon;
4174 }
4175 return _expression.endToken;
4176 }
4177 /**
4178 * Return the expression representing the body of the function.
4179 * @return the expression representing the body of the function
4180 */
4181 Expression get expression => _expression;
4182 /**
4183 * Return the token introducing the expression that represents the body of the function.
4184 * @return the function definition token
4185 */
4186 Token get functionDefinition => _functionDefinition;
4187 /**
4188 * Return the semicolon terminating the statement.
4189 * @return the semicolon terminating the statement
4190 */
4191 Token get semicolon => _semicolon;
4192 /**
4193 * Set the expression representing the body of the function to the given expre ssion.
4194 * @param expression the expression representing the body of the function
4195 */
4196 void set expression(Expression expression4) {
4197 this._expression = becomeParentOf(expression4);
4198 }
4199 /**
4200 * Set the token introducing the expression that represents the body of the fu nction to the given
4201 * token.
4202 * @param functionDefinition the function definition token
4203 */
4204 void set functionDefinition(Token functionDefinition2) {
4205 this._functionDefinition = functionDefinition2;
4206 }
4207 /**
4208 * Set the semicolon terminating the statement to the given token.
4209 * @param semicolon the semicolon terminating the statement
4210 */
4211 void set semicolon(Token semicolon8) {
4212 this._semicolon = semicolon8;
4213 }
4214 void visitChildren(ASTVisitor<Object> visitor) {
4215 safelyVisitChild(_expression, visitor);
4216 }
4217 }
4218 /**
4219 * Instances of the class {@code ExpressionStatement} wrap an expression as a st atement.
4220 * <pre>
4221 * expressionStatement ::={@link Expression expression}? ';'
4222 * </pre>
4223 * @coverage dart.engine.ast
4224 */
4225 class ExpressionStatement extends Statement {
4226 /**
4227 * The expression that comprises the statement.
4228 */
4229 Expression _expression;
4230 /**
4231 * The semicolon terminating the statement, or {@code null} if the expression is a function
4232 * expression and isn't followed by a semicolon.
4233 */
4234 Token _semicolon;
4235 /**
4236 * Initialize a newly created expression statement.
4237 * @param expression the expression that comprises the statement
4238 * @param semicolon the semicolon terminating the statement
4239 */
4240 ExpressionStatement.full(Expression expression, Token semicolon) {
4241 this._expression = becomeParentOf(expression);
4242 this._semicolon = semicolon;
4243 }
4244 /**
4245 * Initialize a newly created expression statement.
4246 * @param expression the expression that comprises the statement
4247 * @param semicolon the semicolon terminating the statement
4248 */
4249 ExpressionStatement({Expression expression, Token semicolon}) : this.full(expr ession, semicolon);
4250 accept(ASTVisitor visitor) => visitor.visitExpressionStatement(this);
4251 Token get beginToken => _expression.beginToken;
4252 Token get endToken {
4253 if (_semicolon != null) {
4254 return _semicolon;
4255 }
4256 return _expression.endToken;
4257 }
4258 /**
4259 * Return the expression that comprises the statement.
4260 * @return the expression that comprises the statement
4261 */
4262 Expression get expression => _expression;
4263 /**
4264 * Return the semicolon terminating the statement.
4265 * @return the semicolon terminating the statement
4266 */
4267 Token get semicolon => _semicolon;
4268 bool isSynthetic() => _expression.isSynthetic() && _semicolon.isSynthetic();
4269 /**
4270 * Set the expression that comprises the statement to the given expression.
4271 * @param expression the expression that comprises the statement
4272 */
4273 void set expression(Expression expression5) {
4274 this._expression = becomeParentOf(expression5);
4275 }
4276 /**
4277 * Set the semicolon terminating the statement to the given token.
4278 * @param semicolon the semicolon terminating the statement
4279 */
4280 void set semicolon(Token semicolon9) {
4281 this._semicolon = semicolon9;
4282 }
4283 void visitChildren(ASTVisitor<Object> visitor) {
4284 safelyVisitChild(_expression, visitor);
4285 }
4286 }
4287 /**
4288 * Instances of the class {@code ExtendsClause} represent the "extends" clause i n a class
4289 * declaration.
4290 * <pre>
4291 * extendsClause ::=
4292 * 'extends' {@link TypeName superclass}</pre>
4293 * @coverage dart.engine.ast
4294 */
4295 class ExtendsClause extends ASTNode {
4296 /**
4297 * The token representing the 'extends' keyword.
4298 */
4299 Token _keyword;
4300 /**
4301 * The name of the class that is being extended.
4302 */
4303 TypeName _superclass;
4304 /**
4305 * Initialize a newly created extends clause.
4306 * @param keyword the token representing the 'extends' keyword
4307 * @param superclass the name of the class that is being extended
4308 */
4309 ExtendsClause.full(Token keyword, TypeName superclass) {
4310 this._keyword = keyword;
4311 this._superclass = becomeParentOf(superclass);
4312 }
4313 /**
4314 * Initialize a newly created extends clause.
4315 * @param keyword the token representing the 'extends' keyword
4316 * @param superclass the name of the class that is being extended
4317 */
4318 ExtendsClause({Token keyword, TypeName superclass}) : this.full(keyword, super class);
4319 accept(ASTVisitor visitor) => visitor.visitExtendsClause(this);
4320 Token get beginToken => _keyword;
4321 Token get endToken => _superclass.endToken;
4322 /**
4323 * Return the token representing the 'extends' keyword.
4324 * @return the token representing the 'extends' keyword
4325 */
4326 Token get keyword => _keyword;
4327 /**
4328 * Return the name of the class that is being extended.
4329 * @return the name of the class that is being extended
4330 */
4331 TypeName get superclass => _superclass;
4332 /**
4333 * Set the token representing the 'extends' keyword to the given token.
4334 * @param keyword the token representing the 'extends' keyword
4335 */
4336 void set keyword(Token keyword9) {
4337 this._keyword = keyword9;
4338 }
4339 /**
4340 * Set the name of the class that is being extended to the given name.
4341 * @param name the name of the class that is being extended
4342 */
4343 void set superclass(TypeName name) {
4344 _superclass = becomeParentOf(name);
4345 }
4346 void visitChildren(ASTVisitor<Object> visitor) {
4347 safelyVisitChild(_superclass, visitor);
4348 }
4349 }
4350 /**
4351 * Instances of the class {@code FieldDeclaration} represent the declaration of one or more fields
4352 * of the same type.
4353 * <pre>
4354 * fieldDeclaration ::=
4355 * 'static'? {@link VariableDeclarationList fieldList} ';'
4356 * </pre>
4357 * @coverage dart.engine.ast
4358 */
4359 class FieldDeclaration extends ClassMember {
4360 /**
4361 * The token representing the 'static' keyword, or {@code null} if the fields are not static.
4362 */
4363 Token _keyword;
4364 /**
4365 * The fields being declared.
4366 */
4367 VariableDeclarationList _fieldList;
4368 /**
4369 * The semicolon terminating the declaration.
4370 */
4371 Token _semicolon;
4372 /**
4373 * Initialize a newly created field declaration.
4374 * @param comment the documentation comment associated with this field
4375 * @param metadata the annotations associated with this field
4376 * @param keyword the token representing the 'static' keyword
4377 * @param fieldList the fields being declared
4378 * @param semicolon the semicolon terminating the declaration
4379 */
4380 FieldDeclaration.full(Comment comment, List<Annotation> metadata, Token keywor d, VariableDeclarationList fieldList, Token semicolon) : super.full(comment, met adata) {
4381 this._keyword = keyword;
4382 this._fieldList = becomeParentOf(fieldList);
4383 this._semicolon = semicolon;
4384 }
4385 /**
4386 * Initialize a newly created field declaration.
4387 * @param comment the documentation comment associated with this field
4388 * @param metadata the annotations associated with this field
4389 * @param keyword the token representing the 'static' keyword
4390 * @param fieldList the fields being declared
4391 * @param semicolon the semicolon terminating the declaration
4392 */
4393 FieldDeclaration({Comment comment, List<Annotation> metadata, Token keyword, V ariableDeclarationList fieldList, Token semicolon}) : this.full(comment, metadat a, keyword, fieldList, semicolon);
4394 accept(ASTVisitor visitor) => visitor.visitFieldDeclaration(this);
4395 Element get element => null;
4396 Token get endToken => _semicolon;
4397 /**
4398 * Return the fields being declared.
4399 * @return the fields being declared
4400 */
4401 VariableDeclarationList get fields => _fieldList;
4402 /**
4403 * Return the token representing the 'static' keyword, or {@code null} if the fields are not
4404 * static.
4405 * @return the token representing the 'static' keyword
4406 */
4407 Token get keyword => _keyword;
4408 /**
4409 * Return the semicolon terminating the declaration.
4410 * @return the semicolon terminating the declaration
4411 */
4412 Token get semicolon => _semicolon;
4413 /**
4414 * Set the fields being declared to the given list of variables.
4415 * @param fieldList the fields being declared
4416 */
4417 void set fields(VariableDeclarationList fieldList) {
4418 fieldList = becomeParentOf(fieldList);
4419 }
4420 /**
4421 * Set the token representing the 'static' keyword to the given token.
4422 * @param keyword the token representing the 'static' keyword
4423 */
4424 void set keyword(Token keyword10) {
4425 this._keyword = keyword10;
4426 }
4427 /**
4428 * Set the semicolon terminating the declaration to the given token.
4429 * @param semicolon the semicolon terminating the declaration
4430 */
4431 void set semicolon(Token semicolon10) {
4432 this._semicolon = semicolon10;
4433 }
4434 void visitChildren(ASTVisitor<Object> visitor) {
4435 super.visitChildren(visitor);
4436 safelyVisitChild(_fieldList, visitor);
4437 }
4438 Token get firstTokenAfterCommentAndMetadata {
4439 if (_keyword != null) {
4440 return _keyword;
4441 }
4442 return _fieldList.beginToken;
4443 }
4444 }
4445 /**
4446 * Instances of the class {@code FieldFormalParameter} represent a field formal parameter.
4447 * <pre>
4448 * fieldFormalParameter ::=
4449 * ('final' {@link TypeName type} | 'const' {@link TypeName type} | 'var' | {@li nk TypeName type})? 'this' '.' {@link SimpleIdentifier identifier}</pre>
4450 * @coverage dart.engine.ast
4451 */
4452 class FieldFormalParameter extends NormalFormalParameter {
4453 /**
4454 * The token representing either the 'final', 'const' or 'var' keyword, or {@c ode null} if no
4455 * keyword was used.
4456 */
4457 Token _keyword;
4458 /**
4459 * The name of the declared type of the parameter, or {@code null} if the para meter does not have
4460 * a declared type.
4461 */
4462 TypeName _type;
4463 /**
4464 * The token representing the 'this' keyword.
4465 */
4466 Token _thisToken;
4467 /**
4468 * The token representing the period.
4469 */
4470 Token _period;
4471 /**
4472 * Initialize a newly created formal parameter.
4473 * @param comment the documentation comment associated with this parameter
4474 * @param metadata the annotations associated with this parameter
4475 * @param keyword the token representing either the 'final', 'const' or 'var' keyword
4476 * @param type the name of the declared type of the parameter
4477 * @param thisToken the token representing the 'this' keyword
4478 * @param period the token representing the period
4479 * @param identifier the name of the parameter being declared
4480 */
4481 FieldFormalParameter.full(Comment comment, List<Annotation> metadata, Token ke yword, TypeName type, Token thisToken, Token period, SimpleIdentifier identifier ) : super.full(comment, metadata, identifier) {
4482 this._keyword = keyword;
4483 this._type = becomeParentOf(type);
4484 this._thisToken = thisToken;
4485 this._period = period;
4486 }
4487 /**
4488 * Initialize a newly created formal parameter.
4489 * @param comment the documentation comment associated with this parameter
4490 * @param metadata the annotations associated with this parameter
4491 * @param keyword the token representing either the 'final', 'const' or 'var' keyword
4492 * @param type the name of the declared type of the parameter
4493 * @param thisToken the token representing the 'this' keyword
4494 * @param period the token representing the period
4495 * @param identifier the name of the parameter being declared
4496 */
4497 FieldFormalParameter({Comment comment, List<Annotation> metadata, Token keywor d, TypeName type, Token thisToken, Token period, SimpleIdentifier identifier}) : this.full(comment, metadata, keyword, type, thisToken, period, identifier);
4498 accept(ASTVisitor visitor) => visitor.visitFieldFormalParameter(this);
4499 Token get beginToken {
4500 if (_keyword != null) {
4501 return _keyword;
4502 } else if (_type != null) {
4503 return _type.beginToken;
4504 }
4505 return _thisToken;
4506 }
4507 Token get endToken => identifier.endToken;
4508 /**
4509 * Return the token representing either the 'final', 'const' or 'var' keyword.
4510 * @return the token representing either the 'final', 'const' or 'var' keyword
4511 */
4512 Token get keyword => _keyword;
4513 /**
4514 * Return the token representing the period.
4515 * @return the token representing the period
4516 */
4517 Token get period => _period;
4518 /**
4519 * Return the token representing the 'this' keyword.
4520 * @return the token representing the 'this' keyword
4521 */
4522 Token get thisToken => _thisToken;
4523 /**
4524 * Return the name of the declared type of the parameter, or {@code null} if t he parameter does
4525 * not have a declared type.
4526 * @return the name of the declared type of the parameter
4527 */
4528 TypeName get type => _type;
4529 bool isConst() => (_keyword is KeywordToken) && identical(((_keyword as Keywor dToken)).keyword, Keyword.CONST);
4530 bool isFinal() => (_keyword is KeywordToken) && identical(((_keyword as Keywor dToken)).keyword, Keyword.FINAL);
4531 /**
4532 * Set the token representing either the 'final', 'const' or 'var' keyword to the given token.
4533 * @param keyword the token representing either the 'final', 'const' or 'var' keyword
4534 */
4535 void set keyword(Token keyword11) {
4536 this._keyword = keyword11;
4537 }
4538 /**
4539 * Set the token representing the period to the given token.
4540 * @param period the token representing the period
4541 */
4542 void set period(Token period6) {
4543 this._period = period6;
4544 }
4545 /**
4546 * Set the token representing the 'this' keyword to the given token.
4547 * @param thisToken the token representing the 'this' keyword
4548 */
4549 void set thisToken(Token thisToken2) {
4550 this._thisToken = thisToken2;
4551 }
4552 /**
4553 * Set the name of the declared type of the parameter to the given type name.
4554 * @param typeName the name of the declared type of the parameter
4555 */
4556 void set type(TypeName typeName) {
4557 _type = becomeParentOf(typeName);
4558 }
4559 void visitChildren(ASTVisitor<Object> visitor) {
4560 super.visitChildren(visitor);
4561 safelyVisitChild(_type, visitor);
4562 safelyVisitChild(identifier, visitor);
4563 }
4564 }
4565 /**
4566 * Instances of the class {@code ForEachStatement} represent a for-each statemen t.
4567 * <pre>
4568 * forEachStatement ::=
4569 * 'for' '(' {@link SimpleFormalParameter loopParameter} 'in' {@link Expression iterator} ')' {@link Block body}</pre>
4570 * @coverage dart.engine.ast
4571 */
4572 class ForEachStatement extends Statement {
4573 /**
4574 * The token representing the 'for' keyword.
4575 */
4576 Token _forKeyword;
4577 /**
4578 * The left parenthesis.
4579 */
4580 Token _leftParenthesis;
4581 /**
4582 * The declaration of the loop variable.
4583 */
4584 DeclaredIdentifier _loopVariable;
4585 /**
4586 * The token representing the 'in' keyword.
4587 */
4588 Token _inKeyword;
4589 /**
4590 * The expression evaluated to produce the iterator.
4591 */
4592 Expression _iterator;
4593 /**
4594 * The right parenthesis.
4595 */
4596 Token _rightParenthesis;
4597 /**
4598 * The body of the loop.
4599 */
4600 Statement _body;
4601 /**
4602 * Initialize a newly created for-each statement.
4603 * @param forKeyword the token representing the 'for' keyword
4604 * @param leftParenthesis the left parenthesis
4605 * @param loopVariable the declaration of the loop variable
4606 * @param iterator the expression evaluated to produce the iterator
4607 * @param rightParenthesis the right parenthesis
4608 * @param body the body of the loop
4609 */
4610 ForEachStatement.full(Token forKeyword, Token leftParenthesis, DeclaredIdentif ier loopVariable, Token inKeyword, Expression iterator, Token rightParenthesis, Statement body) {
4611 this._forKeyword = forKeyword;
4612 this._leftParenthesis = leftParenthesis;
4613 this._loopVariable = becomeParentOf(loopVariable);
4614 this._inKeyword = inKeyword;
4615 this._iterator = becomeParentOf(iterator);
4616 this._rightParenthesis = rightParenthesis;
4617 this._body = becomeParentOf(body);
4618 }
4619 /**
4620 * Initialize a newly created for-each statement.
4621 * @param forKeyword the token representing the 'for' keyword
4622 * @param leftParenthesis the left parenthesis
4623 * @param loopVariable the declaration of the loop variable
4624 * @param iterator the expression evaluated to produce the iterator
4625 * @param rightParenthesis the right parenthesis
4626 * @param body the body of the loop
4627 */
4628 ForEachStatement({Token forKeyword, Token leftParenthesis, DeclaredIdentifier loopVariable, Token inKeyword, Expression iterator, Token rightParenthesis, Stat ement body}) : this.full(forKeyword, leftParenthesis, loopVariable, inKeyword, i terator, rightParenthesis, body);
4629 accept(ASTVisitor visitor) => visitor.visitForEachStatement(this);
4630 Token get beginToken => _forKeyword;
4631 /**
4632 * Return the body of the loop.
4633 * @return the body of the loop
4634 */
4635 Statement get body => _body;
4636 Token get endToken => _body.endToken;
4637 /**
4638 * Return the token representing the 'for' keyword.
4639 * @return the token representing the 'for' keyword
4640 */
4641 Token get forKeyword => _forKeyword;
4642 /**
4643 * Return the token representing the 'in' keyword.
4644 * @return the token representing the 'in' keyword
4645 */
4646 Token get inKeyword => _inKeyword;
4647 /**
4648 * Return the expression evaluated to produce the iterator.
4649 * @return the expression evaluated to produce the iterator
4650 */
4651 Expression get iterator => _iterator;
4652 /**
4653 * Return the left parenthesis.
4654 * @return the left parenthesis
4655 */
4656 Token get leftParenthesis => _leftParenthesis;
4657 /**
4658 * Return the declaration of the loop variable.
4659 * @return the declaration of the loop variable
4660 */
4661 DeclaredIdentifier get loopVariable => _loopVariable;
4662 /**
4663 * Return the right parenthesis.
4664 * @return the right parenthesis
4665 */
4666 Token get rightParenthesis => _rightParenthesis;
4667 /**
4668 * Set the body of the loop to the given block.
4669 * @param body the body of the loop
4670 */
4671 void set body(Statement body2) {
4672 this._body = becomeParentOf(body2);
4673 }
4674 /**
4675 * Set the token representing the 'for' keyword to the given token.
4676 * @param forKeyword the token representing the 'for' keyword
4677 */
4678 void set forKeyword(Token forKeyword2) {
4679 this._forKeyword = forKeyword2;
4680 }
4681 /**
4682 * Set the token representing the 'in' keyword to the given token.
4683 * @param inKeyword the token representing the 'in' keyword
4684 */
4685 void set inKeyword(Token inKeyword2) {
4686 this._inKeyword = inKeyword2;
4687 }
4688 /**
4689 * Set the expression evaluated to produce the iterator to the given expressio n.
4690 * @param expression the expression evaluated to produce the iterator
4691 */
4692 void set iterator(Expression expression) {
4693 _iterator = becomeParentOf(expression);
4694 }
4695 /**
4696 * Set the left parenthesis to the given token.
4697 * @param leftParenthesis the left parenthesis
4698 */
4699 void set leftParenthesis(Token leftParenthesis3) {
4700 this._leftParenthesis = leftParenthesis3;
4701 }
4702 /**
4703 * Set the declaration of the loop variable to the given variable.
4704 * @param variable the declaration of the loop variable
4705 */
4706 void set loopVariable(DeclaredIdentifier variable) {
4707 _loopVariable = becomeParentOf(variable);
4708 }
4709 /**
4710 * Set the right parenthesis to the given token.
4711 * @param rightParenthesis the right parenthesis
4712 */
4713 void set rightParenthesis(Token rightParenthesis3) {
4714 this._rightParenthesis = rightParenthesis3;
4715 }
4716 void visitChildren(ASTVisitor<Object> visitor) {
4717 safelyVisitChild(_loopVariable, visitor);
4718 safelyVisitChild(_iterator, visitor);
4719 safelyVisitChild(_body, visitor);
4720 }
4721 }
4722 /**
4723 * Instances of the class {@code ForStatement} represent a for statement.
4724 * <pre>
4725 * forStatement ::=
4726 * 'for' '(' forLoopParts ')' {@link Statement statement}forLoopParts ::=
4727 * forInitializerStatement ';' {@link Expression expression}? ';' {@link Express ion expressionList}?
4728 * forInitializerStatement ::={@link DefaultFormalParameter initializedVariableD eclaration}| {@link Expression expression}?
4729 * </pre>
4730 * @coverage dart.engine.ast
4731 */
4732 class ForStatement extends Statement {
4733 /**
4734 * The token representing the 'for' keyword.
4735 */
4736 Token _forKeyword;
4737 /**
4738 * The left parenthesis.
4739 */
4740 Token _leftParenthesis;
4741 /**
4742 * The declaration of the loop variables, or {@code null} if there are no vari ables. Note that a
4743 * for statement cannot have both a variable list and an initialization expres sion, but can
4744 * validly have neither.
4745 */
4746 VariableDeclarationList _variableList;
4747 /**
4748 * The initialization expression, or {@code null} if there is no initializatio n expression. Note
4749 * that a for statement cannot have both a variable list and an initialization expression, but can
4750 * validly have neither.
4751 */
4752 Expression _initialization;
4753 /**
4754 * The semicolon separating the initializer and the condition.
4755 */
4756 Token _leftSeparator;
4757 /**
4758 * The condition used to determine when to terminate the loop.
4759 */
4760 Expression _condition;
4761 /**
4762 * The semicolon separating the condition and the updater.
4763 */
4764 Token _rightSeparator;
4765 /**
4766 * The list of expressions run after each execution of the loop body.
4767 */
4768 NodeList<Expression> _updaters;
4769 /**
4770 * The right parenthesis.
4771 */
4772 Token _rightParenthesis;
4773 /**
4774 * The body of the loop.
4775 */
4776 Statement _body;
4777 /**
4778 * Initialize a newly created for statement.
4779 * @param forKeyword the token representing the 'for' keyword
4780 * @param leftParenthesis the left parenthesis
4781 * @param variableList the declaration of the loop variables
4782 * @param initialization the initialization expression
4783 * @param leftSeparator the semicolon separating the initializer and the condi tion
4784 * @param condition the condition used to determine when to terminate the loop
4785 * @param rightSeparator the semicolon separating the condition and the update r
4786 * @param updaters the list of expressions run after each execution of the loo p body
4787 * @param rightParenthesis the right parenthesis
4788 * @param body the body of the loop
4789 */
4790 ForStatement.full(Token forKeyword, Token leftParenthesis, VariableDeclaration List variableList, Expression initialization, Token leftSeparator, Expression co ndition, Token rightSeparator, List<Expression> updaters, Token rightParenthesis , Statement body) {
4791 this._updaters = new NodeList<Expression>(this);
4792 this._forKeyword = forKeyword;
4793 this._leftParenthesis = leftParenthesis;
4794 this._variableList = becomeParentOf(variableList);
4795 this._initialization = becomeParentOf(initialization);
4796 this._leftSeparator = leftSeparator;
4797 this._condition = becomeParentOf(condition);
4798 this._rightSeparator = rightSeparator;
4799 this._updaters.addAll(updaters);
4800 this._rightParenthesis = rightParenthesis;
4801 this._body = becomeParentOf(body);
4802 }
4803 /**
4804 * Initialize a newly created for statement.
4805 * @param forKeyword the token representing the 'for' keyword
4806 * @param leftParenthesis the left parenthesis
4807 * @param variableList the declaration of the loop variables
4808 * @param initialization the initialization expression
4809 * @param leftSeparator the semicolon separating the initializer and the condi tion
4810 * @param condition the condition used to determine when to terminate the loop
4811 * @param rightSeparator the semicolon separating the condition and the update r
4812 * @param updaters the list of expressions run after each execution of the loo p body
4813 * @param rightParenthesis the right parenthesis
4814 * @param body the body of the loop
4815 */
4816 ForStatement({Token forKeyword, Token leftParenthesis, VariableDeclarationList variableList, Expression initialization, Token leftSeparator, Expression condit ion, Token rightSeparator, List<Expression> updaters, Token rightParenthesis, St atement body}) : this.full(forKeyword, leftParenthesis, variableList, initializa tion, leftSeparator, condition, rightSeparator, updaters, rightParenthesis, body );
4817 accept(ASTVisitor visitor) => visitor.visitForStatement(this);
4818 Token get beginToken => _forKeyword;
4819 /**
4820 * Return the body of the loop.
4821 * @return the body of the loop
4822 */
4823 Statement get body => _body;
4824 /**
4825 * Return the condition used to determine when to terminate the loop.
4826 * @return the condition used to determine when to terminate the loop
4827 */
4828 Expression get condition => _condition;
4829 Token get endToken => _body.endToken;
4830 /**
4831 * Return the token representing the 'for' keyword.
4832 * @return the token representing the 'for' keyword
4833 */
4834 Token get forKeyword => _forKeyword;
4835 /**
4836 * Return the initialization expression, or {@code null} if there is no initia lization expression.
4837 * @return the initialization expression
4838 */
4839 Expression get initialization => _initialization;
4840 /**
4841 * Return the left parenthesis.
4842 * @return the left parenthesis
4843 */
4844 Token get leftParenthesis => _leftParenthesis;
4845 /**
4846 * Return the semicolon separating the initializer and the condition.
4847 * @return the semicolon separating the initializer and the condition
4848 */
4849 Token get leftSeparator => _leftSeparator;
4850 /**
4851 * Return the right parenthesis.
4852 * @return the right parenthesis
4853 */
4854 Token get rightParenthesis => _rightParenthesis;
4855 /**
4856 * Return the semicolon separating the condition and the updater.
4857 * @return the semicolon separating the condition and the updater
4858 */
4859 Token get rightSeparator => _rightSeparator;
4860 /**
4861 * Return the list of expressions run after each execution of the loop body.
4862 * @return the list of expressions run after each execution of the loop body
4863 */
4864 NodeList<Expression> get updaters => _updaters;
4865 /**
4866 * Return the declaration of the loop variables, or {@code null} if there are no variables.
4867 * @return the declaration of the loop variables, or {@code null} if there are no variables
4868 */
4869 VariableDeclarationList get variables => _variableList;
4870 /**
4871 * Set the body of the loop to the given statement.
4872 * @param body the body of the loop
4873 */
4874 void set body(Statement body3) {
4875 this._body = becomeParentOf(body3);
4876 }
4877 /**
4878 * Set the condition used to determine when to terminate the loop to the given expression.
4879 * @param expression the condition used to determine when to terminate the loo p
4880 */
4881 void set condition(Expression expression) {
4882 _condition = becomeParentOf(expression);
4883 }
4884 /**
4885 * Set the token representing the 'for' keyword to the given token.
4886 * @param forKeyword the token representing the 'for' keyword
4887 */
4888 void set forKeyword(Token forKeyword3) {
4889 this._forKeyword = forKeyword3;
4890 }
4891 /**
4892 * Set the initialization expression to the given expression.
4893 * @param initialization the initialization expression
4894 */
4895 void set initialization(Expression initialization2) {
4896 this._initialization = becomeParentOf(initialization2);
4897 }
4898 /**
4899 * Set the left parenthesis to the given token.
4900 * @param leftParenthesis the left parenthesis
4901 */
4902 void set leftParenthesis(Token leftParenthesis4) {
4903 this._leftParenthesis = leftParenthesis4;
4904 }
4905 /**
4906 * Set the semicolon separating the initializer and the condition to the given token.
4907 * @param leftSeparator the semicolon separating the initializer and the condi tion
4908 */
4909 void set leftSeparator(Token leftSeparator2) {
4910 this._leftSeparator = leftSeparator2;
4911 }
4912 /**
4913 * Set the right parenthesis to the given token.
4914 * @param rightParenthesis the right parenthesis
4915 */
4916 void set rightParenthesis(Token rightParenthesis4) {
4917 this._rightParenthesis = rightParenthesis4;
4918 }
4919 /**
4920 * Set the semicolon separating the condition and the updater to the given tok en.
4921 * @param rightSeparator the semicolon separating the condition and the update r
4922 */
4923 void set rightSeparator(Token rightSeparator2) {
4924 this._rightSeparator = rightSeparator2;
4925 }
4926 /**
4927 * Set the declaration of the loop variables to the given parameter.
4928 * @param variableList the declaration of the loop variables
4929 */
4930 void set variables(VariableDeclarationList variableList) {
4931 variableList = becomeParentOf(variableList);
4932 }
4933 void visitChildren(ASTVisitor<Object> visitor) {
4934 safelyVisitChild(_variableList, visitor);
4935 safelyVisitChild(_initialization, visitor);
4936 safelyVisitChild(_condition, visitor);
4937 _updaters.accept(visitor);
4938 safelyVisitChild(_body, visitor);
4939 }
4940 }
4941 /**
4942 * The abstract class {@code FormalParameter} defines the behavior of objects re presenting a
4943 * parameter to a function.
4944 * <pre>
4945 * formalParameter ::={@link NormalFormalParameter normalFormalParameter}| {@lin k DefaultFormalParameter namedFormalParameter}| {@link DefaultFormalParameter op tionalFormalParameter}</pre>
4946 * @coverage dart.engine.ast
4947 */
4948 abstract class FormalParameter extends ASTNode {
4949 /**
4950 * Return the element representing this parameter, or {@code null} if this par ameter has not been
4951 * resolved.
4952 * @return the element representing this parameter
4953 */
4954 ParameterElement get element {
4955 SimpleIdentifier identifier12 = identifier;
4956 if (identifier12 == null) {
4957 return null;
4958 }
4959 return identifier12.element as ParameterElement;
4960 }
4961 /**
4962 * Return the name of the parameter being declared.
4963 * @return the name of the parameter being declared
4964 */
4965 SimpleIdentifier get identifier;
4966 /**
4967 * Return the kind of this parameter.
4968 * @return the kind of this parameter
4969 */
4970 ParameterKind get kind;
4971 }
4972 /**
4973 * Instances of the class {@code FormalParameterList} represent the formal param eter list of a
4974 * method declaration, function declaration, or function type alias.
4975 * <p>
4976 * While the grammar requires all optional formal parameters to follow all of th e normal formal
4977 * parameters and at most one grouping of optional formal parameters, this class does not enforce
4978 * those constraints. All parameters are flattened into a single list, which can have any or all
4979 * kinds of parameters (normal, named, and positional) in any order.
4980 * <pre>
4981 * formalParameterList ::=
4982 * '(' ')'
4983 * | '(' normalFormalParameters (',' optionalFormalParameters)? ')'
4984 * | '(' optionalFormalParameters ')'
4985 * normalFormalParameters ::={@link NormalFormalParameter normalFormalParameter} (',' {@link NormalFormalParameter normalFormalParameter})
4986 * optionalFormalParameters ::=
4987 * optionalPositionalFormalParameters
4988 * | namedFormalParameters
4989 * optionalPositionalFormalParameters ::=
4990 * '[' {@link DefaultFormalParameter positionalFormalParameter} (',' {@link Defa ultFormalParameter positionalFormalParameter})* ']'
4991 * namedFormalParameters ::=
4992 * '{' {@link DefaultFormalParameter namedFormalParameter} (',' {@link DefaultFo rmalParameter namedFormalParameter})* '}'
4993 * </pre>
4994 * @coverage dart.engine.ast
4995 */
4996 class FormalParameterList extends ASTNode {
4997 /**
4998 * The left parenthesis.
4999 */
5000 Token _leftParenthesis;
5001 /**
5002 * The parameters associated with the method.
5003 */
5004 NodeList<FormalParameter> _parameters;
5005 /**
5006 * The left square bracket ('[') or left curly brace ('{') introducing the opt ional parameters.
5007 */
5008 Token _leftDelimiter;
5009 /**
5010 * The right square bracket (']') or right curly brace ('}') introducing the o ptional parameters.
5011 */
5012 Token _rightDelimiter;
5013 /**
5014 * The right parenthesis.
5015 */
5016 Token _rightParenthesis;
5017 /**
5018 * Initialize a newly created parameter list.
5019 * @param leftParenthesis the left parenthesis
5020 * @param parameters the parameters associated with the method
5021 * @param leftDelimiter the left delimiter introducing the optional parameters
5022 * @param rightDelimiter the right delimiter introducing the optional paramete rs
5023 * @param rightParenthesis the right parenthesis
5024 */
5025 FormalParameterList.full(Token leftParenthesis, List<FormalParameter> paramete rs, Token leftDelimiter, Token rightDelimiter, Token rightParenthesis) {
5026 this._parameters = new NodeList<FormalParameter>(this);
5027 this._leftParenthesis = leftParenthesis;
5028 this._parameters.addAll(parameters);
5029 this._leftDelimiter = leftDelimiter;
5030 this._rightDelimiter = rightDelimiter;
5031 this._rightParenthesis = rightParenthesis;
5032 }
5033 /**
5034 * Initialize a newly created parameter list.
5035 * @param leftParenthesis the left parenthesis
5036 * @param parameters the parameters associated with the method
5037 * @param leftDelimiter the left delimiter introducing the optional parameters
5038 * @param rightDelimiter the right delimiter introducing the optional paramete rs
5039 * @param rightParenthesis the right parenthesis
5040 */
5041 FormalParameterList({Token leftParenthesis, List<FormalParameter> parameters, Token leftDelimiter, Token rightDelimiter, Token rightParenthesis}) : this.full( leftParenthesis, parameters, leftDelimiter, rightDelimiter, rightParenthesis);
5042 accept(ASTVisitor visitor) => visitor.visitFormalParameterList(this);
5043 Token get beginToken => _leftParenthesis;
5044 /**
5045 * Return an array containing the elements representing the parameters in this list. The array
5046 * will contain {@code null}s if the parameters in this list have not been res olved.
5047 * @return the elements representing the parameters in this list
5048 */
5049 List<ParameterElement> get elements {
5050 int count = _parameters.length;
5051 List<ParameterElement> types = new List<ParameterElement>(count);
5052 for (int i = 0; i < count; i++) {
5053 types[i] = _parameters[i].element;
5054 }
5055 return types;
5056 }
5057 Token get endToken => _rightParenthesis;
5058 /**
5059 * Return the left square bracket ('[') or left curly brace ('{') introducing the optional
5060 * parameters.
5061 * @return the left square bracket ('[') or left curly brace ('{') introducing the optional
5062 * parameters
5063 */
5064 Token get leftDelimiter => _leftDelimiter;
5065 /**
5066 * Return the left parenthesis.
5067 * @return the left parenthesis
5068 */
5069 Token get leftParenthesis => _leftParenthesis;
5070 /**
5071 * Return the parameters associated with the method.
5072 * @return the parameters associated with the method
5073 */
5074 NodeList<FormalParameter> get parameters => _parameters;
5075 /**
5076 * Return the right square bracket (']') or right curly brace ('}') introducin g the optional
5077 * parameters.
5078 * @return the right square bracket (']') or right curly brace ('}') introduci ng the optional
5079 * parameters
5080 */
5081 Token get rightDelimiter => _rightDelimiter;
5082 /**
5083 * Return the right parenthesis.
5084 * @return the right parenthesis
5085 */
5086 Token get rightParenthesis => _rightParenthesis;
5087 /**
5088 * Set the left square bracket ('[') or left curly brace ('{') introducing the optional parameters
5089 * to the given token.
5090 * @param bracket the left delimiter introducing the optional parameters
5091 */
5092 void set leftDelimiter(Token bracket) {
5093 _leftDelimiter = bracket;
5094 }
5095 /**
5096 * Set the left parenthesis to the given token.
5097 * @param parenthesis the left parenthesis
5098 */
5099 void set leftParenthesis(Token parenthesis) {
5100 _leftParenthesis = parenthesis;
5101 }
5102 /**
5103 * Set the right square bracket (']') or right curly brace ('}') introducing t he optional
5104 * parameters to the given token.
5105 * @param bracket the right delimiter introducing the optional parameters
5106 */
5107 void set rightDelimiter(Token bracket) {
5108 _rightDelimiter = bracket;
5109 }
5110 /**
5111 * Set the right parenthesis to the given token.
5112 * @param parenthesis the right parenthesis
5113 */
5114 void set rightParenthesis(Token parenthesis) {
5115 _rightParenthesis = parenthesis;
5116 }
5117 void visitChildren(ASTVisitor<Object> visitor) {
5118 _parameters.accept(visitor);
5119 }
5120 }
5121 /**
5122 * The abstract class {@code FunctionBody} defines the behavior common to object s representing the
5123 * body of a function or method.
5124 * <pre>
5125 * functionBody ::={@link BlockFunctionBody blockFunctionBody}| {@link EmptyFunc tionBody emptyFunctionBody}| {@link ExpressionFunctionBody expressionFunctionBod y}</pre>
5126 * @coverage dart.engine.ast
5127 */
5128 abstract class FunctionBody extends ASTNode {
5129 }
5130 /**
5131 * Instances of the class {@code FunctionDeclaration} wrap a {@link FunctionExpr ession function
5132 * expression} as a top-level declaration.
5133 * <pre>
5134 * functionDeclaration ::=
5135 * 'external' functionSignature
5136 * | functionSignature {@link FunctionBody functionBody}functionSignature ::={@l ink Type returnType}? ('get' | 'set')? {@link SimpleIdentifier functionName} {@l ink FormalParameterList formalParameterList}</pre>
5137 * @coverage dart.engine.ast
5138 */
5139 class FunctionDeclaration extends CompilationUnitMember {
5140 /**
5141 * The token representing the 'external' keyword, or {@code null} if this is n ot an external
5142 * function.
5143 */
5144 Token _externalKeyword;
5145 /**
5146 * The return type of the function, or {@code null} if no return type was decl ared.
5147 */
5148 TypeName _returnType;
5149 /**
5150 * The token representing the 'get' or 'set' keyword, or {@code null} if this is a function
5151 * declaration rather than a property declaration.
5152 */
5153 Token _propertyKeyword;
5154 /**
5155 * The name of the function, or {@code null} if the function is not named.
5156 */
5157 SimpleIdentifier _name;
5158 /**
5159 * The function expression being wrapped.
5160 */
5161 FunctionExpression _functionExpression;
5162 /**
5163 * Initialize a newly created function declaration.
5164 * @param comment the documentation comment associated with this function
5165 * @param metadata the annotations associated with this function
5166 * @param externalKeyword the token representing the 'external' keyword
5167 * @param returnType the return type of the function
5168 * @param propertyKeyword the token representing the 'get' or 'set' keyword
5169 * @param name the name of the function
5170 * @param functionExpression the function expression being wrapped
5171 */
5172 FunctionDeclaration.full(Comment comment, List<Annotation> metadata, Token ext ernalKeyword, TypeName returnType, Token propertyKeyword, SimpleIdentifier name, FunctionExpression functionExpression) : super.full(comment, metadata) {
5173 this._externalKeyword = externalKeyword;
5174 this._returnType = becomeParentOf(returnType);
5175 this._propertyKeyword = propertyKeyword;
5176 this._name = becomeParentOf(name);
5177 this._functionExpression = becomeParentOf(functionExpression);
5178 }
5179 /**
5180 * Initialize a newly created function declaration.
5181 * @param comment the documentation comment associated with this function
5182 * @param metadata the annotations associated with this function
5183 * @param externalKeyword the token representing the 'external' keyword
5184 * @param returnType the return type of the function
5185 * @param propertyKeyword the token representing the 'get' or 'set' keyword
5186 * @param name the name of the function
5187 * @param functionExpression the function expression being wrapped
5188 */
5189 FunctionDeclaration({Comment comment, List<Annotation> metadata, Token externa lKeyword, TypeName returnType, Token propertyKeyword, SimpleIdentifier name, Fun ctionExpression functionExpression}) : this.full(comment, metadata, externalKeyw ord, returnType, propertyKeyword, name, functionExpression);
5190 accept(ASTVisitor visitor) => visitor.visitFunctionDeclaration(this);
5191 ExecutableElement get element => _name != null ? (_name.element as ExecutableE lement) : null;
5192 Token get endToken => _functionExpression.endToken;
5193 /**
5194 * Return the token representing the 'external' keyword, or {@code null} if th is is not an
5195 * external function.
5196 * @return the token representing the 'external' keyword
5197 */
5198 Token get externalKeyword => _externalKeyword;
5199 /**
5200 * Return the function expression being wrapped.
5201 * @return the function expression being wrapped
5202 */
5203 FunctionExpression get functionExpression => _functionExpression;
5204 /**
5205 * Return the name of the function, or {@code null} if the function is not nam ed.
5206 * @return the name of the function
5207 */
5208 SimpleIdentifier get name => _name;
5209 /**
5210 * Return the token representing the 'get' or 'set' keyword, or {@code null} i f this is a function
5211 * declaration rather than a property declaration.
5212 * @return the token representing the 'get' or 'set' keyword
5213 */
5214 Token get propertyKeyword => _propertyKeyword;
5215 /**
5216 * Return the return type of the function, or {@code null} if no return type w as declared.
5217 * @return the return type of the function
5218 */
5219 TypeName get returnType => _returnType;
5220 /**
5221 * Set the token representing the 'external' keyword to the given token.
5222 * @param externalKeyword the token representing the 'external' keyword
5223 */
5224 void set externalKeyword(Token externalKeyword3) {
5225 this._externalKeyword = externalKeyword3;
5226 }
5227 /**
5228 * Set the function expression being wrapped to the given function expression.
5229 * @param functionExpression the function expression being wrapped
5230 */
5231 void set functionExpression(FunctionExpression functionExpression3) {
5232 functionExpression3 = becomeParentOf(functionExpression3);
5233 }
5234 /**
5235 * Set the name of the function to the given identifier.
5236 * @param identifier the name of the function
5237 */
5238 void set name(SimpleIdentifier identifier) {
5239 _name = becomeParentOf(identifier);
5240 }
5241 /**
5242 * Set the token representing the 'get' or 'set' keyword to the given token.
5243 * @param propertyKeyword the token representing the 'get' or 'set' keyword
5244 */
5245 void set propertyKeyword(Token propertyKeyword2) {
5246 this._propertyKeyword = propertyKeyword2;
5247 }
5248 /**
5249 * Set the return type of the function to the given name.
5250 * @param name the return type of the function
5251 */
5252 void set returnType(TypeName name) {
5253 _returnType = becomeParentOf(name);
5254 }
5255 void visitChildren(ASTVisitor<Object> visitor) {
5256 super.visitChildren(visitor);
5257 safelyVisitChild(_returnType, visitor);
5258 safelyVisitChild(_name, visitor);
5259 safelyVisitChild(_functionExpression, visitor);
5260 }
5261 Token get firstTokenAfterCommentAndMetadata {
5262 if (_externalKeyword != null) {
5263 return _externalKeyword;
5264 }
5265 if (_returnType != null) {
5266 return _returnType.beginToken;
5267 } else if (_propertyKeyword != null) {
5268 return _propertyKeyword;
5269 } else if (_name != null) {
5270 return _name.beginToken;
5271 }
5272 return _functionExpression.beginToken;
5273 }
5274 }
5275 /**
5276 * Instances of the class {@code FunctionDeclarationStatement} wrap a {@link Fun ctionDeclarationfunction declaration} as a statement.
5277 * @coverage dart.engine.ast
5278 */
5279 class FunctionDeclarationStatement extends Statement {
5280 /**
5281 * The function declaration being wrapped.
5282 */
5283 FunctionDeclaration _functionDeclaration;
5284 /**
5285 * Initialize a newly created function declaration statement.
5286 * @param functionDeclaration the the function declaration being wrapped
5287 */
5288 FunctionDeclarationStatement.full(FunctionDeclaration functionDeclaration) {
5289 this._functionDeclaration = becomeParentOf(functionDeclaration);
5290 }
5291 /**
5292 * Initialize a newly created function declaration statement.
5293 * @param functionDeclaration the the function declaration being wrapped
5294 */
5295 FunctionDeclarationStatement({FunctionDeclaration functionDeclaration}) : this .full(functionDeclaration);
5296 accept(ASTVisitor visitor) => visitor.visitFunctionDeclarationStatement(this);
5297 Token get beginToken => _functionDeclaration.beginToken;
5298 Token get endToken => _functionDeclaration.endToken;
5299 /**
5300 * Return the function declaration being wrapped.
5301 * @return the function declaration being wrapped
5302 */
5303 FunctionDeclaration get functionDeclaration => _functionDeclaration;
5304 /**
5305 * Set the function declaration being wrapped to the given function declaratio n.
5306 * @param functionDeclaration the function declaration being wrapped
5307 */
5308 void set functionExpression(FunctionDeclaration functionDeclaration2) {
5309 this._functionDeclaration = becomeParentOf(functionDeclaration2);
5310 }
5311 void visitChildren(ASTVisitor<Object> visitor) {
5312 safelyVisitChild(_functionDeclaration, visitor);
5313 }
5314 }
5315 /**
5316 * Instances of the class {@code FunctionExpression} represent a function expres sion.
5317 * <pre>
5318 * functionExpression ::={@link FormalParameterList formalParameterList} {@link FunctionBody functionBody}</pre>
5319 * @coverage dart.engine.ast
5320 */
5321 class FunctionExpression extends Expression {
5322 /**
5323 * The parameters associated with the function.
5324 */
5325 FormalParameterList _parameters;
5326 /**
5327 * The body of the function, or {@code null} if this is an external function.
5328 */
5329 FunctionBody _body;
5330 /**
5331 * The element associated with the function, or {@code null} if the AST struct ure has not been
5332 * resolved.
5333 */
5334 ExecutableElement _element;
5335 /**
5336 * Initialize a newly created function declaration.
5337 * @param parameters the parameters associated with the function
5338 * @param body the body of the function
5339 */
5340 FunctionExpression.full(FormalParameterList parameters, FunctionBody body) {
5341 this._parameters = becomeParentOf(parameters);
5342 this._body = becomeParentOf(body);
5343 }
5344 /**
5345 * Initialize a newly created function declaration.
5346 * @param parameters the parameters associated with the function
5347 * @param body the body of the function
5348 */
5349 FunctionExpression({FormalParameterList parameters, FunctionBody body}) : this .full(parameters, body);
5350 accept(ASTVisitor visitor) => visitor.visitFunctionExpression(this);
5351 Token get beginToken {
5352 if (_parameters != null) {
5353 return _parameters.beginToken;
5354 } else if (_body != null) {
5355 return _body.beginToken;
5356 }
5357 throw new IllegalStateException("Non-external functions must have a body");
5358 }
5359 /**
5360 * Return the body of the function, or {@code null} if this is an external fun ction.
5361 * @return the body of the function
5362 */
5363 FunctionBody get body => _body;
5364 /**
5365 * Return the element associated with this function, or {@code null} if the AS T structure has not
5366 * been resolved.
5367 * @return the element associated with this function
5368 */
5369 ExecutableElement get element => _element;
5370 Token get endToken {
5371 if (_body != null) {
5372 return _body.endToken;
5373 } else if (_parameters != null) {
5374 return _parameters.endToken;
5375 }
5376 throw new IllegalStateException("Non-external functions must have a body");
5377 }
5378 /**
5379 * Return the parameters associated with the function.
5380 * @return the parameters associated with the function
5381 */
5382 FormalParameterList get parameters => _parameters;
5383 /**
5384 * Set the body of the function to the given function body.
5385 * @param functionBody the body of the function
5386 */
5387 void set body(FunctionBody functionBody) {
5388 _body = becomeParentOf(functionBody);
5389 }
5390 /**
5391 * Set the element associated with this function to the given element.
5392 * @param element the element associated with this function
5393 */
5394 void set element(ExecutableElement element9) {
5395 this._element = element9;
5396 }
5397 /**
5398 * Set the parameters associated with the function to the given list of parame ters.
5399 * @param parameters the parameters associated with the function
5400 */
5401 void set parameters(FormalParameterList parameters3) {
5402 this._parameters = becomeParentOf(parameters3);
5403 }
5404 void visitChildren(ASTVisitor<Object> visitor) {
5405 safelyVisitChild(_parameters, visitor);
5406 safelyVisitChild(_body, visitor);
5407 }
5408 }
5409 /**
5410 * Instances of the class {@code FunctionExpressionInvocation} represent the inv ocation of a
5411 * function resulting from evaluating an expression. Invocations of methods and other forms of
5412 * functions are represented by {@link MethodInvocation method invocation} nodes . Invocations of
5413 * getters and setters are represented by either {@link PrefixedIdentifier prefi xed identifier} or{@link PropertyAccess property access} nodes.
5414 * <pre>
5415 * functionExpressionInvoction ::={@link Expression function} {@link ArgumentLis t argumentList}</pre>
5416 * @coverage dart.engine.ast
5417 */
5418 class FunctionExpressionInvocation extends Expression {
5419 /**
5420 * The expression producing the function being invoked.
5421 */
5422 Expression _function;
5423 /**
5424 * The list of arguments to the function.
5425 */
5426 ArgumentList _argumentList;
5427 /**
5428 * The element associated with the function being invoked, or {@code null} if the AST structure
5429 * has not been resolved or the function could not be resolved.
5430 */
5431 ExecutableElement _element;
5432 /**
5433 * Initialize a newly created function expression invocation.
5434 * @param function the expression producing the function being invoked
5435 * @param argumentList the list of arguments to the method
5436 */
5437 FunctionExpressionInvocation.full(Expression function, ArgumentList argumentLi st) {
5438 this._function = becomeParentOf(function);
5439 this._argumentList = becomeParentOf(argumentList);
5440 }
5441 /**
5442 * Initialize a newly created function expression invocation.
5443 * @param function the expression producing the function being invoked
5444 * @param argumentList the list of arguments to the method
5445 */
5446 FunctionExpressionInvocation({Expression function, ArgumentList argumentList}) : this.full(function, argumentList);
5447 accept(ASTVisitor visitor) => visitor.visitFunctionExpressionInvocation(this);
5448 /**
5449 * Return the list of arguments to the method.
5450 * @return the list of arguments to the method
5451 */
5452 ArgumentList get argumentList => _argumentList;
5453 Token get beginToken => _function.beginToken;
5454 /**
5455 * Return the element associated with the function being invoked, or {@code nu ll} if the AST
5456 * structure has not been resolved or the function could not be resolved. One common example of
5457 * the latter case is an expression whose value can change over time.
5458 * @return the element associated with the function being invoked
5459 */
5460 ExecutableElement get element => _element;
5461 Token get endToken => _argumentList.endToken;
5462 /**
5463 * Return the expression producing the function being invoked.
5464 * @return the expression producing the function being invoked
5465 */
5466 Expression get function => _function;
5467 /**
5468 * Set the list of arguments to the method to the given list.
5469 * @param argumentList the list of arguments to the method
5470 */
5471 void set argumentList(ArgumentList argumentList5) {
5472 this._argumentList = becomeParentOf(argumentList5);
5473 }
5474 /**
5475 * Set the element associated with the function being invoked to the given ele ment.
5476 * @param element the element associated with the function being invoked
5477 */
5478 void set element(ExecutableElement element10) {
5479 this._element = element10;
5480 }
5481 /**
5482 * Set the expression producing the function being invoked to the given expres sion.
5483 * @param function the expression producing the function being invoked
5484 */
5485 void set function(Expression function2) {
5486 function2 = becomeParentOf(function2);
5487 }
5488 void visitChildren(ASTVisitor<Object> visitor) {
5489 safelyVisitChild(_function, visitor);
5490 safelyVisitChild(_argumentList, visitor);
5491 }
5492 }
5493 /**
5494 * Instances of the class {@code FunctionTypeAlias} represent a function type al ias.
5495 * <pre>
5496 * functionTypeAlias ::=
5497 * functionPrefix {@link TypeParameterList typeParameterList}? {@link FormalPara meterList formalParameterList} ';'
5498 * functionPrefix ::={@link TypeName returnType}? {@link SimpleIdentifier name}< /pre>
5499 * @coverage dart.engine.ast
5500 */
5501 class FunctionTypeAlias extends TypeAlias {
5502 /**
5503 * The name of the return type of the function type being defined, or {@code n ull} if no return
5504 * type was given.
5505 */
5506 TypeName _returnType;
5507 /**
5508 * The name of the function type being declared.
5509 */
5510 SimpleIdentifier _name;
5511 /**
5512 * The type parameters for the function type, or {@code null} if the function type does not have
5513 * any type parameters.
5514 */
5515 TypeParameterList _typeParameters;
5516 /**
5517 * The parameters associated with the function type.
5518 */
5519 FormalParameterList _parameters;
5520 /**
5521 * Initialize a newly created function type alias.
5522 * @param comment the documentation comment associated with this type alias
5523 * @param metadata the annotations associated with this type alias
5524 * @param keyword the token representing the 'typedef' keyword
5525 * @param returnType the name of the return type of the function type being de fined
5526 * @param name the name of the type being declared
5527 * @param typeParameters the type parameters for the type
5528 * @param parameters the parameters associated with the function
5529 * @param semicolon the semicolon terminating the declaration
5530 */
5531 FunctionTypeAlias.full(Comment comment, List<Annotation> metadata, Token keywo rd, TypeName returnType, SimpleIdentifier name, TypeParameterList typeParameters , FormalParameterList parameters, Token semicolon) : super.full(comment, metadat a, keyword, semicolon) {
5532 this._returnType = becomeParentOf(returnType);
5533 this._name = becomeParentOf(name);
5534 this._typeParameters = becomeParentOf(typeParameters);
5535 this._parameters = becomeParentOf(parameters);
5536 }
5537 /**
5538 * Initialize a newly created function type alias.
5539 * @param comment the documentation comment associated with this type alias
5540 * @param metadata the annotations associated with this type alias
5541 * @param keyword the token representing the 'typedef' keyword
5542 * @param returnType the name of the return type of the function type being de fined
5543 * @param name the name of the type being declared
5544 * @param typeParameters the type parameters for the type
5545 * @param parameters the parameters associated with the function
5546 * @param semicolon the semicolon terminating the declaration
5547 */
5548 FunctionTypeAlias({Comment comment, List<Annotation> metadata, Token keyword, TypeName returnType, SimpleIdentifier name, TypeParameterList typeParameters, Fo rmalParameterList parameters, Token semicolon}) : this.full(comment, metadata, k eyword, returnType, name, typeParameters, parameters, semicolon);
5549 accept(ASTVisitor visitor) => visitor.visitFunctionTypeAlias(this);
5550 TypeAliasElement get element => _name != null ? (_name.element as TypeAliasEle ment) : null;
5551 /**
5552 * Return the name of the function type being declared.
5553 * @return the name of the function type being declared
5554 */
5555 SimpleIdentifier get name => _name;
5556 /**
5557 * Return the parameters associated with the function type.
5558 * @return the parameters associated with the function type
5559 */
5560 FormalParameterList get parameters => _parameters;
5561 /**
5562 * Return the name of the return type of the function type being defined, or { @code null} if no
5563 * return type was given.
5564 * @return the name of the return type of the function type being defined
5565 */
5566 TypeName get returnType => _returnType;
5567 /**
5568 * Return the type parameters for the function type, or {@code null} if the fu nction type does not
5569 * have any type parameters.
5570 * @return the type parameters for the function type
5571 */
5572 TypeParameterList get typeParameters => _typeParameters;
5573 /**
5574 * Set the name of the function type being declared to the given identifier.
5575 * @param name the name of the function type being declared
5576 */
5577 void set name(SimpleIdentifier name5) {
5578 this._name = becomeParentOf(name5);
5579 }
5580 /**
5581 * Set the parameters associated with the function type to the given list of p arameters.
5582 * @param parameters the parameters associated with the function type
5583 */
5584 void set parameters(FormalParameterList parameters4) {
5585 this._parameters = becomeParentOf(parameters4);
5586 }
5587 /**
5588 * Set the name of the return type of the function type being defined to the g iven type name.
5589 * @param typeName the name of the return type of the function type being defi ned
5590 */
5591 void set returnType(TypeName typeName) {
5592 _returnType = becomeParentOf(typeName);
5593 }
5594 /**
5595 * Set the type parameters for the function type to the given list of paramete rs.
5596 * @param typeParameters the type parameters for the function type
5597 */
5598 void set typeParameters(TypeParameterList typeParameters4) {
5599 this._typeParameters = becomeParentOf(typeParameters4);
5600 }
5601 void visitChildren(ASTVisitor<Object> visitor) {
5602 super.visitChildren(visitor);
5603 safelyVisitChild(_returnType, visitor);
5604 safelyVisitChild(_name, visitor);
5605 safelyVisitChild(_typeParameters, visitor);
5606 safelyVisitChild(_parameters, visitor);
5607 }
5608 }
5609 /**
5610 * Instances of the class {@code FunctionTypedFormalParameter} represent a funct ion-typed formal
5611 * parameter.
5612 * <pre>
5613 * functionSignature ::={@link TypeName returnType}? {@link SimpleIdentifier ide ntifier} {@link FormalParameterList formalParameterList}</pre>
5614 * @coverage dart.engine.ast
5615 */
5616 class FunctionTypedFormalParameter extends NormalFormalParameter {
5617 /**
5618 * The return type of the function, or {@code null} if the function does not h ave a return type.
5619 */
5620 TypeName _returnType;
5621 /**
5622 * The parameters of the function-typed parameter.
5623 */
5624 FormalParameterList _parameters;
5625 /**
5626 * Initialize a newly created formal parameter.
5627 * @param comment the documentation comment associated with this parameter
5628 * @param metadata the annotations associated with this parameter
5629 * @param returnType the return type of the function, or {@code null} if the f unction does not
5630 * have a return type
5631 * @param identifier the name of the function-typed parameter
5632 * @param parameters the parameters of the function-typed parameter
5633 */
5634 FunctionTypedFormalParameter.full(Comment comment, List<Annotation> metadata, TypeName returnType, SimpleIdentifier identifier, FormalParameterList parameters ) : super.full(comment, metadata, identifier) {
5635 this._returnType = becomeParentOf(returnType);
5636 this._parameters = becomeParentOf(parameters);
5637 }
5638 /**
5639 * Initialize a newly created formal parameter.
5640 * @param comment the documentation comment associated with this parameter
5641 * @param metadata the annotations associated with this parameter
5642 * @param returnType the return type of the function, or {@code null} if the f unction does not
5643 * have a return type
5644 * @param identifier the name of the function-typed parameter
5645 * @param parameters the parameters of the function-typed parameter
5646 */
5647 FunctionTypedFormalParameter({Comment comment, List<Annotation> metadata, Type Name returnType, SimpleIdentifier identifier, FormalParameterList parameters}) : this.full(comment, metadata, returnType, identifier, parameters);
5648 accept(ASTVisitor visitor) => visitor.visitFunctionTypedFormalParameter(this);
5649 Token get beginToken {
5650 if (_returnType != null) {
5651 return _returnType.beginToken;
5652 }
5653 return identifier.beginToken;
5654 }
5655 Token get endToken => _parameters.endToken;
5656 /**
5657 * Return the parameters of the function-typed parameter.
5658 * @return the parameters of the function-typed parameter
5659 */
5660 FormalParameterList get parameters => _parameters;
5661 /**
5662 * Return the return type of the function, or {@code null} if the function doe s not have a return
5663 * type.
5664 * @return the return type of the function
5665 */
5666 TypeName get returnType => _returnType;
5667 bool isConst() => false;
5668 bool isFinal() => false;
5669 /**
5670 * Set the parameters of the function-typed parameter to the given parameters.
5671 * @param parameters the parameters of the function-typed parameter
5672 */
5673 void set parameters(FormalParameterList parameters5) {
5674 this._parameters = becomeParentOf(parameters5);
5675 }
5676 /**
5677 * Set the return type of the function to the given type.
5678 * @param returnType the return type of the function
5679 */
5680 void set returnType(TypeName returnType2) {
5681 this._returnType = becomeParentOf(returnType2);
5682 }
5683 void visitChildren(ASTVisitor<Object> visitor) {
5684 super.visitChildren(visitor);
5685 safelyVisitChild(_returnType, visitor);
5686 safelyVisitChild(identifier, visitor);
5687 safelyVisitChild(_parameters, visitor);
5688 }
5689 }
5690 /**
5691 * Instances of the class {@code HideCombinator} represent a combinator that res tricts the names
5692 * being imported to those that are not in a given list.
5693 * <pre>
5694 * hideCombinator ::=
5695 * 'hide' {@link SimpleIdentifier identifier} (',' {@link SimpleIdentifier ident ifier})
5696 * </pre>
5697 * @coverage dart.engine.ast
5698 */
5699 class HideCombinator extends Combinator {
5700 /**
5701 * The list of names from the library that are hidden by this combinator.
5702 */
5703 NodeList<SimpleIdentifier> _hiddenNames;
5704 /**
5705 * Initialize a newly created import show combinator.
5706 * @param keyword the comma introducing the combinator
5707 * @param hiddenNames the list of names from the library that are hidden by th is combinator
5708 */
5709 HideCombinator.full(Token keyword, List<SimpleIdentifier> hiddenNames) : super .full(keyword) {
5710 this._hiddenNames = new NodeList<SimpleIdentifier>(this);
5711 this._hiddenNames.addAll(hiddenNames);
5712 }
5713 /**
5714 * Initialize a newly created import show combinator.
5715 * @param keyword the comma introducing the combinator
5716 * @param hiddenNames the list of names from the library that are hidden by th is combinator
5717 */
5718 HideCombinator({Token keyword, List<SimpleIdentifier> hiddenNames}) : this.ful l(keyword, hiddenNames);
5719 accept(ASTVisitor visitor) => visitor.visitHideCombinator(this);
5720 Token get endToken => _hiddenNames.endToken;
5721 /**
5722 * Return the list of names from the library that are hidden by this combinato r.
5723 * @return the list of names from the library that are hidden by this combinat or
5724 */
5725 NodeList<SimpleIdentifier> get hiddenNames => _hiddenNames;
5726 void visitChildren(ASTVisitor<Object> visitor) {
5727 _hiddenNames.accept(visitor);
5728 }
5729 }
5730 /**
5731 * The abstract class {@code Identifier} defines the behavior common to nodes th at represent an
5732 * identifier.
5733 * <pre>
5734 * identifier ::={@link SimpleIdentifier simpleIdentifier}| {@link PrefixedIdent ifier prefixedIdentifier}</pre>
5735 * @coverage dart.engine.ast
5736 */
5737 abstract class Identifier extends Expression {
5738 /**
5739 * Return {@code true} if the given name is visible only within the library in which it is
5740 * declared.
5741 * @param name the name being tested
5742 * @return {@code true} if the given name is private
5743 */
5744 static bool isPrivateName(String name) => name.startsWith("_");
5745 /**
5746 * Return the element associated with this identifier, or {@code null} if the AST structure has
5747 * not been resolved or if this identifier could not be resolved. One example of the latter case
5748 * is an identifier that is not defined within the scope in which it appears.
5749 * @return the element associated with this identifier
5750 */
5751 Element get element;
5752 /**
5753 * Return the lexical representation of the identifier.
5754 * @return the lexical representation of the identifier
5755 */
5756 String get name;
5757 bool isAssignable() => true;
5758 }
5759 /**
5760 * Instances of the class {@code IfStatement} represent an if statement.
5761 * <pre>
5762 * ifStatement ::=
5763 * 'if' '(' {@link Expression expression} ')' {@link Statement thenStatement} (' else' {@link Statement elseStatement})?
5764 * </pre>
5765 * @coverage dart.engine.ast
5766 */
5767 class IfStatement extends Statement {
5768 /**
5769 * The token representing the 'if' keyword.
5770 */
5771 Token _ifKeyword;
5772 /**
5773 * The left parenthesis.
5774 */
5775 Token _leftParenthesis;
5776 /**
5777 * The condition used to determine which of the statements is executed next.
5778 */
5779 Expression _condition;
5780 /**
5781 * The right parenthesis.
5782 */
5783 Token _rightParenthesis;
5784 /**
5785 * The statement that is executed if the condition evaluates to {@code true}.
5786 */
5787 Statement _thenStatement;
5788 /**
5789 * The token representing the 'else' keyword.
5790 */
5791 Token _elseKeyword;
5792 /**
5793 * The statement that is executed if the condition evaluates to {@code false}, or {@code null} if
5794 * there is no else statement.
5795 */
5796 Statement _elseStatement;
5797 /**
5798 * Initialize a newly created if statement.
5799 * @param ifKeyword the token representing the 'if' keyword
5800 * @param leftParenthesis the left parenthesis
5801 * @param condition the condition used to determine which of the statements is executed next
5802 * @param rightParenthesis the right parenthesis
5803 * @param thenStatement the statement that is executed if the condition evalua tes to {@code true}
5804 * @param elseKeyword the token representing the 'else' keyword
5805 * @param elseStatement the statement that is executed if the condition evalua tes to {@code false}
5806 */
5807 IfStatement.full(Token ifKeyword, Token leftParenthesis, Expression condition, Token rightParenthesis, Statement thenStatement, Token elseKeyword, Statement e lseStatement) {
5808 this._ifKeyword = ifKeyword;
5809 this._leftParenthesis = leftParenthesis;
5810 this._condition = becomeParentOf(condition);
5811 this._rightParenthesis = rightParenthesis;
5812 this._thenStatement = becomeParentOf(thenStatement);
5813 this._elseKeyword = elseKeyword;
5814 this._elseStatement = becomeParentOf(elseStatement);
5815 }
5816 /**
5817 * Initialize a newly created if statement.
5818 * @param ifKeyword the token representing the 'if' keyword
5819 * @param leftParenthesis the left parenthesis
5820 * @param condition the condition used to determine which of the statements is executed next
5821 * @param rightParenthesis the right parenthesis
5822 * @param thenStatement the statement that is executed if the condition evalua tes to {@code true}
5823 * @param elseKeyword the token representing the 'else' keyword
5824 * @param elseStatement the statement that is executed if the condition evalua tes to {@code false}
5825 */
5826 IfStatement({Token ifKeyword, Token leftParenthesis, Expression condition, Tok en rightParenthesis, Statement thenStatement, Token elseKeyword, Statement elseS tatement}) : this.full(ifKeyword, leftParenthesis, condition, rightParenthesis, thenStatement, elseKeyword, elseStatement);
5827 accept(ASTVisitor visitor) => visitor.visitIfStatement(this);
5828 Token get beginToken => _ifKeyword;
5829 /**
5830 * Return the condition used to determine which of the statements is executed next.
5831 * @return the condition used to determine which statement is executed next
5832 */
5833 Expression get condition => _condition;
5834 /**
5835 * Return the token representing the 'else' keyword.
5836 * @return the token representing the 'else' keyword
5837 */
5838 Token get elseKeyword => _elseKeyword;
5839 /**
5840 * Return the statement that is executed if the condition evaluates to {@code false}, or{@code null} if there is no else statement.
5841 * @return the statement that is executed if the condition evaluates to {@code false}
5842 */
5843 Statement get elseStatement => _elseStatement;
5844 Token get endToken {
5845 if (_elseStatement != null) {
5846 return _elseStatement.endToken;
5847 }
5848 return _thenStatement.endToken;
5849 }
5850 /**
5851 * Return the token representing the 'if' keyword.
5852 * @return the token representing the 'if' keyword
5853 */
5854 Token get ifKeyword => _ifKeyword;
5855 /**
5856 * Return the left parenthesis.
5857 * @return the left parenthesis
5858 */
5859 Token get leftParenthesis => _leftParenthesis;
5860 /**
5861 * Return the right parenthesis.
5862 * @return the right parenthesis
5863 */
5864 Token get rightParenthesis => _rightParenthesis;
5865 /**
5866 * Return the statement that is executed if the condition evaluates to {@code true}.
5867 * @return the statement that is executed if the condition evaluates to {@code true}
5868 */
5869 Statement get thenStatement => _thenStatement;
5870 /**
5871 * Set the condition used to determine which of the statements is executed nex t to the given
5872 * expression.
5873 * @param expression the condition used to determine which statement is execut ed next
5874 */
5875 void set condition(Expression expression) {
5876 _condition = becomeParentOf(expression);
5877 }
5878 /**
5879 * Set the token representing the 'else' keyword to the given token.
5880 * @param elseKeyword the token representing the 'else' keyword
5881 */
5882 void set elseKeyword(Token elseKeyword2) {
5883 this._elseKeyword = elseKeyword2;
5884 }
5885 /**
5886 * Set the statement that is executed if the condition evaluates to {@code fal se} to the given
5887 * statement.
5888 * @param statement the statement that is executed if the condition evaluates to {@code false}
5889 */
5890 void set elseStatement(Statement statement) {
5891 _elseStatement = becomeParentOf(statement);
5892 }
5893 /**
5894 * Set the token representing the 'if' keyword to the given token.
5895 * @param ifKeyword the token representing the 'if' keyword
5896 */
5897 void set ifKeyword(Token ifKeyword2) {
5898 this._ifKeyword = ifKeyword2;
5899 }
5900 /**
5901 * Set the left parenthesis to the given token.
5902 * @param leftParenthesis the left parenthesis
5903 */
5904 void set leftParenthesis(Token leftParenthesis5) {
5905 this._leftParenthesis = leftParenthesis5;
5906 }
5907 /**
5908 * Set the right parenthesis to the given token.
5909 * @param rightParenthesis the right parenthesis
5910 */
5911 void set rightParenthesis(Token rightParenthesis5) {
5912 this._rightParenthesis = rightParenthesis5;
5913 }
5914 /**
5915 * Set the statement that is executed if the condition evaluates to {@code tru e} to the given
5916 * statement.
5917 * @param statement the statement that is executed if the condition evaluates to {@code true}
5918 */
5919 void set thenStatement(Statement statement) {
5920 _thenStatement = becomeParentOf(statement);
5921 }
5922 void visitChildren(ASTVisitor<Object> visitor) {
5923 safelyVisitChild(_condition, visitor);
5924 safelyVisitChild(_thenStatement, visitor);
5925 safelyVisitChild(_elseStatement, visitor);
5926 }
5927 }
5928 /**
5929 * Instances of the class {@code ImplementsClause} represent the "implements" cl ause in an class
5930 * declaration.
5931 * <pre>
5932 * implementsClause ::=
5933 * 'implements' {@link TypeName superclass} (',' {@link TypeName superclass})
5934 * </pre>
5935 * @coverage dart.engine.ast
5936 */
5937 class ImplementsClause extends ASTNode {
5938 /**
5939 * The token representing the 'implements' keyword.
5940 */
5941 Token _keyword;
5942 /**
5943 * The interfaces that are being implemented.
5944 */
5945 NodeList<TypeName> _interfaces;
5946 /**
5947 * Initialize a newly created extends clause.
5948 * @param keyword the token representing the 'implements' keyword
5949 * @param interfaces the interfaces that are being implemented
5950 */
5951 ImplementsClause.full(Token keyword, List<TypeName> interfaces) {
5952 this._interfaces = new NodeList<TypeName>(this);
5953 this._keyword = keyword;
5954 this._interfaces.addAll(interfaces);
5955 }
5956 /**
5957 * Initialize a newly created extends clause.
5958 * @param keyword the token representing the 'implements' keyword
5959 * @param interfaces the interfaces that are being implemented
5960 */
5961 ImplementsClause({Token keyword, List<TypeName> interfaces}) : this.full(keywo rd, interfaces);
5962 accept(ASTVisitor visitor) => visitor.visitImplementsClause(this);
5963 Token get beginToken => _keyword;
5964 Token get endToken => _interfaces.endToken;
5965 /**
5966 * Return the list of the interfaces that are being implemented.
5967 * @return the list of the interfaces that are being implemented
5968 */
5969 NodeList<TypeName> get interfaces => _interfaces;
5970 /**
5971 * Return the token representing the 'implements' keyword.
5972 * @return the token representing the 'implements' keyword
5973 */
5974 Token get keyword => _keyword;
5975 /**
5976 * Set the token representing the 'implements' keyword to the given token.
5977 * @param keyword the token representing the 'implements' keyword
5978 */
5979 void set keyword(Token keyword12) {
5980 this._keyword = keyword12;
5981 }
5982 void visitChildren(ASTVisitor<Object> visitor) {
5983 _interfaces.accept(visitor);
5984 }
5985 }
5986 /**
5987 * Instances of the class {@code ImportDirective} represent an import directive.
5988 * <pre>
5989 * importDirective ::={@link Annotation metadata} 'import' {@link StringLiteral libraryUri} ('as' identifier)? {@link Combinator combinator}* ';'
5990 * </pre>
5991 * @coverage dart.engine.ast
5992 */
5993 class ImportDirective extends NamespaceDirective {
5994 /**
5995 * The token representing the 'as' token, or {@code null} if the imported name s are not prefixed.
5996 */
5997 Token _asToken;
5998 /**
5999 * The prefix to be used with the imported names, or {@code null} if the impor ted names are not
6000 * prefixed.
6001 */
6002 SimpleIdentifier _prefix;
6003 /**
6004 * Initialize a newly created import directive.
6005 * @param comment the documentation comment associated with this directive
6006 * @param metadata the annotations associated with the directive
6007 * @param keyword the token representing the 'import' keyword
6008 * @param libraryUri the URI of the library being imported
6009 * @param asToken the token representing the 'as' token
6010 * @param prefix the prefix to be used with the imported names
6011 * @param combinators the combinators used to control how names are imported
6012 * @param semicolon the semicolon terminating the directive
6013 */
6014 ImportDirective.full(Comment comment, List<Annotation> metadata, Token keyword , StringLiteral libraryUri, Token asToken, SimpleIdentifier prefix, List<Combina tor> combinators, Token semicolon) : super.full(comment, metadata, keyword, libr aryUri, combinators, semicolon) {
6015 this._asToken = asToken;
6016 this._prefix = becomeParentOf(prefix);
6017 }
6018 /**
6019 * Initialize a newly created import directive.
6020 * @param comment the documentation comment associated with this directive
6021 * @param metadata the annotations associated with the directive
6022 * @param keyword the token representing the 'import' keyword
6023 * @param libraryUri the URI of the library being imported
6024 * @param asToken the token representing the 'as' token
6025 * @param prefix the prefix to be used with the imported names
6026 * @param combinators the combinators used to control how names are imported
6027 * @param semicolon the semicolon terminating the directive
6028 */
6029 ImportDirective({Comment comment, List<Annotation> metadata, Token keyword, St ringLiteral libraryUri, Token asToken, SimpleIdentifier prefix, List<Combinator> combinators, Token semicolon}) : this.full(comment, metadata, keyword, libraryU ri, asToken, prefix, combinators, semicolon);
6030 accept(ASTVisitor visitor) => visitor.visitImportDirective(this);
6031 /**
6032 * Return the token representing the 'as' token, or {@code null} if the import ed names are not
6033 * prefixed.
6034 * @return the token representing the 'as' token
6035 */
6036 Token get asToken => _asToken;
6037 /**
6038 * Return the prefix to be used with the imported names, or {@code null} if th e imported names are
6039 * not prefixed.
6040 * @return the prefix to be used with the imported names
6041 */
6042 SimpleIdentifier get prefix => _prefix;
6043 /**
6044 * Set the token representing the 'as' token to the given token.
6045 * @param asToken the token representing the 'as' token
6046 */
6047 void set asToken(Token asToken2) {
6048 this._asToken = asToken2;
6049 }
6050 /**
6051 * Set the prefix to be used with the imported names to the given identifier.
6052 * @param prefix the prefix to be used with the imported names
6053 */
6054 void set prefix(SimpleIdentifier prefix2) {
6055 this._prefix = becomeParentOf(prefix2);
6056 }
6057 void visitChildren(ASTVisitor<Object> visitor) {
6058 super.visitChildren(visitor);
6059 safelyVisitChild(_prefix, visitor);
6060 combinators.accept(visitor);
6061 }
6062 }
6063 /**
6064 * Instances of the class {@code IndexExpression} represent an index expression.
6065 * <pre>
6066 * indexExpression ::={@link Expression target} '[' {@link Expression index} ']'
6067 * </pre>
6068 * @coverage dart.engine.ast
6069 */
6070 class IndexExpression extends Expression {
6071 /**
6072 * The expression used to compute the object being indexed, or {@code null} if this index
6073 * expression is part of a cascade expression.
6074 */
6075 Expression _target;
6076 /**
6077 * The period ("..") before a cascaded index expression, or {@code null} if th is index expression
6078 * is not part of a cascade expression.
6079 */
6080 Token _period;
6081 /**
6082 * The left square bracket.
6083 */
6084 Token _leftBracket;
6085 /**
6086 * The expression used to compute the index.
6087 */
6088 Expression _index;
6089 /**
6090 * The right square bracket.
6091 */
6092 Token _rightBracket;
6093 /**
6094 * The element associated with the operator, or {@code null} if the AST struct ure has not been
6095 * resolved or if the operator could not be resolved.
6096 */
6097 MethodElement _element;
6098 /**
6099 * Initialize a newly created index expression.
6100 * @param target the expression used to compute the object being indexed
6101 * @param leftBracket the left square bracket
6102 * @param index the expression used to compute the index
6103 * @param rightBracket the right square bracket
6104 */
6105 IndexExpression.forTarget_full(Expression target3, Token leftBracket4, Express ion index2, Token rightBracket4) {
6106 _jtd_constructor_58_impl(target3, leftBracket4, index2, rightBracket4);
6107 }
6108 /**
6109 * Initialize a newly created index expression.
6110 * @param target the expression used to compute the object being indexed
6111 * @param leftBracket the left square bracket
6112 * @param index the expression used to compute the index
6113 * @param rightBracket the right square bracket
6114 */
6115 IndexExpression.forTarget({Expression target3, Token leftBracket4, Expression index2, Token rightBracket4}) : this.forTarget_full(target3, leftBracket4, index 2, rightBracket4);
6116 _jtd_constructor_58_impl(Expression target3, Token leftBracket4, Expression in dex2, Token rightBracket4) {
6117 this._target = becomeParentOf(target3);
6118 this._leftBracket = leftBracket4;
6119 this._index = becomeParentOf(index2);
6120 this._rightBracket = rightBracket4;
6121 }
6122 /**
6123 * Initialize a newly created index expression.
6124 * @param period the period ("..") before a cascaded index expression
6125 * @param leftBracket the left square bracket
6126 * @param index the expression used to compute the index
6127 * @param rightBracket the right square bracket
6128 */
6129 IndexExpression.forCascade_full(Token period7, Token leftBracket5, Expression index3, Token rightBracket5) {
6130 _jtd_constructor_59_impl(period7, leftBracket5, index3, rightBracket5);
6131 }
6132 /**
6133 * Initialize a newly created index expression.
6134 * @param period the period ("..") before a cascaded index expression
6135 * @param leftBracket the left square bracket
6136 * @param index the expression used to compute the index
6137 * @param rightBracket the right square bracket
6138 */
6139 IndexExpression.forCascade({Token period7, Token leftBracket5, Expression inde x3, Token rightBracket5}) : this.forCascade_full(period7, leftBracket5, index3, rightBracket5);
6140 _jtd_constructor_59_impl(Token period7, Token leftBracket5, Expression index3, Token rightBracket5) {
6141 this._period = period7;
6142 this._leftBracket = leftBracket5;
6143 this._index = becomeParentOf(index3);
6144 this._rightBracket = rightBracket5;
6145 }
6146 accept(ASTVisitor visitor) => visitor.visitIndexExpression(this);
6147 /**
6148 * Return the expression used to compute the object being indexed, or {@code n ull} if this index
6149 * expression is part of a cascade expression.
6150 * @return the expression used to compute the object being indexed
6151 * @see #getRealTarget()
6152 */
6153 Expression get array => _target;
6154 Token get beginToken {
6155 if (_target != null) {
6156 return _target.beginToken;
6157 }
6158 return _period;
6159 }
6160 /**
6161 * Return the element associated with the operator, or {@code null} if the AST structure has not
6162 * been resolved or if the operator could not be resolved. One example of the latter case is an
6163 * operator that is not defined for the type of the left-hand operand.
6164 * @return the element associated with this operator
6165 */
6166 MethodElement get element => _element;
6167 Token get endToken => _rightBracket;
6168 /**
6169 * Return the expression used to compute the index.
6170 * @return the expression used to compute the index
6171 */
6172 Expression get index => _index;
6173 /**
6174 * Return the left square bracket.
6175 * @return the left square bracket
6176 */
6177 Token get leftBracket => _leftBracket;
6178 /**
6179 * Return the period ("..") before a cascaded index expression, or {@code null } if this index
6180 * expression is not part of a cascade expression.
6181 * @return the period ("..") before a cascaded index expression
6182 */
6183 Token get period => _period;
6184 /**
6185 * Return the expression used to compute the object being indexed. If this ind ex expression is not
6186 * part of a cascade expression, then this is the same as {@link #getArray()}. If this index
6187 * expression is part of a cascade expression, then the target expression stor ed with the cascade
6188 * expression is returned.
6189 * @return the expression used to compute the object being indexed
6190 * @see #getArray()
6191 */
6192 Expression get realTarget {
6193 if (isCascaded()) {
6194 ASTNode ancestor = parent;
6195 while (ancestor is! CascadeExpression) {
6196 if (ancestor == null) {
6197 return _target;
6198 }
6199 ancestor = ancestor.parent;
6200 }
6201 return ((ancestor as CascadeExpression)).target;
6202 }
6203 return _target;
6204 }
6205 /**
6206 * Return the right square bracket.
6207 * @return the right square bracket
6208 */
6209 Token get rightBracket => _rightBracket;
6210 /**
6211 * Return {@code true} if this expression is computing a right-hand value.
6212 * <p>
6213 * Note that {@link #inGetterContext()} and {@link #inSetterContext()} are not opposites, nor are
6214 * they mutually exclusive. In other words, it is possible for both methods to return {@code true}when invoked on the same node.
6215 * @return {@code true} if this expression is in a context where the operator '[]' will be invoked
6216 */
6217 bool inGetterContext() {
6218 ASTNode parent4 = parent;
6219 if (parent4 is AssignmentExpression) {
6220 AssignmentExpression assignment = parent4 as AssignmentExpression;
6221 if (identical(assignment.leftHandSide, this) && identical(assignment.opera tor.type, TokenType.EQ)) {
6222 return false;
6223 }
6224 }
6225 return true;
6226 }
6227 /**
6228 * Return {@code true} if this expression is computing a left-hand value.
6229 * <p>
6230 * Note that {@link #inGetterContext()} and {@link #inSetterContext()} are not opposites, nor are
6231 * they mutually exclusive. In other words, it is possible for both methods to return {@code true}when invoked on the same node.
6232 * @return {@code true} if this expression is in a context where the operator '[]=' will be
6233 * invoked
6234 */
6235 bool inSetterContext() {
6236 ASTNode parent5 = parent;
6237 if (parent5 is PrefixExpression) {
6238 return ((parent5 as PrefixExpression)).operator.type.isIncrementOperator() ;
6239 } else if (parent5 is PostfixExpression) {
6240 return true;
6241 } else if (parent5 is AssignmentExpression) {
6242 return identical(((parent5 as AssignmentExpression)).leftHandSide, this);
6243 }
6244 return false;
6245 }
6246 bool isAssignable() => true;
6247 /**
6248 * Return {@code true} if this expression is cascaded. If it is, then the targ et of this
6249 * expression is not stored locally but is stored in the nearest ancestor that is a{@link CascadeExpression}.
6250 * @return {@code true} if this expression is cascaded
6251 */
6252 bool isCascaded() => _period != null;
6253 /**
6254 * Set the expression used to compute the object being indexed to the given ex pression.
6255 * @param expression the expression used to compute the object being indexed
6256 */
6257 void set array(Expression expression) {
6258 _target = becomeParentOf(expression);
6259 }
6260 /**
6261 * Set the element associated with the operator to the given element.
6262 * @param element the element associated with this operator
6263 */
6264 void set element(MethodElement element11) {
6265 this._element = element11;
6266 }
6267 /**
6268 * Set the expression used to compute the index to the given expression.
6269 * @param expression the expression used to compute the index
6270 */
6271 void set index(Expression expression) {
6272 _index = becomeParentOf(expression);
6273 }
6274 /**
6275 * Set the left square bracket to the given token.
6276 * @param bracket the left square bracket
6277 */
6278 void set leftBracket(Token bracket) {
6279 _leftBracket = bracket;
6280 }
6281 /**
6282 * Set the period ("..") before a cascaded index expression to the given token .
6283 * @param period the period ("..") before a cascaded index expression
6284 */
6285 void set period(Token period8) {
6286 this._period = period8;
6287 }
6288 /**
6289 * Set the right square bracket to the given token.
6290 * @param bracket the right square bracket
6291 */
6292 void set rightBracket(Token bracket) {
6293 _rightBracket = bracket;
6294 }
6295 void visitChildren(ASTVisitor<Object> visitor) {
6296 safelyVisitChild(_target, visitor);
6297 safelyVisitChild(_index, visitor);
6298 }
6299 }
6300 /**
6301 * Instances of the class {@code InstanceCreationExpression} represent an instan ce creation
6302 * expression.
6303 * <pre>
6304 * newExpression ::=
6305 * ('new' | 'const') {@link TypeName type} ('.' {@link SimpleIdentifier identifi er})? {@link ArgumentList argumentList}</pre>
6306 * @coverage dart.engine.ast
6307 */
6308 class InstanceCreationExpression extends Expression {
6309 /**
6310 * The keyword used to indicate how an object should be created.
6311 */
6312 Token _keyword;
6313 /**
6314 * The name of the constructor to be invoked.
6315 */
6316 ConstructorName _constructorName;
6317 /**
6318 * The list of arguments to the constructor.
6319 */
6320 ArgumentList _argumentList;
6321 /**
6322 * The element associated with the constructor, or {@code null} if the AST str ucture has not been
6323 * resolved or if the constructor could not be resolved.
6324 */
6325 ConstructorElement _element;
6326 /**
6327 * Initialize a newly created instance creation expression.
6328 * @param keyword the keyword used to indicate how an object should be created
6329 * @param constructorName the name of the constructor to be invoked
6330 * @param argumentList the list of arguments to the constructor
6331 */
6332 InstanceCreationExpression.full(Token keyword, ConstructorName constructorName , ArgumentList argumentList) {
6333 this._keyword = keyword;
6334 this._constructorName = becomeParentOf(constructorName);
6335 this._argumentList = becomeParentOf(argumentList);
6336 }
6337 /**
6338 * Initialize a newly created instance creation expression.
6339 * @param keyword the keyword used to indicate how an object should be created
6340 * @param constructorName the name of the constructor to be invoked
6341 * @param argumentList the list of arguments to the constructor
6342 */
6343 InstanceCreationExpression({Token keyword, ConstructorName constructorName, Ar gumentList argumentList}) : this.full(keyword, constructorName, argumentList);
6344 accept(ASTVisitor visitor) => visitor.visitInstanceCreationExpression(this);
6345 /**
6346 * Return the list of arguments to the constructor.
6347 * @return the list of arguments to the constructor
6348 */
6349 ArgumentList get argumentList => _argumentList;
6350 Token get beginToken => _keyword;
6351 /**
6352 * Return the name of the constructor to be invoked.
6353 * @return the name of the constructor to be invoked
6354 */
6355 ConstructorName get constructorName => _constructorName;
6356 /**
6357 * Return the element associated with the constructor, or {@code null} if the AST structure has
6358 * not been resolved or if the constructor could not be resolved.
6359 * @return the element associated with the constructor
6360 */
6361 ConstructorElement get element => _element;
6362 Token get endToken => _argumentList.endToken;
6363 /**
6364 * Return the keyword used to indicate how an object should be created.
6365 * @return the keyword used to indicate how an object should be created
6366 */
6367 Token get keyword => _keyword;
6368 /**
6369 * Return {@code true} if this creation expression is used to invoke a constan t constructor.
6370 * @return {@code true} if this creation expression is used to invoke a consta nt constructor
6371 */
6372 bool isConst() => _keyword is KeywordToken && identical(((_keyword as KeywordT oken)).keyword, Keyword.CONST);
6373 /**
6374 * Set the list of arguments to the constructor to the given list.
6375 * @param argumentList the list of arguments to the constructor
6376 */
6377 void set argumentList(ArgumentList argumentList6) {
6378 this._argumentList = becomeParentOf(argumentList6);
6379 }
6380 /**
6381 * Set the name of the constructor to be invoked to the given name.
6382 * @param constructorName the name of the constructor to be invoked
6383 */
6384 void set constructorName(ConstructorName constructorName3) {
6385 this._constructorName = constructorName3;
6386 }
6387 /**
6388 * Set the element associated with the constructor to the given element.
6389 * @param element the element associated with the constructor
6390 */
6391 void set element(ConstructorElement element12) {
6392 this._element = element12;
6393 }
6394 /**
6395 * Set the keyword used to indicate how an object should be created to the giv en keyword.
6396 * @param keyword the keyword used to indicate how an object should be created
6397 */
6398 void set keyword(Token keyword13) {
6399 this._keyword = keyword13;
6400 }
6401 void visitChildren(ASTVisitor<Object> visitor) {
6402 safelyVisitChild(_constructorName, visitor);
6403 safelyVisitChild(_argumentList, visitor);
6404 }
6405 }
6406 /**
6407 * Instances of the class {@code IntegerLiteral} represent an integer literal ex pression.
6408 * <pre>
6409 * integerLiteral ::=
6410 * decimalIntegerLiteral
6411 * | hexidecimalIntegerLiteral
6412 * decimalIntegerLiteral ::=
6413 * decimalDigit+
6414 * hexidecimalIntegerLiteral ::=
6415 * '0x' hexidecimalDigit+
6416 * | '0X' hexidecimalDigit+
6417 * </pre>
6418 * @coverage dart.engine.ast
6419 */
6420 class IntegerLiteral extends Literal {
6421 /**
6422 * The token representing the literal.
6423 */
6424 Token _literal;
6425 /**
6426 * The value of the literal.
6427 */
6428 int _value = 0;
6429 /**
6430 * Initialize a newly created integer literal.
6431 * @param literal the token representing the literal
6432 * @param value the value of the literal
6433 */
6434 IntegerLiteral.full(Token literal, int value) {
6435 this._literal = literal;
6436 this._value = value;
6437 }
6438 /**
6439 * Initialize a newly created integer literal.
6440 * @param literal the token representing the literal
6441 * @param value the value of the literal
6442 */
6443 IntegerLiteral({Token literal, int value}) : this.full(literal, value);
6444 accept(ASTVisitor visitor) => visitor.visitIntegerLiteral(this);
6445 Token get beginToken => _literal;
6446 Token get endToken => _literal;
6447 /**
6448 * Return the token representing the literal.
6449 * @return the token representing the literal
6450 */
6451 Token get literal => _literal;
6452 /**
6453 * Return the value of the literal.
6454 * @return the value of the literal
6455 */
6456 int get value => _value;
6457 /**
6458 * Set the token representing the literal to the given token.
6459 * @param literal the token representing the literal
6460 */
6461 void set literal(Token literal4) {
6462 this._literal = literal4;
6463 }
6464 /**
6465 * Set the value of the literal to the given value.
6466 * @param value the value of the literal
6467 */
6468 void set value(int value6) {
6469 this._value = value6;
6470 }
6471 void visitChildren(ASTVisitor<Object> visitor) {
6472 }
6473 }
6474 /**
6475 * The abstract class {@code InterpolationElement} defines the behavior common t o elements within a{@link StringInterpolation string interpolation}.
6476 * <pre>
6477 * interpolationElement ::={@link InterpolationExpression interpolationExpressio n}| {@link InterpolationString interpolationString}</pre>
6478 * @coverage dart.engine.ast
6479 */
6480 abstract class InterpolationElement extends ASTNode {
6481 }
6482 /**
6483 * Instances of the class {@code InterpolationExpression} represent an expressio n embedded in a
6484 * string interpolation.
6485 * <pre>
6486 * interpolationExpression ::=
6487 * '$' {@link SimpleIdentifier identifier}| '$' '{' {@link Expression expression } '}'
6488 * </pre>
6489 * @coverage dart.engine.ast
6490 */
6491 class InterpolationExpression extends InterpolationElement {
6492 /**
6493 * The token used to introduce the interpolation expression; either '$' if the expression is a
6494 * simple identifier or '${' if the expression is a full expression.
6495 */
6496 Token _leftBracket;
6497 /**
6498 * The expression to be evaluated for the value to be converted into a string.
6499 */
6500 Expression _expression;
6501 /**
6502 * The right curly bracket, or {@code null} if the expression is an identifier without brackets.
6503 */
6504 Token _rightBracket;
6505 /**
6506 * Initialize a newly created interpolation expression.
6507 * @param leftBracket the left curly bracket
6508 * @param expression the expression to be evaluated for the value to be conver ted into a string
6509 * @param rightBracket the right curly bracket
6510 */
6511 InterpolationExpression.full(Token leftBracket, Expression expression, Token r ightBracket) {
6512 this._leftBracket = leftBracket;
6513 this._expression = becomeParentOf(expression);
6514 this._rightBracket = rightBracket;
6515 }
6516 /**
6517 * Initialize a newly created interpolation expression.
6518 * @param leftBracket the left curly bracket
6519 * @param expression the expression to be evaluated for the value to be conver ted into a string
6520 * @param rightBracket the right curly bracket
6521 */
6522 InterpolationExpression({Token leftBracket, Expression expression, Token right Bracket}) : this.full(leftBracket, expression, rightBracket);
6523 accept(ASTVisitor visitor) => visitor.visitInterpolationExpression(this);
6524 Token get beginToken => _leftBracket;
6525 Token get endToken {
6526 if (_rightBracket != null) {
6527 return _rightBracket;
6528 }
6529 return _expression.endToken;
6530 }
6531 /**
6532 * Return the expression to be evaluated for the value to be converted into a string.
6533 * @return the expression to be evaluated for the value to be converted into a string
6534 */
6535 Expression get expression => _expression;
6536 /**
6537 * Return the left curly bracket.
6538 * @return the left curly bracket
6539 */
6540 Token get leftBracket => _leftBracket;
6541 /**
6542 * Return the right curly bracket.
6543 * @return the right curly bracket
6544 */
6545 Token get rightBracket => _rightBracket;
6546 /**
6547 * Set the expression to be evaluated for the value to be converted into a str ing to the given
6548 * expression.
6549 * @param expression the expression to be evaluated for the value to be conver ted into a string
6550 */
6551 void set expression(Expression expression6) {
6552 this._expression = becomeParentOf(expression6);
6553 }
6554 /**
6555 * Set the left curly bracket to the given token.
6556 * @param leftBracket the left curly bracket
6557 */
6558 void set leftBracket(Token leftBracket6) {
6559 this._leftBracket = leftBracket6;
6560 }
6561 /**
6562 * Set the right curly bracket to the given token.
6563 * @param rightBracket the right curly bracket
6564 */
6565 void set rightBracket(Token rightBracket6) {
6566 this._rightBracket = rightBracket6;
6567 }
6568 void visitChildren(ASTVisitor<Object> visitor) {
6569 safelyVisitChild(_expression, visitor);
6570 }
6571 }
6572 /**
6573 * Instances of the class {@code InterpolationString} represent a non-empty subs tring of an
6574 * interpolated string.
6575 * <pre>
6576 * interpolationString ::=
6577 * characters
6578 * </pre>
6579 * @coverage dart.engine.ast
6580 */
6581 class InterpolationString extends InterpolationElement {
6582 /**
6583 * The characters that will be added to the string.
6584 */
6585 Token _contents;
6586 /**
6587 * The value of the literal.
6588 */
6589 String _value;
6590 /**
6591 * Initialize a newly created string of characters that are part of a string i nterpolation.
6592 * @param the characters that will be added to the string
6593 * @param value the value of the literal
6594 */
6595 InterpolationString.full(Token contents, String value) {
6596 this._contents = contents;
6597 this._value = value;
6598 }
6599 /**
6600 * Initialize a newly created string of characters that are part of a string i nterpolation.
6601 * @param the characters that will be added to the string
6602 * @param value the value of the literal
6603 */
6604 InterpolationString({Token contents, String value}) : this.full(contents, valu e);
6605 accept(ASTVisitor visitor) => visitor.visitInterpolationString(this);
6606 Token get beginToken => _contents;
6607 /**
6608 * Return the characters that will be added to the string.
6609 * @return the characters that will be added to the string
6610 */
6611 Token get contents => _contents;
6612 Token get endToken => _contents;
6613 /**
6614 * Return the value of the literal.
6615 * @return the value of the literal
6616 */
6617 String get value => _value;
6618 /**
6619 * Set the characters that will be added to the string to those in the given s tring.
6620 * @param string the characters that will be added to the string
6621 */
6622 void set contents(Token string) {
6623 _contents = string;
6624 }
6625 /**
6626 * Set the value of the literal to the given string.
6627 * @param string the value of the literal
6628 */
6629 void set value(String string) {
6630 _value = string;
6631 }
6632 void visitChildren(ASTVisitor<Object> visitor) {
6633 }
6634 }
6635 /**
6636 * Instances of the class {@code IsExpression} represent an is expression.
6637 * <pre>
6638 * isExpression ::={@link Expression expression} 'is' '!'? {@link TypeName type} </pre>
6639 * @coverage dart.engine.ast
6640 */
6641 class IsExpression extends Expression {
6642 /**
6643 * The expression used to compute the value whose type is being tested.
6644 */
6645 Expression _expression;
6646 /**
6647 * The is operator.
6648 */
6649 Token _isOperator;
6650 /**
6651 * The not operator, or {@code null} if the sense of the test is not negated.
6652 */
6653 Token _notOperator;
6654 /**
6655 * The name of the type being tested for.
6656 */
6657 TypeName _type;
6658 /**
6659 * Initialize a newly created is expression.
6660 * @param expression the expression used to compute the value whose type is be ing tested
6661 * @param isOperator the is operator
6662 * @param notOperator the not operator, or {@code null} if the sense of the te st is not negated
6663 * @param type the name of the type being tested for
6664 */
6665 IsExpression.full(Expression expression, Token isOperator, Token notOperator, TypeName type) {
6666 this._expression = becomeParentOf(expression);
6667 this._isOperator = isOperator;
6668 this._notOperator = notOperator;
6669 this._type = becomeParentOf(type);
6670 }
6671 /**
6672 * Initialize a newly created is expression.
6673 * @param expression the expression used to compute the value whose type is be ing tested
6674 * @param isOperator the is operator
6675 * @param notOperator the not operator, or {@code null} if the sense of the te st is not negated
6676 * @param type the name of the type being tested for
6677 */
6678 IsExpression({Expression expression, Token isOperator, Token notOperator, Type Name type}) : this.full(expression, isOperator, notOperator, type);
6679 accept(ASTVisitor visitor) => visitor.visitIsExpression(this);
6680 Token get beginToken => _expression.beginToken;
6681 Token get endToken => _type.endToken;
6682 /**
6683 * Return the expression used to compute the value whose type is being tested.
6684 * @return the expression used to compute the value whose type is being tested
6685 */
6686 Expression get expression => _expression;
6687 /**
6688 * Return the is operator being applied.
6689 * @return the is operator being applied
6690 */
6691 Token get isOperator => _isOperator;
6692 /**
6693 * Return the not operator being applied.
6694 * @return the not operator being applied
6695 */
6696 Token get notOperator => _notOperator;
6697 /**
6698 * Return the name of the type being tested for.
6699 * @return the name of the type being tested for
6700 */
6701 TypeName get type => _type;
6702 /**
6703 * Set the expression used to compute the value whose type is being tested to the given
6704 * expression.
6705 * @param expression the expression used to compute the value whose type is be ing tested
6706 */
6707 void set expression(Expression expression7) {
6708 this._expression = becomeParentOf(expression7);
6709 }
6710 /**
6711 * Set the is operator being applied to the given operator.
6712 * @param isOperator the is operator being applied
6713 */
6714 void set isOperator(Token isOperator2) {
6715 this._isOperator = isOperator2;
6716 }
6717 /**
6718 * Set the not operator being applied to the given operator.
6719 * @param notOperator the is operator being applied
6720 */
6721 void set notOperator(Token notOperator2) {
6722 this._notOperator = notOperator2;
6723 }
6724 /**
6725 * Set the name of the type being tested for to the given name.
6726 * @param name the name of the type being tested for
6727 */
6728 void set type(TypeName name) {
6729 this._type = becomeParentOf(name);
6730 }
6731 void visitChildren(ASTVisitor<Object> visitor) {
6732 safelyVisitChild(_expression, visitor);
6733 safelyVisitChild(_type, visitor);
6734 }
6735 }
6736 /**
6737 * Instances of the class {@code Label} represent a label.
6738 * <pre>
6739 * label ::={@link SimpleIdentifier label} ':'
6740 * </pre>
6741 * @coverage dart.engine.ast
6742 */
6743 class Label extends ASTNode {
6744 /**
6745 * The label being associated with the statement.
6746 */
6747 SimpleIdentifier _label;
6748 /**
6749 * The colon that separates the label from the statement.
6750 */
6751 Token _colon;
6752 /**
6753 * Initialize a newly created label.
6754 * @param label the label being applied
6755 * @param colon the colon that separates the label from whatever follows
6756 */
6757 Label.full(SimpleIdentifier label, Token colon) {
6758 this._label = becomeParentOf(label);
6759 this._colon = colon;
6760 }
6761 /**
6762 * Initialize a newly created label.
6763 * @param label the label being applied
6764 * @param colon the colon that separates the label from whatever follows
6765 */
6766 Label({SimpleIdentifier label, Token colon}) : this.full(label, colon);
6767 accept(ASTVisitor visitor) => visitor.visitLabel(this);
6768 Token get beginToken => _label.beginToken;
6769 /**
6770 * Return the colon that separates the label from the statement.
6771 * @return the colon that separates the label from the statement
6772 */
6773 Token get colon => _colon;
6774 Token get endToken => _colon;
6775 /**
6776 * Return the label being associated with the statement.
6777 * @return the label being associated with the statement
6778 */
6779 SimpleIdentifier get label => _label;
6780 /**
6781 * Set the colon that separates the label from the statement to the given toke n.
6782 * @param colon the colon that separates the label from the statement
6783 */
6784 void set colon(Token colon3) {
6785 this._colon = colon3;
6786 }
6787 /**
6788 * Set the label being associated with the statement to the given label.
6789 * @param label the label being associated with the statement
6790 */
6791 void set label(SimpleIdentifier label3) {
6792 this._label = becomeParentOf(label3);
6793 }
6794 void visitChildren(ASTVisitor<Object> visitor) {
6795 safelyVisitChild(_label, visitor);
6796 }
6797 }
6798 /**
6799 * Instances of the class {@code LabeledStatement} represent a statement that ha s a label associated
6800 * with them.
6801 * <pre>
6802 * labeledStatement ::={@link Label label}+ {@link Statement statement}</pre>
6803 * @coverage dart.engine.ast
6804 */
6805 class LabeledStatement extends Statement {
6806 /**
6807 * The labels being associated with the statement.
6808 */
6809 NodeList<Label> _labels;
6810 /**
6811 * The statement with which the labels are being associated.
6812 */
6813 Statement _statement;
6814 /**
6815 * Initialize a newly created labeled statement.
6816 * @param labels the labels being associated with the statement
6817 * @param statement the statement with which the labels are being associated
6818 */
6819 LabeledStatement.full(List<Label> labels, Statement statement) {
6820 this._labels = new NodeList<Label>(this);
6821 this._labels.addAll(labels);
6822 this._statement = becomeParentOf(statement);
6823 }
6824 /**
6825 * Initialize a newly created labeled statement.
6826 * @param labels the labels being associated with the statement
6827 * @param statement the statement with which the labels are being associated
6828 */
6829 LabeledStatement({List<Label> labels, Statement statement}) : this.full(labels , statement);
6830 accept(ASTVisitor visitor) => visitor.visitLabeledStatement(this);
6831 Token get beginToken {
6832 if (!_labels.isEmpty) {
6833 return _labels.beginToken;
6834 }
6835 return _statement.beginToken;
6836 }
6837 Token get endToken => _statement.endToken;
6838 /**
6839 * Return the labels being associated with the statement.
6840 * @return the labels being associated with the statement
6841 */
6842 NodeList<Label> get labels => _labels;
6843 /**
6844 * Return the statement with which the labels are being associated.
6845 * @return the statement with which the labels are being associated
6846 */
6847 Statement get statement => _statement;
6848 /**
6849 * Set the statement with which the labels are being associated to the given s tatement.
6850 * @param statement the statement with which the labels are being associated
6851 */
6852 void set statement(Statement statement2) {
6853 this._statement = becomeParentOf(statement2);
6854 }
6855 void visitChildren(ASTVisitor<Object> visitor) {
6856 _labels.accept(visitor);
6857 safelyVisitChild(_statement, visitor);
6858 }
6859 }
6860 /**
6861 * Instances of the class {@code LibraryDirective} represent a library directive .
6862 * <pre>
6863 * libraryDirective ::={@link Annotation metadata} 'library' {@link Identifier n ame} ';'
6864 * </pre>
6865 * @coverage dart.engine.ast
6866 */
6867 class LibraryDirective extends Directive {
6868 /**
6869 * The token representing the 'library' token.
6870 */
6871 Token _libraryToken;
6872 /**
6873 * The name of the library being defined.
6874 */
6875 LibraryIdentifier _name;
6876 /**
6877 * The semicolon terminating the directive.
6878 */
6879 Token _semicolon;
6880 /**
6881 * Initialize a newly created library directive.
6882 * @param comment the documentation comment associated with this directive
6883 * @param metadata the annotations associated with the directive
6884 * @param libraryToken the token representing the 'library' token
6885 * @param name the name of the library being defined
6886 * @param semicolon the semicolon terminating the directive
6887 */
6888 LibraryDirective.full(Comment comment, List<Annotation> metadata, Token librar yToken, LibraryIdentifier name, Token semicolon) : super.full(comment, metadata) {
6889 this._libraryToken = libraryToken;
6890 this._name = becomeParentOf(name);
6891 this._semicolon = semicolon;
6892 }
6893 /**
6894 * Initialize a newly created library directive.
6895 * @param comment the documentation comment associated with this directive
6896 * @param metadata the annotations associated with the directive
6897 * @param libraryToken the token representing the 'library' token
6898 * @param name the name of the library being defined
6899 * @param semicolon the semicolon terminating the directive
6900 */
6901 LibraryDirective({Comment comment, List<Annotation> metadata, Token libraryTok en, LibraryIdentifier name, Token semicolon}) : this.full(comment, metadata, lib raryToken, name, semicolon);
6902 accept(ASTVisitor visitor) => visitor.visitLibraryDirective(this);
6903 Token get endToken => _semicolon;
6904 Token get keyword => _libraryToken;
6905 /**
6906 * Return the token representing the 'library' token.
6907 * @return the token representing the 'library' token
6908 */
6909 Token get libraryToken => _libraryToken;
6910 /**
6911 * Return the name of the library being defined.
6912 * @return the name of the library being defined
6913 */
6914 LibraryIdentifier get name => _name;
6915 /**
6916 * Return the semicolon terminating the directive.
6917 * @return the semicolon terminating the directive
6918 */
6919 Token get semicolon => _semicolon;
6920 /**
6921 * Set the token representing the 'library' token to the given token.
6922 * @param libraryToken the token representing the 'library' token
6923 */
6924 void set libraryToken(Token libraryToken2) {
6925 this._libraryToken = libraryToken2;
6926 }
6927 /**
6928 * Set the name of the library being defined to the given name.
6929 * @param name the name of the library being defined
6930 */
6931 void set name(LibraryIdentifier name6) {
6932 this._name = becomeParentOf(name6);
6933 }
6934 /**
6935 * Set the semicolon terminating the directive to the given token.
6936 * @param semicolon the semicolon terminating the directive
6937 */
6938 void set semicolon(Token semicolon11) {
6939 this._semicolon = semicolon11;
6940 }
6941 void visitChildren(ASTVisitor<Object> visitor) {
6942 super.visitChildren(visitor);
6943 safelyVisitChild(_name, visitor);
6944 }
6945 Token get firstTokenAfterCommentAndMetadata => _libraryToken;
6946 }
6947 /**
6948 * Instances of the class {@code LibraryIdentifier} represent the identifier for a library.
6949 * <pre>
6950 * libraryIdentifier ::={@link SimpleIdentifier component} ('.' {@link SimpleIde ntifier component})
6951 * </pre>
6952 * @coverage dart.engine.ast
6953 */
6954 class LibraryIdentifier extends Identifier {
6955 /**
6956 * The components of the identifier.
6957 */
6958 NodeList<SimpleIdentifier> _components;
6959 /**
6960 * Initialize a newly created prefixed identifier.
6961 * @param components the components of the identifier
6962 */
6963 LibraryIdentifier.full(List<SimpleIdentifier> components) {
6964 this._components = new NodeList<SimpleIdentifier>(this);
6965 this._components.addAll(components);
6966 }
6967 /**
6968 * Initialize a newly created prefixed identifier.
6969 * @param components the components of the identifier
6970 */
6971 LibraryIdentifier({List<SimpleIdentifier> components}) : this.full(components) ;
6972 accept(ASTVisitor visitor) => visitor.visitLibraryIdentifier(this);
6973 Token get beginToken => _components.beginToken;
6974 /**
6975 * Return the components of the identifier.
6976 * @return the components of the identifier
6977 */
6978 NodeList<SimpleIdentifier> get components => _components;
6979 Element get element => null;
6980 Token get endToken => _components.endToken;
6981 String get name {
6982 JavaStringBuilder builder = new JavaStringBuilder();
6983 bool needsPeriod = false;
6984 for (SimpleIdentifier identifier in _components) {
6985 if (needsPeriod) {
6986 builder.append(".");
6987 } else {
6988 needsPeriod = true;
6989 }
6990 builder.append(identifier.name);
6991 }
6992 return builder.toString();
6993 }
6994 void visitChildren(ASTVisitor<Object> visitor) {
6995 _components.accept(visitor);
6996 }
6997 }
6998 /**
6999 * Instances of the class {@code ListLiteral} represent a list literal.
7000 * <pre>
7001 * listLiteral ::=
7002 * 'const'? ('<' {@link TypeName type} '>')? '[' ({@link Expression expressionLi st} ','?)? ']'
7003 * </pre>
7004 * @coverage dart.engine.ast
7005 */
7006 class ListLiteral extends TypedLiteral {
7007 /**
7008 * The left square bracket.
7009 */
7010 Token _leftBracket;
7011 /**
7012 * The expressions used to compute the elements of the list.
7013 */
7014 NodeList<Expression> _elements;
7015 /**
7016 * The right square bracket.
7017 */
7018 Token _rightBracket;
7019 /**
7020 * Initialize a newly created list literal.
7021 * @param modifier the const modifier associated with this literal
7022 * @param typeArguments the type argument associated with this literal, or {@c ode null} if no type
7023 * arguments were declared
7024 * @param leftBracket the left square bracket
7025 * @param elements the expressions used to compute the elements of the list
7026 * @param rightBracket the right square bracket
7027 */
7028 ListLiteral.full(Token modifier, TypeArgumentList typeArguments, Token leftBra cket, List<Expression> elements, Token rightBracket) : super.full(modifier, type Arguments) {
7029 this._elements = new NodeList<Expression>(this);
7030 this._leftBracket = leftBracket;
7031 this._elements.addAll(elements);
7032 this._rightBracket = rightBracket;
7033 }
7034 /**
7035 * Initialize a newly created list literal.
7036 * @param modifier the const modifier associated with this literal
7037 * @param typeArguments the type argument associated with this literal, or {@c ode null} if no type
7038 * arguments were declared
7039 * @param leftBracket the left square bracket
7040 * @param elements the expressions used to compute the elements of the list
7041 * @param rightBracket the right square bracket
7042 */
7043 ListLiteral({Token modifier, TypeArgumentList typeArguments, Token leftBracket , List<Expression> elements, Token rightBracket}) : this.full(modifier, typeArgu ments, leftBracket, elements, rightBracket);
7044 accept(ASTVisitor visitor) => visitor.visitListLiteral(this);
7045 Token get beginToken {
7046 Token token = modifier;
7047 if (token != null) {
7048 return token;
7049 }
7050 TypeArgumentList typeArguments6 = typeArguments;
7051 if (typeArguments6 != null) {
7052 return typeArguments6.beginToken;
7053 }
7054 return _leftBracket;
7055 }
7056 /**
7057 * Return the expressions used to compute the elements of the list.
7058 * @return the expressions used to compute the elements of the list
7059 */
7060 NodeList<Expression> get elements => _elements;
7061 Token get endToken => _rightBracket;
7062 /**
7063 * Return the left square bracket.
7064 * @return the left square bracket
7065 */
7066 Token get leftBracket => _leftBracket;
7067 /**
7068 * Return the right square bracket.
7069 * @return the right square bracket
7070 */
7071 Token get rightBracket => _rightBracket;
7072 /**
7073 * Set the left square bracket to the given token.
7074 * @param bracket the left square bracket
7075 */
7076 void set leftBracket(Token bracket) {
7077 _leftBracket = bracket;
7078 }
7079 /**
7080 * Set the right square bracket to the given token.
7081 * @param bracket the right square bracket
7082 */
7083 void set rightBracket(Token bracket) {
7084 _rightBracket = bracket;
7085 }
7086 void visitChildren(ASTVisitor<Object> visitor) {
7087 super.visitChildren(visitor);
7088 _elements.accept(visitor);
7089 }
7090 }
7091 /**
7092 * The abstract class {@code Literal} defines the behavior common to nodes that represent a literal
7093 * expression.
7094 * <pre>
7095 * literal ::={@link BooleanLiteral booleanLiteral}| {@link DoubleLiteral double Literal}| {@link IntegerLiteral integerLiteral}| {@link ListLiteral listLiteral} | {@link MapLiteral mapLiteral}| {@link NullLiteral nullLiteral}| {@link StringL iteral stringLiteral}</pre>
7096 * @coverage dart.engine.ast
7097 */
7098 abstract class Literal extends Expression {
7099 }
7100 /**
7101 * Instances of the class {@code MapLiteral} represent a literal map.
7102 * <pre>
7103 * mapLiteral ::=
7104 * 'const'? ('<' {@link TypeName type} '>')? '{' ({@link MapLiteralEntry entry} (',' {@link MapLiteralEntry entry})* ','?)? '}'
7105 * </pre>
7106 * @coverage dart.engine.ast
7107 */
7108 class MapLiteral extends TypedLiteral {
7109 /**
7110 * The left curly bracket.
7111 */
7112 Token _leftBracket;
7113 /**
7114 * The entries in the map.
7115 */
7116 NodeList<MapLiteralEntry> _entries;
7117 /**
7118 * The right curly bracket.
7119 */
7120 Token _rightBracket;
7121 /**
7122 * Initialize a newly created map literal.
7123 * @param modifier the const modifier associated with this literal
7124 * @param typeArguments the type argument associated with this literal, or {@c ode null} if no type
7125 * arguments were declared
7126 * @param leftBracket the left curly bracket
7127 * @param entries the entries in the map
7128 * @param rightBracket the right curly bracket
7129 */
7130 MapLiteral.full(Token modifier, TypeArgumentList typeArguments, Token leftBrac ket, List<MapLiteralEntry> entries, Token rightBracket) : super.full(modifier, t ypeArguments) {
7131 this._entries = new NodeList<MapLiteralEntry>(this);
7132 this._leftBracket = leftBracket;
7133 this._entries.addAll(entries);
7134 this._rightBracket = rightBracket;
7135 }
7136 /**
7137 * Initialize a newly created map literal.
7138 * @param modifier the const modifier associated with this literal
7139 * @param typeArguments the type argument associated with this literal, or {@c ode null} if no type
7140 * arguments were declared
7141 * @param leftBracket the left curly bracket
7142 * @param entries the entries in the map
7143 * @param rightBracket the right curly bracket
7144 */
7145 MapLiteral({Token modifier, TypeArgumentList typeArguments, Token leftBracket, List<MapLiteralEntry> entries, Token rightBracket}) : this.full(modifier, typeA rguments, leftBracket, entries, rightBracket);
7146 accept(ASTVisitor visitor) => visitor.visitMapLiteral(this);
7147 Token get beginToken {
7148 Token token = modifier;
7149 if (token != null) {
7150 return token;
7151 }
7152 TypeArgumentList typeArguments7 = typeArguments;
7153 if (typeArguments7 != null) {
7154 return typeArguments7.beginToken;
7155 }
7156 return _leftBracket;
7157 }
7158 Token get endToken => _rightBracket;
7159 /**
7160 * Return the entries in the map.
7161 * @return the entries in the map
7162 */
7163 NodeList<MapLiteralEntry> get entries => _entries;
7164 /**
7165 * Return the left curly bracket.
7166 * @return the left curly bracket
7167 */
7168 Token get leftBracket => _leftBracket;
7169 /**
7170 * Return the right curly bracket.
7171 * @return the right curly bracket
7172 */
7173 Token get rightBracket => _rightBracket;
7174 /**
7175 * Set the left curly bracket to the given token.
7176 * @param bracket the left curly bracket
7177 */
7178 void set leftBracket(Token bracket) {
7179 _leftBracket = bracket;
7180 }
7181 /**
7182 * Set the right curly bracket to the given token.
7183 * @param bracket the right curly bracket
7184 */
7185 void set rightBracket(Token bracket) {
7186 _rightBracket = bracket;
7187 }
7188 void visitChildren(ASTVisitor<Object> visitor) {
7189 super.visitChildren(visitor);
7190 _entries.accept(visitor);
7191 }
7192 }
7193 /**
7194 * Instances of the class {@code MapLiteralEntry} represent a single key/value p air in a map
7195 * literal.
7196 * <pre>
7197 * mapLiteralEntry ::={@link StringLiteral key} ':' {@link Expression value}</pr e>
7198 * @coverage dart.engine.ast
7199 */
7200 class MapLiteralEntry extends ASTNode {
7201 /**
7202 * The key with which the value will be associated.
7203 */
7204 StringLiteral _key;
7205 /**
7206 * The colon that separates the key from the value.
7207 */
7208 Token _separator;
7209 /**
7210 * The expression computing the value that will be associated with the key.
7211 */
7212 Expression _value;
7213 /**
7214 * Initialize a newly created map literal entry.
7215 * @param key the key with which the value will be associated
7216 * @param separator the colon that separates the key from the value
7217 * @param value the expression computing the value that will be associated wit h the key
7218 */
7219 MapLiteralEntry.full(StringLiteral key, Token separator, Expression value) {
7220 this._key = becomeParentOf(key);
7221 this._separator = separator;
7222 this._value = becomeParentOf(value);
7223 }
7224 /**
7225 * Initialize a newly created map literal entry.
7226 * @param key the key with which the value will be associated
7227 * @param separator the colon that separates the key from the value
7228 * @param value the expression computing the value that will be associated wit h the key
7229 */
7230 MapLiteralEntry({StringLiteral key, Token separator, Expression value}) : this .full(key, separator, value);
7231 accept(ASTVisitor visitor) => visitor.visitMapLiteralEntry(this);
7232 Token get beginToken => _key.beginToken;
7233 Token get endToken => _value.endToken;
7234 /**
7235 * Return the key with which the value will be associated.
7236 * @return the key with which the value will be associated
7237 */
7238 StringLiteral get key => _key;
7239 /**
7240 * Return the colon that separates the key from the value.
7241 * @return the colon that separates the key from the value
7242 */
7243 Token get separator => _separator;
7244 /**
7245 * Return the expression computing the value that will be associated with the key.
7246 * @return the expression computing the value that will be associated with the key
7247 */
7248 Expression get value => _value;
7249 /**
7250 * Set the key with which the value will be associated to the given string.
7251 * @param string the key with which the value will be associated
7252 */
7253 void set key(StringLiteral string) {
7254 _key = becomeParentOf(string);
7255 }
7256 /**
7257 * Set the colon that separates the key from the value to the given token.
7258 * @param separator the colon that separates the key from the value
7259 */
7260 void set separator(Token separator4) {
7261 this._separator = separator4;
7262 }
7263 /**
7264 * Set the expression computing the value that will be associated with the key to the given
7265 * expression.
7266 * @param expression the expression computing the value that will be associate d with the key
7267 */
7268 void set value(Expression expression) {
7269 _value = becomeParentOf(expression);
7270 }
7271 void visitChildren(ASTVisitor<Object> visitor) {
7272 safelyVisitChild(_key, visitor);
7273 safelyVisitChild(_value, visitor);
7274 }
7275 }
7276 /**
7277 * Instances of the class {@code MethodDeclaration} represent a method declarati on.
7278 * <pre>
7279 * methodDeclaration ::=
7280 * methodSignature {@link FunctionBody body}methodSignature ::=
7281 * 'external'? ('abstract' | 'static')? {@link Type returnType}? ('get' | 'set') ? methodName{@link FormalParameterList formalParameterList}methodName ::={@link SimpleIdentifier name}| 'operator' {@link SimpleIdentifier operator}</pre>
7282 * @coverage dart.engine.ast
7283 */
7284 class MethodDeclaration extends ClassMember {
7285 /**
7286 * The token for the 'external' keyword, or {@code null} if the constructor is not external.
7287 */
7288 Token _externalKeyword;
7289 /**
7290 * The token representing the 'abstract' or 'static' keyword, or {@code null} if neither modifier
7291 * was specified.
7292 */
7293 Token _modifierKeyword;
7294 /**
7295 * The return type of the method, or {@code null} if no return type was declar ed.
7296 */
7297 TypeName _returnType;
7298 /**
7299 * The token representing the 'get' or 'set' keyword, or {@code null} if this is a method
7300 * declaration rather than a property declaration.
7301 */
7302 Token _propertyKeyword;
7303 /**
7304 * The token representing the 'operator' keyword, or {@code null} if this meth od does not declare
7305 * an operator.
7306 */
7307 Token _operatorKeyword;
7308 /**
7309 * The name of the method.
7310 */
7311 SimpleIdentifier _name;
7312 /**
7313 * The parameters associated with the method, or {@code null} if this method d eclares a getter.
7314 */
7315 FormalParameterList _parameters;
7316 /**
7317 * The body of the method.
7318 */
7319 FunctionBody _body;
7320 /**
7321 * Initialize a newly created method declaration.
7322 * @param externalKeyword the token for the 'external' keyword
7323 * @param comment the documentation comment associated with this method
7324 * @param metadata the annotations associated with this method
7325 * @param modifierKeyword the token representing the 'abstract' or 'static' ke yword
7326 * @param returnType the return type of the method
7327 * @param propertyKeyword the token representing the 'get' or 'set' keyword
7328 * @param operatorKeyword the token representing the 'operator' keyword
7329 * @param name the name of the method
7330 * @param parameters the parameters associated with the method, or {@code null } if this method
7331 * declares a getter
7332 * @param body the body of the method
7333 */
7334 MethodDeclaration.full(Comment comment, List<Annotation> metadata, Token exter nalKeyword, Token modifierKeyword, TypeName returnType, Token propertyKeyword, T oken operatorKeyword, SimpleIdentifier name, FormalParameterList parameters, Fun ctionBody body) : super.full(comment, metadata) {
7335 this._externalKeyword = externalKeyword;
7336 this._modifierKeyword = modifierKeyword;
7337 this._returnType = becomeParentOf(returnType);
7338 this._propertyKeyword = propertyKeyword;
7339 this._operatorKeyword = operatorKeyword;
7340 this._name = becomeParentOf(name);
7341 this._parameters = becomeParentOf(parameters);
7342 this._body = becomeParentOf(body);
7343 }
7344 /**
7345 * Initialize a newly created method declaration.
7346 * @param externalKeyword the token for the 'external' keyword
7347 * @param comment the documentation comment associated with this method
7348 * @param metadata the annotations associated with this method
7349 * @param modifierKeyword the token representing the 'abstract' or 'static' ke yword
7350 * @param returnType the return type of the method
7351 * @param propertyKeyword the token representing the 'get' or 'set' keyword
7352 * @param operatorKeyword the token representing the 'operator' keyword
7353 * @param name the name of the method
7354 * @param parameters the parameters associated with the method, or {@code null } if this method
7355 * declares a getter
7356 * @param body the body of the method
7357 */
7358 MethodDeclaration({Comment comment, List<Annotation> metadata, Token externalK eyword, Token modifierKeyword, TypeName returnType, Token propertyKeyword, Token operatorKeyword, SimpleIdentifier name, FormalParameterList parameters, Functio nBody body}) : this.full(comment, metadata, externalKeyword, modifierKeyword, re turnType, propertyKeyword, operatorKeyword, name, parameters, body);
7359 accept(ASTVisitor visitor) => visitor.visitMethodDeclaration(this);
7360 /**
7361 * Return the body of the method.
7362 * @return the body of the method
7363 */
7364 FunctionBody get body => _body;
7365 /**
7366 * Return the element associated with this method, or {@code null} if the AST structure has not
7367 * been resolved. The element can either be a {@link MethodElement}, if this r epresents the
7368 * declaration of a normal method, or a {@link PropertyAccessorElement} if thi s represents the
7369 * declaration of either a getter or a setter.
7370 * @return the element associated with this method
7371 */
7372 ExecutableElement get element => _name != null ? (_name.element as ExecutableE lement) : null;
7373 Token get endToken => _body.endToken;
7374 /**
7375 * Return the token for the 'external' keyword, or {@code null} if the constru ctor is not
7376 * external.
7377 * @return the token for the 'external' keyword
7378 */
7379 Token get externalKeyword => _externalKeyword;
7380 /**
7381 * Return the token representing the 'abstract' or 'static' keyword, or {@code null} if neither
7382 * modifier was specified.
7383 * @return the token representing the 'abstract' or 'static' keyword
7384 */
7385 Token get modifierKeyword => _modifierKeyword;
7386 /**
7387 * Return the name of the method.
7388 * @return the name of the method
7389 */
7390 SimpleIdentifier get name => _name;
7391 /**
7392 * Return the token representing the 'operator' keyword, or {@code null} if th is method does not
7393 * declare an operator.
7394 * @return the token representing the 'operator' keyword
7395 */
7396 Token get operatorKeyword => _operatorKeyword;
7397 /**
7398 * Return the parameters associated with the method, or {@code null} if this m ethod declares a
7399 * getter.
7400 * @return the parameters associated with the method
7401 */
7402 FormalParameterList get parameters => _parameters;
7403 /**
7404 * Return the token representing the 'get' or 'set' keyword, or {@code null} i f this is a method
7405 * declaration rather than a property declaration.
7406 * @return the token representing the 'get' or 'set' keyword
7407 */
7408 Token get propertyKeyword => _propertyKeyword;
7409 /**
7410 * Return the return type of the method, or {@code null} if no return type was declared.
7411 * @return the return type of the method
7412 */
7413 TypeName get returnType => _returnType;
7414 /**
7415 * Return {@code true} if this method is declared to be an abstract method.
7416 * @return {@code true} if this method is declared to be an abstract method
7417 */
7418 bool isAbstract() => _modifierKeyword != null && identical(((_modifierKeyword as KeywordToken)).keyword, Keyword.ABSTRACT);
7419 /**
7420 * Return {@code true} if this method declares a getter.
7421 * @return {@code true} if this method declares a getter
7422 */
7423 bool isGetter() => _propertyKeyword != null && identical(((_propertyKeyword as KeywordToken)).keyword, Keyword.GET);
7424 /**
7425 * Return {@code true} if this method declares an operator.
7426 * @return {@code true} if this method declares an operator
7427 */
7428 bool isOperator() => _operatorKeyword != null;
7429 /**
7430 * Return {@code true} if this method declares a setter.
7431 * @return {@code true} if this method declares a setter
7432 */
7433 bool isSetter() => _propertyKeyword != null && identical(((_propertyKeyword as KeywordToken)).keyword, Keyword.SET);
7434 /**
7435 * Return {@code true} if this method is declared to be a static method.
7436 * @return {@code true} if this method is declared to be a static method
7437 */
7438 bool isStatic() => _modifierKeyword != null && identical(((_modifierKeyword as KeywordToken)).keyword, Keyword.STATIC);
7439 /**
7440 * Set the body of the method to the given function body.
7441 * @param functionBody the body of the method
7442 */
7443 void set body(FunctionBody functionBody) {
7444 _body = becomeParentOf(functionBody);
7445 }
7446 /**
7447 * Set the token for the 'external' keyword to the given token.
7448 * @param externalKeyword the token for the 'external' keyword
7449 */
7450 void set externalKeyword(Token externalKeyword4) {
7451 this._externalKeyword = externalKeyword4;
7452 }
7453 /**
7454 * Set the token representing the 'abstract' or 'static' keyword to the given token.
7455 * @param modifierKeyword the token representing the 'abstract' or 'static' ke yword
7456 */
7457 void set modifierKeyword(Token modifierKeyword2) {
7458 this._modifierKeyword = modifierKeyword2;
7459 }
7460 /**
7461 * Set the name of the method to the given identifier.
7462 * @param identifier the name of the method
7463 */
7464 void set name(SimpleIdentifier identifier) {
7465 _name = becomeParentOf(identifier);
7466 }
7467 /**
7468 * Set the token representing the 'operator' keyword to the given token.
7469 * @param operatorKeyword the token representing the 'operator' keyword
7470 */
7471 void set operatorKeyword(Token operatorKeyword2) {
7472 this._operatorKeyword = operatorKeyword2;
7473 }
7474 /**
7475 * Set the parameters associated with the method to the given list of paramete rs.
7476 * @param parameters the parameters associated with the method
7477 */
7478 void set parameters(FormalParameterList parameters6) {
7479 this._parameters = becomeParentOf(parameters6);
7480 }
7481 /**
7482 * Set the token representing the 'get' or 'set' keyword to the given token.
7483 * @param propertyKeyword the token representing the 'get' or 'set' keyword
7484 */
7485 void set propertyKeyword(Token propertyKeyword3) {
7486 this._propertyKeyword = propertyKeyword3;
7487 }
7488 /**
7489 * Set the return type of the method to the given type name.
7490 * @param typeName the return type of the method
7491 */
7492 void set returnType(TypeName typeName) {
7493 _returnType = becomeParentOf(typeName);
7494 }
7495 void visitChildren(ASTVisitor<Object> visitor) {
7496 super.visitChildren(visitor);
7497 safelyVisitChild(_returnType, visitor);
7498 safelyVisitChild(_name, visitor);
7499 safelyVisitChild(_parameters, visitor);
7500 safelyVisitChild(_body, visitor);
7501 }
7502 Token get firstTokenAfterCommentAndMetadata {
7503 if (_modifierKeyword != null) {
7504 return _modifierKeyword;
7505 } else if (_returnType != null) {
7506 return _returnType.beginToken;
7507 } else if (_propertyKeyword != null) {
7508 return _propertyKeyword;
7509 } else if (_operatorKeyword != null) {
7510 return _operatorKeyword;
7511 }
7512 return _name.beginToken;
7513 }
7514 }
7515 /**
7516 * Instances of the class {@code MethodInvocation} represent the invocation of e ither a function or
7517 * a method. Invocations of functions resulting from evaluating an expression ar e represented by{@link FunctionExpressionInvocation function expression invocati on} nodes. Invocations of getters
7518 * and setters are represented by either {@link PrefixedIdentifier prefixed iden tifier} or{@link PropertyAccess property access} nodes.
7519 * <pre>
7520 * methodInvoction ::=
7521 * ({@link Expression target} '.')? {@link SimpleIdentifier methodName} {@link A rgumentList argumentList}</pre>
7522 * @coverage dart.engine.ast
7523 */
7524 class MethodInvocation extends Expression {
7525 /**
7526 * The expression producing the object on which the method is defined, or {@co de null} if there is
7527 * no target (that is, the target is implicitly {@code this}).
7528 */
7529 Expression _target;
7530 /**
7531 * The period that separates the target from the method name, or {@code null} if there is no
7532 * target.
7533 */
7534 Token _period;
7535 /**
7536 * The name of the method being invoked.
7537 */
7538 SimpleIdentifier _methodName;
7539 /**
7540 * The list of arguments to the method.
7541 */
7542 ArgumentList _argumentList;
7543 /**
7544 * Initialize a newly created method invocation.
7545 * @param target the expression producing the object on which the method is de fined
7546 * @param period the period that separates the target from the method name
7547 * @param methodName the name of the method being invoked
7548 * @param argumentList the list of arguments to the method
7549 */
7550 MethodInvocation.full(Expression target, Token period, SimpleIdentifier method Name, ArgumentList argumentList) {
7551 this._target = becomeParentOf(target);
7552 this._period = period;
7553 this._methodName = becomeParentOf(methodName);
7554 this._argumentList = becomeParentOf(argumentList);
7555 }
7556 /**
7557 * Initialize a newly created method invocation.
7558 * @param target the expression producing the object on which the method is de fined
7559 * @param period the period that separates the target from the method name
7560 * @param methodName the name of the method being invoked
7561 * @param argumentList the list of arguments to the method
7562 */
7563 MethodInvocation({Expression target, Token period, SimpleIdentifier methodName , ArgumentList argumentList}) : this.full(target, period, methodName, argumentLi st);
7564 accept(ASTVisitor visitor) => visitor.visitMethodInvocation(this);
7565 /**
7566 * Return the list of arguments to the method.
7567 * @return the list of arguments to the method
7568 */
7569 ArgumentList get argumentList => _argumentList;
7570 Token get beginToken {
7571 if (_target != null) {
7572 return _target.beginToken;
7573 }
7574 return _methodName.beginToken;
7575 }
7576 Token get endToken => _argumentList.endToken;
7577 /**
7578 * Return the name of the method being invoked.
7579 * @return the name of the method being invoked
7580 */
7581 SimpleIdentifier get methodName => _methodName;
7582 /**
7583 * Return the period that separates the target from the method name, or {@code null} if there is
7584 * no target.
7585 * @return the period that separates the target from the method name
7586 */
7587 Token get period => _period;
7588 /**
7589 * Return the expression used to compute the receiver of the invocation. If th is invocation is not
7590 * part of a cascade expression, then this is the same as {@link #getTarget()} . If this invocation
7591 * is part of a cascade expression, then the target stored with the cascade ex pression is
7592 * returned.
7593 * @return the expression used to compute the receiver of the invocation
7594 * @see #getTarget()
7595 */
7596 Expression get realTarget {
7597 if (isCascaded()) {
7598 ASTNode ancestor = parent;
7599 while (ancestor is! CascadeExpression) {
7600 if (ancestor == null) {
7601 return _target;
7602 }
7603 ancestor = ancestor.parent;
7604 }
7605 return ((ancestor as CascadeExpression)).target;
7606 }
7607 return _target;
7608 }
7609 /**
7610 * Return the expression producing the object on which the method is defined, or {@code null} if
7611 * there is no target (that is, the target is implicitly {@code this}) or if t his method
7612 * invocation is part of a cascade expression.
7613 * @return the expression producing the object on which the method is defined
7614 * @see #getRealTarget()
7615 */
7616 Expression get target => _target;
7617 /**
7618 * Return {@code true} if this expression is cascaded. If it is, then the targ et of this
7619 * expression is not stored locally but is stored in the nearest ancestor that is a{@link CascadeExpression}.
7620 * @return {@code true} if this expression is cascaded
7621 */
7622 bool isCascaded() => _period != null && identical(_period.type, TokenType.PERI OD_PERIOD);
7623 /**
7624 * Set the list of arguments to the method to the given list.
7625 * @param argumentList the list of arguments to the method
7626 */
7627 void set argumentList(ArgumentList argumentList7) {
7628 this._argumentList = becomeParentOf(argumentList7);
7629 }
7630 /**
7631 * Set the name of the method being invoked to the given identifier.
7632 * @param identifier the name of the method being invoked
7633 */
7634 void set methodName(SimpleIdentifier identifier) {
7635 _methodName = becomeParentOf(identifier);
7636 }
7637 /**
7638 * Set the period that separates the target from the method name to the given token.
7639 * @param period the period that separates the target from the method name
7640 */
7641 void set period(Token period9) {
7642 this._period = period9;
7643 }
7644 /**
7645 * Set the expression producing the object on which the method is defined to t he given expression.
7646 * @param expression the expression producing the object on which the method i s defined
7647 */
7648 void set target(Expression expression) {
7649 _target = becomeParentOf(expression);
7650 }
7651 void visitChildren(ASTVisitor<Object> visitor) {
7652 safelyVisitChild(_target, visitor);
7653 safelyVisitChild(_methodName, visitor);
7654 safelyVisitChild(_argumentList, visitor);
7655 }
7656 }
7657 /**
7658 * Instances of the class {@code NamedExpression} represent an expression that h as a name associated
7659 * with it. They are used in method invocations when there are named parameters.
7660 * <pre>
7661 * namedExpression ::={@link Label name} {@link Expression expression}</pre>
7662 * @coverage dart.engine.ast
7663 */
7664 class NamedExpression extends Expression {
7665 /**
7666 * The name associated with the expression.
7667 */
7668 Label _name;
7669 /**
7670 * The expression with which the name is associated.
7671 */
7672 Expression _expression;
7673 /**
7674 * Initialize a newly created named expression.
7675 * @param name the name associated with the expression
7676 * @param expression the expression with which the name is associated
7677 */
7678 NamedExpression.full(Label name, Expression expression) {
7679 this._name = becomeParentOf(name);
7680 this._expression = becomeParentOf(expression);
7681 }
7682 /**
7683 * Initialize a newly created named expression.
7684 * @param name the name associated with the expression
7685 * @param expression the expression with which the name is associated
7686 */
7687 NamedExpression({Label name, Expression expression}) : this.full(name, express ion);
7688 accept(ASTVisitor visitor) => visitor.visitNamedExpression(this);
7689 Token get beginToken => _name.beginToken;
7690 /**
7691 * Return the element representing the parameter being named by this expressio n, or {@code null}if the AST structure has not been resolved or if there is no p arameter with the same name as
7692 * this expression.
7693 * @return the element representing the parameter being named by this expressi on
7694 */
7695 ParameterElement get element {
7696 Element element20 = _name.label.element;
7697 if (element20 is ParameterElement) {
7698 return element20 as ParameterElement;
7699 }
7700 return null;
7701 }
7702 Token get endToken => _expression.endToken;
7703 /**
7704 * Return the expression with which the name is associated.
7705 * @return the expression with which the name is associated
7706 */
7707 Expression get expression => _expression;
7708 /**
7709 * Return the name associated with the expression.
7710 * @return the name associated with the expression
7711 */
7712 Label get name => _name;
7713 /**
7714 * Set the expression with which the name is associated to the given expressio n.
7715 * @param expression the expression with which the name is associated
7716 */
7717 void set expression(Expression expression8) {
7718 this._expression = becomeParentOf(expression8);
7719 }
7720 /**
7721 * Set the name associated with the expression to the given identifier.
7722 * @param identifier the name associated with the expression
7723 */
7724 void set name(Label identifier) {
7725 _name = becomeParentOf(identifier);
7726 }
7727 void visitChildren(ASTVisitor<Object> visitor) {
7728 safelyVisitChild(_name, visitor);
7729 safelyVisitChild(_expression, visitor);
7730 }
7731 }
7732 /**
7733 * The abstract class {@code NamespaceDirective} defines the behavior common to nodes that represent
7734 * a directive that impacts the namespace of a library.
7735 * <pre>
7736 * directive ::={@link ExportDirective exportDirective}| {@link ImportDirective importDirective}</pre>
7737 * @coverage dart.engine.ast
7738 */
7739 abstract class NamespaceDirective extends UriBasedDirective {
7740 /**
7741 * The token representing the 'import' or 'export' keyword.
7742 */
7743 Token _keyword;
7744 /**
7745 * The combinators used to control which names are imported or exported.
7746 */
7747 NodeList<Combinator> _combinators;
7748 /**
7749 * The semicolon terminating the directive.
7750 */
7751 Token _semicolon;
7752 /**
7753 * Initialize a newly created namespace directive.
7754 * @param comment the documentation comment associated with this directive
7755 * @param metadata the annotations associated with the directive
7756 * @param keyword the token representing the 'import' or 'export' keyword
7757 * @param libraryUri the URI of the library being imported or exported
7758 * @param combinators the combinators used to control which names are imported or exported
7759 * @param semicolon the semicolon terminating the directive
7760 */
7761 NamespaceDirective.full(Comment comment, List<Annotation> metadata, Token keyw ord, StringLiteral libraryUri, List<Combinator> combinators, Token semicolon) : super.full(comment, metadata, libraryUri) {
7762 this._combinators = new NodeList<Combinator>(this);
7763 this._keyword = keyword;
7764 this._combinators.addAll(combinators);
7765 this._semicolon = semicolon;
7766 }
7767 /**
7768 * Initialize a newly created namespace directive.
7769 * @param comment the documentation comment associated with this directive
7770 * @param metadata the annotations associated with the directive
7771 * @param keyword the token representing the 'import' or 'export' keyword
7772 * @param libraryUri the URI of the library being imported or exported
7773 * @param combinators the combinators used to control which names are imported or exported
7774 * @param semicolon the semicolon terminating the directive
7775 */
7776 NamespaceDirective({Comment comment, List<Annotation> metadata, Token keyword, StringLiteral libraryUri, List<Combinator> combinators, Token semicolon}) : thi s.full(comment, metadata, keyword, libraryUri, combinators, semicolon);
7777 /**
7778 * Return the combinators used to control how names are imported or exported.
7779 * @return the combinators used to control how names are imported or exported
7780 */
7781 NodeList<Combinator> get combinators => _combinators;
7782 Token get endToken => _semicolon;
7783 Token get keyword => _keyword;
7784 /**
7785 * Return the semicolon terminating the directive.
7786 * @return the semicolon terminating the directive
7787 */
7788 Token get semicolon => _semicolon;
7789 /**
7790 * Set the token representing the 'import' or 'export' keyword to the given to ken.
7791 * @param exportToken the token representing the 'import' or 'export' keyword
7792 */
7793 void set keyword(Token exportToken) {
7794 this._keyword = exportToken;
7795 }
7796 /**
7797 * Set the semicolon terminating the directive to the given token.
7798 * @param semicolon the semicolon terminating the directive
7799 */
7800 void set semicolon(Token semicolon12) {
7801 this._semicolon = semicolon12;
7802 }
7803 Token get firstTokenAfterCommentAndMetadata => _keyword;
7804 }
7805 /**
7806 * The abstract class {@code NormalFormalParameter} defines the behavior common to formal parameters
7807 * that are required (are not optional).
7808 * <pre>
7809 * normalFormalParameter ::={@link FunctionTypedFormalParameter functionSignatur e}| {@link FieldFormalParameter fieldFormalParameter}| {@link SimpleFormalParame ter simpleFormalParameter}</pre>
7810 * @coverage dart.engine.ast
7811 */
7812 abstract class NormalFormalParameter extends FormalParameter {
7813 /**
7814 * The documentation comment associated with this parameter, or {@code null} i f this parameter
7815 * does not have a documentation comment associated with it.
7816 */
7817 Comment _comment;
7818 /**
7819 * The annotations associated with this parameter.
7820 */
7821 NodeList<Annotation> _metadata;
7822 /**
7823 * The name of the parameter being declared.
7824 */
7825 SimpleIdentifier _identifier;
7826 /**
7827 * Initialize a newly created formal parameter.
7828 * @param comment the documentation comment associated with this parameter
7829 * @param metadata the annotations associated with this parameter
7830 * @param identifier the name of the parameter being declared
7831 */
7832 NormalFormalParameter.full(Comment comment, List<Annotation> metadata, SimpleI dentifier identifier) {
7833 this._metadata = new NodeList<Annotation>(this);
7834 this._comment = becomeParentOf(comment);
7835 this._metadata.addAll(metadata);
7836 this._identifier = becomeParentOf(identifier);
7837 }
7838 /**
7839 * Initialize a newly created formal parameter.
7840 * @param comment the documentation comment associated with this parameter
7841 * @param metadata the annotations associated with this parameter
7842 * @param identifier the name of the parameter being declared
7843 */
7844 NormalFormalParameter({Comment comment, List<Annotation> metadata, SimpleIdent ifier identifier}) : this.full(comment, metadata, identifier);
7845 /**
7846 * Return the documentation comment associated with this parameter, or {@code null} if this
7847 * parameter does not have a documentation comment associated with it.
7848 * @return the documentation comment associated with this parameter
7849 */
7850 Comment get documentationComment => _comment;
7851 SimpleIdentifier get identifier => _identifier;
7852 ParameterKind get kind {
7853 ASTNode parent6 = parent;
7854 if (parent6 is DefaultFormalParameter) {
7855 return ((parent6 as DefaultFormalParameter)).kind;
7856 }
7857 return ParameterKind.REQUIRED;
7858 }
7859 /**
7860 * Return the annotations associated with this parameter.
7861 * @return the annotations associated with this parameter
7862 */
7863 NodeList<Annotation> get metadata => _metadata;
7864 /**
7865 * Return {@code true} if this parameter was declared with the 'const' modifie r.
7866 * @return {@code true} if this parameter was declared with the 'const' modifi er
7867 */
7868 bool isConst();
7869 /**
7870 * Return {@code true} if this parameter was declared with the 'final' modifie r. Parameters that
7871 * are declared with the 'const' modifier will return {@code false} even thoug h they are
7872 * implicitly final.
7873 * @return {@code true} if this parameter was declared with the 'final' modifi er
7874 */
7875 bool isFinal();
7876 /**
7877 * Set the documentation comment associated with this parameter to the given c omment
7878 * @param comment the documentation comment to be associated with this paramet er
7879 */
7880 void set documentationComment(Comment comment3) {
7881 this._comment = becomeParentOf(comment3);
7882 }
7883 /**
7884 * Set the name of the parameter being declared to the given identifier.
7885 * @param identifier the name of the parameter being declared
7886 */
7887 void set identifier(SimpleIdentifier identifier8) {
7888 this._identifier = becomeParentOf(identifier8);
7889 }
7890 void visitChildren(ASTVisitor<Object> visitor) {
7891 if (commentIsBeforeAnnotations()) {
7892 safelyVisitChild(_comment, visitor);
7893 _metadata.accept(visitor);
7894 } else {
7895 for (ASTNode child in sortedCommentAndAnnotations) {
7896 child.accept(visitor);
7897 }
7898 }
7899 }
7900 /**
7901 * Return {@code true} if the comment is lexically before any annotations.
7902 * @return {@code true} if the comment is lexically before any annotations
7903 */
7904 bool commentIsBeforeAnnotations() {
7905 if (_comment == null || _metadata.isEmpty) {
7906 return true;
7907 }
7908 Annotation firstAnnotation = _metadata[0];
7909 return _comment.offset < firstAnnotation.offset;
7910 }
7911 /**
7912 * Return an array containing the comment and annotations associated with this parameter, sorted
7913 * in lexical order.
7914 * @return the comment and annotations associated with this parameter in the o rder in which they
7915 * appeared in the original source
7916 */
7917 List<ASTNode> get sortedCommentAndAnnotations {
7918 List<ASTNode> childList = new List<ASTNode>();
7919 childList.add(_comment);
7920 childList.addAll(_metadata);
7921 List<ASTNode> children = new List.from(childList);
7922 children.sort();
7923 return children;
7924 }
7925 }
7926 /**
7927 * Instances of the class {@code NullLiteral} represent a null literal expressio n.
7928 * <pre>
7929 * nullLiteral ::=
7930 * 'null'
7931 * </pre>
7932 * @coverage dart.engine.ast
7933 */
7934 class NullLiteral extends Literal {
7935 /**
7936 * The token representing the literal.
7937 */
7938 Token _literal;
7939 /**
7940 * Initialize a newly created null literal.
7941 * @param token the token representing the literal
7942 */
7943 NullLiteral.full(Token token) {
7944 this._literal = token;
7945 }
7946 /**
7947 * Initialize a newly created null literal.
7948 * @param token the token representing the literal
7949 */
7950 NullLiteral({Token token}) : this.full(token);
7951 accept(ASTVisitor visitor) => visitor.visitNullLiteral(this);
7952 Token get beginToken => _literal;
7953 Token get endToken => _literal;
7954 /**
7955 * Return the token representing the literal.
7956 * @return the token representing the literal
7957 */
7958 Token get literal => _literal;
7959 /**
7960 * Set the token representing the literal to the given token.
7961 * @param literal the token representing the literal
7962 */
7963 void set literal(Token literal5) {
7964 this._literal = literal5;
7965 }
7966 void visitChildren(ASTVisitor<Object> visitor) {
7967 }
7968 }
7969 /**
7970 * Instances of the class {@code ParenthesizedExpression} represent a parenthesi zed expression.
7971 * <pre>
7972 * parenthesizedExpression ::=
7973 * '(' {@link Expression expression} ')'
7974 * </pre>
7975 * @coverage dart.engine.ast
7976 */
7977 class ParenthesizedExpression extends Expression {
7978 /**
7979 * The left parenthesis.
7980 */
7981 Token _leftParenthesis;
7982 /**
7983 * The expression within the parentheses.
7984 */
7985 Expression _expression;
7986 /**
7987 * The right parenthesis.
7988 */
7989 Token _rightParenthesis;
7990 /**
7991 * Initialize a newly created parenthesized expression.
7992 * @param leftParenthesis the left parenthesis
7993 * @param expression the expression within the parentheses
7994 * @param rightParenthesis the right parenthesis
7995 */
7996 ParenthesizedExpression.full(Token leftParenthesis, Expression expression, Tok en rightParenthesis) {
7997 this._leftParenthesis = leftParenthesis;
7998 this._expression = becomeParentOf(expression);
7999 this._rightParenthesis = rightParenthesis;
8000 }
8001 /**
8002 * Initialize a newly created parenthesized expression.
8003 * @param leftParenthesis the left parenthesis
8004 * @param expression the expression within the parentheses
8005 * @param rightParenthesis the right parenthesis
8006 */
8007 ParenthesizedExpression({Token leftParenthesis, Expression expression, Token r ightParenthesis}) : this.full(leftParenthesis, expression, rightParenthesis);
8008 accept(ASTVisitor visitor) => visitor.visitParenthesizedExpression(this);
8009 Token get beginToken => _leftParenthesis;
8010 Token get endToken => _rightParenthesis;
8011 /**
8012 * Return the expression within the parentheses.
8013 * @return the expression within the parentheses
8014 */
8015 Expression get expression => _expression;
8016 /**
8017 * Return the left parenthesis.
8018 * @return the left parenthesis
8019 */
8020 Token get leftParenthesis => _leftParenthesis;
8021 /**
8022 * Return the right parenthesis.
8023 * @return the right parenthesis
8024 */
8025 Token get rightParenthesis => _rightParenthesis;
8026 /**
8027 * Set the expression within the parentheses to the given expression.
8028 * @param expression the expression within the parentheses
8029 */
8030 void set expression(Expression expression9) {
8031 this._expression = becomeParentOf(expression9);
8032 }
8033 /**
8034 * Set the left parenthesis to the given token.
8035 * @param parenthesis the left parenthesis
8036 */
8037 void set leftParenthesis(Token parenthesis) {
8038 _leftParenthesis = parenthesis;
8039 }
8040 /**
8041 * Set the right parenthesis to the given token.
8042 * @param parenthesis the right parenthesis
8043 */
8044 void set rightParenthesis(Token parenthesis) {
8045 _rightParenthesis = parenthesis;
8046 }
8047 void visitChildren(ASTVisitor<Object> visitor) {
8048 safelyVisitChild(_expression, visitor);
8049 }
8050 }
8051 /**
8052 * Instances of the class {@code PartDirective} represent a part directive.
8053 * <pre>
8054 * partDirective ::={@link Annotation metadata} 'part' {@link StringLiteral part Uri} ';'
8055 * </pre>
8056 * @coverage dart.engine.ast
8057 */
8058 class PartDirective extends UriBasedDirective {
8059 /**
8060 * The token representing the 'part' token.
8061 */
8062 Token _partToken;
8063 /**
8064 * The semicolon terminating the directive.
8065 */
8066 Token _semicolon;
8067 /**
8068 * Initialize a newly created part directive.
8069 * @param comment the documentation comment associated with this directive
8070 * @param metadata the annotations associated with the directive
8071 * @param partToken the token representing the 'part' token
8072 * @param partUri the URI of the part being included
8073 * @param semicolon the semicolon terminating the directive
8074 */
8075 PartDirective.full(Comment comment, List<Annotation> metadata, Token partToken , StringLiteral partUri, Token semicolon) : super.full(comment, metadata, partUr i) {
8076 this._partToken = partToken;
8077 this._semicolon = semicolon;
8078 }
8079 /**
8080 * Initialize a newly created part directive.
8081 * @param comment the documentation comment associated with this directive
8082 * @param metadata the annotations associated with the directive
8083 * @param partToken the token representing the 'part' token
8084 * @param partUri the URI of the part being included
8085 * @param semicolon the semicolon terminating the directive
8086 */
8087 PartDirective({Comment comment, List<Annotation> metadata, Token partToken, St ringLiteral partUri, Token semicolon}) : this.full(comment, metadata, partToken, partUri, semicolon);
8088 accept(ASTVisitor visitor) => visitor.visitPartDirective(this);
8089 Token get endToken => _semicolon;
8090 Token get keyword => _partToken;
8091 /**
8092 * Return the token representing the 'part' token.
8093 * @return the token representing the 'part' token
8094 */
8095 Token get partToken => _partToken;
8096 /**
8097 * Return the semicolon terminating the directive.
8098 * @return the semicolon terminating the directive
8099 */
8100 Token get semicolon => _semicolon;
8101 /**
8102 * Set the token representing the 'part' token to the given token.
8103 * @param partToken the token representing the 'part' token
8104 */
8105 void set partToken(Token partToken2) {
8106 this._partToken = partToken2;
8107 }
8108 /**
8109 * Set the semicolon terminating the directive to the given token.
8110 * @param semicolon the semicolon terminating the directive
8111 */
8112 void set semicolon(Token semicolon13) {
8113 this._semicolon = semicolon13;
8114 }
8115 Token get firstTokenAfterCommentAndMetadata => _partToken;
8116 }
8117 /**
8118 * Instances of the class {@code PartOfDirective} represent a part-of directive.
8119 * <pre>
8120 * partOfDirective ::={@link Annotation metadata} 'part' 'of' {@link Identifier libraryName} ';'
8121 * </pre>
8122 * @coverage dart.engine.ast
8123 */
8124 class PartOfDirective extends Directive {
8125 /**
8126 * The token representing the 'part' token.
8127 */
8128 Token _partToken;
8129 /**
8130 * The token representing the 'of' token.
8131 */
8132 Token _ofToken;
8133 /**
8134 * The name of the library that the containing compilation unit is part of.
8135 */
8136 LibraryIdentifier _libraryName;
8137 /**
8138 * The semicolon terminating the directive.
8139 */
8140 Token _semicolon;
8141 /**
8142 * Initialize a newly created part-of directive.
8143 * @param comment the documentation comment associated with this directive
8144 * @param metadata the annotations associated with the directive
8145 * @param partToken the token representing the 'part' token
8146 * @param ofToken the token representing the 'of' token
8147 * @param libraryName the name of the library that the containing compilation unit is part of
8148 * @param semicolon the semicolon terminating the directive
8149 */
8150 PartOfDirective.full(Comment comment, List<Annotation> metadata, Token partTok en, Token ofToken, LibraryIdentifier libraryName, Token semicolon) : super.full( comment, metadata) {
8151 this._partToken = partToken;
8152 this._ofToken = ofToken;
8153 this._libraryName = becomeParentOf(libraryName);
8154 this._semicolon = semicolon;
8155 }
8156 /**
8157 * Initialize a newly created part-of directive.
8158 * @param comment the documentation comment associated with this directive
8159 * @param metadata the annotations associated with the directive
8160 * @param partToken the token representing the 'part' token
8161 * @param ofToken the token representing the 'of' token
8162 * @param libraryName the name of the library that the containing compilation unit is part of
8163 * @param semicolon the semicolon terminating the directive
8164 */
8165 PartOfDirective({Comment comment, List<Annotation> metadata, Token partToken, Token ofToken, LibraryIdentifier libraryName, Token semicolon}) : this.full(comm ent, metadata, partToken, ofToken, libraryName, semicolon);
8166 accept(ASTVisitor visitor) => visitor.visitPartOfDirective(this);
8167 Token get endToken => _semicolon;
8168 Token get keyword => _partToken;
8169 /**
8170 * Return the name of the library that the containing compilation unit is part of.
8171 * @return the name of the library that the containing compilation unit is par t of
8172 */
8173 LibraryIdentifier get libraryName => _libraryName;
8174 /**
8175 * Return the token representing the 'of' token.
8176 * @return the token representing the 'of' token
8177 */
8178 Token get ofToken => _ofToken;
8179 /**
8180 * Return the token representing the 'part' token.
8181 * @return the token representing the 'part' token
8182 */
8183 Token get partToken => _partToken;
8184 /**
8185 * Return the semicolon terminating the directive.
8186 * @return the semicolon terminating the directive
8187 */
8188 Token get semicolon => _semicolon;
8189 /**
8190 * Set the name of the library that the containing compilation unit is part of to the given name.
8191 * @param libraryName the name of the library that the containing compilation unit is part of
8192 */
8193 void set libraryName(LibraryIdentifier libraryName2) {
8194 this._libraryName = becomeParentOf(libraryName2);
8195 }
8196 /**
8197 * Set the token representing the 'of' token to the given token.
8198 * @param ofToken the token representing the 'of' token
8199 */
8200 void set ofToken(Token ofToken2) {
8201 this._ofToken = ofToken2;
8202 }
8203 /**
8204 * Set the token representing the 'part' token to the given token.
8205 * @param partToken the token representing the 'part' token
8206 */
8207 void set partToken(Token partToken3) {
8208 this._partToken = partToken3;
8209 }
8210 /**
8211 * Set the semicolon terminating the directive to the given token.
8212 * @param semicolon the semicolon terminating the directive
8213 */
8214 void set semicolon(Token semicolon14) {
8215 this._semicolon = semicolon14;
8216 }
8217 void visitChildren(ASTVisitor<Object> visitor) {
8218 super.visitChildren(visitor);
8219 safelyVisitChild(_libraryName, visitor);
8220 }
8221 Token get firstTokenAfterCommentAndMetadata => _partToken;
8222 }
8223 /**
8224 * Instances of the class {@code PostfixExpression} represent a postfix unary ex pression.
8225 * <pre>
8226 * postfixExpression ::={@link Expression operand} {@link Token operator}</pre>
8227 * @coverage dart.engine.ast
8228 */
8229 class PostfixExpression extends Expression {
8230 /**
8231 * The expression computing the operand for the operator.
8232 */
8233 Expression _operand;
8234 /**
8235 * The postfix operator being applied to the operand.
8236 */
8237 Token _operator;
8238 /**
8239 * The element associated with this the operator, or {@code null} if the AST s tructure has not
8240 * been resolved, if the operator is not user definable, or if the operator co uld not be resolved.
8241 */
8242 MethodElement _element;
8243 /**
8244 * Initialize a newly created postfix expression.
8245 * @param operand the expression computing the operand for the operator
8246 * @param operator the postfix operator being applied to the operand
8247 */
8248 PostfixExpression.full(Expression operand, Token operator) {
8249 this._operand = becomeParentOf(operand);
8250 this._operator = operator;
8251 }
8252 /**
8253 * Initialize a newly created postfix expression.
8254 * @param operand the expression computing the operand for the operator
8255 * @param operator the postfix operator being applied to the operand
8256 */
8257 PostfixExpression({Expression operand, Token operator}) : this.full(operand, o perator);
8258 accept(ASTVisitor visitor) => visitor.visitPostfixExpression(this);
8259 Token get beginToken => _operand.beginToken;
8260 /**
8261 * Return the element associated with the operator, or {@code null} if the AST structure has not
8262 * been resolved, if the operator is not user definable, or if the operator co uld not be resolved.
8263 * One example of the latter case is an operator that is not defined for the t ype of the operand.
8264 * @return the element associated with the operator
8265 */
8266 MethodElement get element => _element;
8267 Token get endToken => _operator;
8268 /**
8269 * Return the expression computing the operand for the operator.
8270 * @return the expression computing the operand for the operator
8271 */
8272 Expression get operand => _operand;
8273 /**
8274 * Return the postfix operator being applied to the operand.
8275 * @return the postfix operator being applied to the operand
8276 */
8277 Token get operator => _operator;
8278 /**
8279 * Set the element associated with the operator to the given element.
8280 * @param element the element associated with the operator
8281 */
8282 void set element(MethodElement element13) {
8283 this._element = element13;
8284 }
8285 /**
8286 * Set the expression computing the operand for the operator to the given expr ession.
8287 * @param expression the expression computing the operand for the operator
8288 */
8289 void set operand(Expression expression) {
8290 _operand = becomeParentOf(expression);
8291 }
8292 /**
8293 * Set the postfix operator being applied to the operand to the given operator .
8294 * @param operator the postfix operator being applied to the operand
8295 */
8296 void set operator(Token operator4) {
8297 this._operator = operator4;
8298 }
8299 void visitChildren(ASTVisitor<Object> visitor) {
8300 safelyVisitChild(_operand, visitor);
8301 }
8302 }
8303 /**
8304 * Instances of the class {@code PrefixExpression} represent a prefix unary expr ession.
8305 * <pre>
8306 * prefixExpression ::={@link Token operator} {@link Expression operand}</pre>
8307 * @coverage dart.engine.ast
8308 */
8309 class PrefixExpression extends Expression {
8310 /**
8311 * The prefix operator being applied to the operand.
8312 */
8313 Token _operator;
8314 /**
8315 * The expression computing the operand for the operator.
8316 */
8317 Expression _operand;
8318 /**
8319 * The element associated with the operator, or {@code null} if the AST struct ure has not been
8320 * resolved, if the operator is not user definable, or if the operator could n ot be resolved.
8321 */
8322 MethodElement _element;
8323 /**
8324 * Initialize a newly created prefix expression.
8325 * @param operator the prefix operator being applied to the operand
8326 * @param operand the expression computing the operand for the operator
8327 */
8328 PrefixExpression.full(Token operator, Expression operand) {
8329 this._operator = operator;
8330 this._operand = becomeParentOf(operand);
8331 }
8332 /**
8333 * Initialize a newly created prefix expression.
8334 * @param operator the prefix operator being applied to the operand
8335 * @param operand the expression computing the operand for the operator
8336 */
8337 PrefixExpression({Token operator, Expression operand}) : this.full(operator, o perand);
8338 accept(ASTVisitor visitor) => visitor.visitPrefixExpression(this);
8339 Token get beginToken => _operator;
8340 /**
8341 * Return the element associated with the operator, or {@code null} if the AST structure has not
8342 * been resolved, if the operator is not user definable, or if the operator co uld not be resolved.
8343 * One example of the latter case is an operator that is not defined for the t ype of the operand.
8344 * @return the element associated with the operator
8345 */
8346 MethodElement get element => _element;
8347 Token get endToken => _operand.endToken;
8348 /**
8349 * Return the expression computing the operand for the operator.
8350 * @return the expression computing the operand for the operator
8351 */
8352 Expression get operand => _operand;
8353 /**
8354 * Return the prefix operator being applied to the operand.
8355 * @return the prefix operator being applied to the operand
8356 */
8357 Token get operator => _operator;
8358 /**
8359 * Set the element associated with the operator to the given element.
8360 * @param element the element associated with the operator
8361 */
8362 void set element(MethodElement element14) {
8363 this._element = element14;
8364 }
8365 /**
8366 * Set the expression computing the operand for the operator to the given expr ession.
8367 * @param expression the expression computing the operand for the operator
8368 */
8369 void set operand(Expression expression) {
8370 _operand = becomeParentOf(expression);
8371 }
8372 /**
8373 * Set the prefix operator being applied to the operand to the given operator.
8374 * @param operator the prefix operator being applied to the operand
8375 */
8376 void set operator(Token operator5) {
8377 this._operator = operator5;
8378 }
8379 void visitChildren(ASTVisitor<Object> visitor) {
8380 safelyVisitChild(_operand, visitor);
8381 }
8382 }
8383 /**
8384 * Instances of the class {@code PrefixedIdentifier} represent either an identif ier that is prefixed
8385 * or an access to an object property where the target of the property access is a simple
8386 * identifier.
8387 * <pre>
8388 * prefixedIdentifier ::={@link SimpleIdentifier prefix} '.' {@link SimpleIdenti fier identifier}</pre>
8389 * @coverage dart.engine.ast
8390 */
8391 class PrefixedIdentifier extends Identifier {
8392 /**
8393 * The prefix associated with the library in which the identifier is defined.
8394 */
8395 SimpleIdentifier _prefix;
8396 /**
8397 * The period used to separate the prefix from the identifier.
8398 */
8399 Token _period;
8400 /**
8401 * The identifier being prefixed.
8402 */
8403 SimpleIdentifier _identifier;
8404 /**
8405 * Initialize a newly created prefixed identifier.
8406 * @param prefix the identifier being prefixed
8407 * @param period the period used to separate the prefix from the identifier
8408 * @param identifier the prefix associated with the library in which the ident ifier is defined
8409 */
8410 PrefixedIdentifier.full(SimpleIdentifier prefix, Token period, SimpleIdentifie r identifier) {
8411 this._prefix = becomeParentOf(prefix);
8412 this._period = period;
8413 this._identifier = becomeParentOf(identifier);
8414 }
8415 /**
8416 * Initialize a newly created prefixed identifier.
8417 * @param prefix the identifier being prefixed
8418 * @param period the period used to separate the prefix from the identifier
8419 * @param identifier the prefix associated with the library in which the ident ifier is defined
8420 */
8421 PrefixedIdentifier({SimpleIdentifier prefix, Token period, SimpleIdentifier id entifier}) : this.full(prefix, period, identifier);
8422 accept(ASTVisitor visitor) => visitor.visitPrefixedIdentifier(this);
8423 Token get beginToken => _prefix.beginToken;
8424 Element get element {
8425 if (_identifier == null) {
8426 return null;
8427 }
8428 return _identifier.element;
8429 }
8430 Token get endToken => _identifier.endToken;
8431 /**
8432 * Return the identifier being prefixed.
8433 * @return the identifier being prefixed
8434 */
8435 SimpleIdentifier get identifier => _identifier;
8436 String get name => "${_prefix.name}.${_identifier.name}";
8437 /**
8438 * Return the period used to separate the prefix from the identifier.
8439 * @return the period used to separate the prefix from the identifier
8440 */
8441 Token get period => _period;
8442 /**
8443 * Return the prefix associated with the library in which the identifier is de fined.
8444 * @return the prefix associated with the library in which the identifier is d efined
8445 */
8446 SimpleIdentifier get prefix => _prefix;
8447 /**
8448 * Set the identifier being prefixed to the given identifier.
8449 * @param identifier the identifier being prefixed
8450 */
8451 void set identifier(SimpleIdentifier identifier9) {
8452 this._identifier = becomeParentOf(identifier9);
8453 }
8454 /**
8455 * Set the period used to separate the prefix from the identifier to the given token.
8456 * @param period the period used to separate the prefix from the identifier
8457 */
8458 void set period(Token period10) {
8459 this._period = period10;
8460 }
8461 /**
8462 * Set the prefix associated with the library in which the identifier is defin ed to the given
8463 * identifier.
8464 * @param identifier the prefix associated with the library in which the ident ifier is defined
8465 */
8466 void set prefix(SimpleIdentifier identifier) {
8467 _prefix = becomeParentOf(identifier);
8468 }
8469 void visitChildren(ASTVisitor<Object> visitor) {
8470 safelyVisitChild(_prefix, visitor);
8471 safelyVisitChild(_identifier, visitor);
8472 }
8473 }
8474 /**
8475 * Instances of the class {@code PropertyAccess} represent the access of a prope rty of an object.
8476 * <p>
8477 * Note, however, that accesses to properties of objects can also be represented as{@link PrefixedIdentifier prefixed identifier} nodes in cases where the targe t is also a simple
8478 * identifier.
8479 * <pre>
8480 * propertyAccess ::={@link Expression target} '.' {@link SimpleIdentifier prope rtyName}</pre>
8481 * @coverage dart.engine.ast
8482 */
8483 class PropertyAccess extends Expression {
8484 /**
8485 * The expression computing the object defining the property being accessed.
8486 */
8487 Expression _target;
8488 /**
8489 * The property access operator.
8490 */
8491 Token _operator;
8492 /**
8493 * The name of the property being accessed.
8494 */
8495 SimpleIdentifier _propertyName;
8496 /**
8497 * Initialize a newly created property access expression.
8498 * @param target the expression computing the object defining the property bei ng accessed
8499 * @param operator the property access operator
8500 * @param propertyName the name of the property being accessed
8501 */
8502 PropertyAccess.full(Expression target, Token operator, SimpleIdentifier proper tyName) {
8503 this._target = becomeParentOf(target);
8504 this._operator = operator;
8505 this._propertyName = becomeParentOf(propertyName);
8506 }
8507 /**
8508 * Initialize a newly created property access expression.
8509 * @param target the expression computing the object defining the property bei ng accessed
8510 * @param operator the property access operator
8511 * @param propertyName the name of the property being accessed
8512 */
8513 PropertyAccess({Expression target, Token operator, SimpleIdentifier propertyNa me}) : this.full(target, operator, propertyName);
8514 accept(ASTVisitor visitor) => visitor.visitPropertyAccess(this);
8515 Token get beginToken {
8516 if (_target != null) {
8517 return _target.beginToken;
8518 }
8519 return _operator;
8520 }
8521 Token get endToken => _propertyName.endToken;
8522 /**
8523 * Return the property access operator.
8524 * @return the property access operator
8525 */
8526 Token get operator => _operator;
8527 /**
8528 * Return the name of the property being accessed.
8529 * @return the name of the property being accessed
8530 */
8531 SimpleIdentifier get propertyName => _propertyName;
8532 /**
8533 * Return the expression used to compute the receiver of the invocation. If th is invocation is not
8534 * part of a cascade expression, then this is the same as {@link #getTarget()} . If this invocation
8535 * is part of a cascade expression, then the target stored with the cascade ex pression is
8536 * returned.
8537 * @return the expression used to compute the receiver of the invocation
8538 * @see #getTarget()
8539 */
8540 Expression get realTarget {
8541 if (isCascaded()) {
8542 ASTNode ancestor = parent;
8543 while (ancestor is! CascadeExpression) {
8544 if (ancestor == null) {
8545 return _target;
8546 }
8547 ancestor = ancestor.parent;
8548 }
8549 return ((ancestor as CascadeExpression)).target;
8550 }
8551 return _target;
8552 }
8553 /**
8554 * Return the expression computing the object defining the property being acce ssed, or{@code null} if this property access is part of a cascade expression.
8555 * @return the expression computing the object defining the property being acc essed
8556 * @see #getRealTarget()
8557 */
8558 Expression get target => _target;
8559 bool isAssignable() => true;
8560 /**
8561 * Return {@code true} if this expression is cascaded. If it is, then the targ et of this
8562 * expression is not stored locally but is stored in the nearest ancestor that is a{@link CascadeExpression}.
8563 * @return {@code true} if this expression is cascaded
8564 */
8565 bool isCascaded() => _operator != null && identical(_operator.type, TokenType. PERIOD_PERIOD);
8566 /**
8567 * Set the property access operator to the given token.
8568 * @param operator the property access operator
8569 */
8570 void set operator(Token operator6) {
8571 this._operator = operator6;
8572 }
8573 /**
8574 * Set the name of the property being accessed to the given identifier.
8575 * @param identifier the name of the property being accessed
8576 */
8577 void set propertyName(SimpleIdentifier identifier) {
8578 _propertyName = becomeParentOf(identifier);
8579 }
8580 /**
8581 * Set the expression computing the object defining the property being accesse d to the given
8582 * expression.
8583 * @param expression the expression computing the object defining the property being accessed
8584 */
8585 void set target(Expression expression) {
8586 _target = becomeParentOf(expression);
8587 }
8588 void visitChildren(ASTVisitor<Object> visitor) {
8589 safelyVisitChild(_target, visitor);
8590 safelyVisitChild(_propertyName, visitor);
8591 }
8592 }
8593 /**
8594 * Instances of the class {@code RedirectingConstructorInvocation} represent the invocation of a
8595 * another constructor in the same class from within a constructor's initializat ion list.
8596 * <pre>
8597 * redirectingConstructorInvocation ::=
8598 * 'this' ('.' identifier)? arguments
8599 * </pre>
8600 * @coverage dart.engine.ast
8601 */
8602 class RedirectingConstructorInvocation extends ConstructorInitializer {
8603 /**
8604 * The token for the 'this' keyword.
8605 */
8606 Token _keyword;
8607 /**
8608 * The token for the period before the name of the constructor that is being i nvoked, or{@code null} if the unnamed constructor is being invoked.
8609 */
8610 Token _period;
8611 /**
8612 * The name of the constructor that is being invoked, or {@code null} if the u nnamed constructor
8613 * is being invoked.
8614 */
8615 SimpleIdentifier _constructorName;
8616 /**
8617 * The list of arguments to the constructor.
8618 */
8619 ArgumentList _argumentList;
8620 /**
8621 * The element associated with the constructor, or {@code null} if the AST str ucture has not been
8622 * resolved or if the constructor could not be resolved.
8623 */
8624 ConstructorElement _element;
8625 /**
8626 * Initialize a newly created redirecting invocation to invoke the constructor with the given name
8627 * with the given arguments.
8628 * @param keyword the token for the 'this' keyword
8629 * @param period the token for the period before the name of the constructor t hat is being invoked
8630 * @param constructorName the name of the constructor that is being invoked
8631 * @param argumentList the list of arguments to the constructor
8632 */
8633 RedirectingConstructorInvocation.full(Token keyword, Token period, SimpleIdent ifier constructorName, ArgumentList argumentList) {
8634 this._keyword = keyword;
8635 this._period = period;
8636 this._constructorName = becomeParentOf(constructorName);
8637 this._argumentList = becomeParentOf(argumentList);
8638 }
8639 /**
8640 * Initialize a newly created redirecting invocation to invoke the constructor with the given name
8641 * with the given arguments.
8642 * @param keyword the token for the 'this' keyword
8643 * @param period the token for the period before the name of the constructor t hat is being invoked
8644 * @param constructorName the name of the constructor that is being invoked
8645 * @param argumentList the list of arguments to the constructor
8646 */
8647 RedirectingConstructorInvocation({Token keyword, Token period, SimpleIdentifie r constructorName, ArgumentList argumentList}) : this.full(keyword, period, cons tructorName, argumentList);
8648 accept(ASTVisitor visitor) => visitor.visitRedirectingConstructorInvocation(th is);
8649 /**
8650 * Return the list of arguments to the constructor.
8651 * @return the list of arguments to the constructor
8652 */
8653 ArgumentList get argumentList => _argumentList;
8654 Token get beginToken => _keyword;
8655 /**
8656 * Return the name of the constructor that is being invoked, or {@code null} i f the unnamed
8657 * constructor is being invoked.
8658 * @return the name of the constructor that is being invoked
8659 */
8660 SimpleIdentifier get constructorName => _constructorName;
8661 /**
8662 * Return the element associated with the constructor, or {@code null} if the AST structure has
8663 * not been resolved or if the constructor could not be resolved.
8664 * @return the element associated with the super constructor
8665 */
8666 ConstructorElement get element => _element;
8667 Token get endToken => _argumentList.endToken;
8668 /**
8669 * Return the token for the 'this' keyword.
8670 * @return the token for the 'this' keyword
8671 */
8672 Token get keyword => _keyword;
8673 /**
8674 * Return the token for the period before the name of the constructor that is being invoked, or{@code null} if the unnamed constructor is being invoked.
8675 * @return the token for the period before the name of the constructor that is being invoked
8676 */
8677 Token get period => _period;
8678 /**
8679 * Set the list of arguments to the constructor to the given list.
8680 * @param argumentList the list of arguments to the constructor
8681 */
8682 void set argumentList(ArgumentList argumentList8) {
8683 this._argumentList = becomeParentOf(argumentList8);
8684 }
8685 /**
8686 * Set the name of the constructor that is being invoked to the given identifi er.
8687 * @param identifier the name of the constructor that is being invoked
8688 */
8689 void set constructorName(SimpleIdentifier identifier) {
8690 _constructorName = becomeParentOf(identifier);
8691 }
8692 /**
8693 * Set the element associated with the constructor to the given element.
8694 * @param element the element associated with the constructor
8695 */
8696 void set element(ConstructorElement element15) {
8697 this._element = element15;
8698 }
8699 /**
8700 * Set the token for the 'this' keyword to the given token.
8701 * @param keyword the token for the 'this' keyword
8702 */
8703 void set keyword(Token keyword14) {
8704 this._keyword = keyword14;
8705 }
8706 /**
8707 * Set the token for the period before the name of the constructor that is bei ng invoked to the
8708 * given token.
8709 * @param period the token for the period before the name of the constructor t hat is being invoked
8710 */
8711 void set period(Token period11) {
8712 this._period = period11;
8713 }
8714 void visitChildren(ASTVisitor<Object> visitor) {
8715 safelyVisitChild(_constructorName, visitor);
8716 safelyVisitChild(_argumentList, visitor);
8717 }
8718 }
8719 /**
8720 * Instances of the class {@code ReturnStatement} represent a return statement.
8721 * <pre>
8722 * returnStatement ::=
8723 * 'return' {@link Expression expression}? ';'
8724 * </pre>
8725 * @coverage dart.engine.ast
8726 */
8727 class ReturnStatement extends Statement {
8728 /**
8729 * The token representing the 'return' keyword.
8730 */
8731 Token _keyword;
8732 /**
8733 * The expression computing the value to be returned, or {@code null} if no ex plicit value was
8734 * provided.
8735 */
8736 Expression _expression;
8737 /**
8738 * The semicolon terminating the statement.
8739 */
8740 Token _semicolon;
8741 /**
8742 * Initialize a newly created return statement.
8743 * @param keyword the token representing the 'return' keyword
8744 * @param expression the expression computing the value to be returned
8745 * @param semicolon the semicolon terminating the statement
8746 */
8747 ReturnStatement.full(Token keyword, Expression expression, Token semicolon) {
8748 this._keyword = keyword;
8749 this._expression = becomeParentOf(expression);
8750 this._semicolon = semicolon;
8751 }
8752 /**
8753 * Initialize a newly created return statement.
8754 * @param keyword the token representing the 'return' keyword
8755 * @param expression the expression computing the value to be returned
8756 * @param semicolon the semicolon terminating the statement
8757 */
8758 ReturnStatement({Token keyword, Expression expression, Token semicolon}) : thi s.full(keyword, expression, semicolon);
8759 accept(ASTVisitor visitor) => visitor.visitReturnStatement(this);
8760 Token get beginToken => _keyword;
8761 Token get endToken => _semicolon;
8762 /**
8763 * Return the expression computing the value to be returned, or {@code null} i f no explicit value
8764 * was provided.
8765 * @return the expression computing the value to be returned
8766 */
8767 Expression get expression => _expression;
8768 /**
8769 * Return the token representing the 'return' keyword.
8770 * @return the token representing the 'return' keyword
8771 */
8772 Token get keyword => _keyword;
8773 /**
8774 * Return the semicolon terminating the statement.
8775 * @return the semicolon terminating the statement
8776 */
8777 Token get semicolon => _semicolon;
8778 /**
8779 * Set the expression computing the value to be returned to the given expressi on.
8780 * @param expression the expression computing the value to be returned
8781 */
8782 void set expression(Expression expression10) {
8783 this._expression = becomeParentOf(expression10);
8784 }
8785 /**
8786 * Set the token representing the 'return' keyword to the given token.
8787 * @param keyword the token representing the 'return' keyword
8788 */
8789 void set keyword(Token keyword15) {
8790 this._keyword = keyword15;
8791 }
8792 /**
8793 * Set the semicolon terminating the statement to the given token.
8794 * @param semicolon the semicolon terminating the statement
8795 */
8796 void set semicolon(Token semicolon15) {
8797 this._semicolon = semicolon15;
8798 }
8799 void visitChildren(ASTVisitor<Object> visitor) {
8800 safelyVisitChild(_expression, visitor);
8801 }
8802 }
8803 /**
8804 * Instances of the class {@code ScriptTag} represent the script tag that can op tionally occur at
8805 * the beginning of a compilation unit.
8806 * <pre>
8807 * scriptTag ::=
8808 * '#!' (~NEWLINE)* NEWLINE
8809 * </pre>
8810 * @coverage dart.engine.ast
8811 */
8812 class ScriptTag extends ASTNode {
8813 /**
8814 * The token representing this script tag.
8815 */
8816 Token _scriptTag;
8817 /**
8818 * Initialize a newly created script tag.
8819 * @param scriptTag the token representing this script tag
8820 */
8821 ScriptTag.full(Token scriptTag) {
8822 this._scriptTag = scriptTag;
8823 }
8824 /**
8825 * Initialize a newly created script tag.
8826 * @param scriptTag the token representing this script tag
8827 */
8828 ScriptTag({Token scriptTag}) : this.full(scriptTag);
8829 accept(ASTVisitor visitor) => visitor.visitScriptTag(this);
8830 Token get beginToken => _scriptTag;
8831 Token get endToken => _scriptTag;
8832 /**
8833 * Return the token representing this script tag.
8834 * @return the token representing this script tag
8835 */
8836 Token get scriptTag => _scriptTag;
8837 /**
8838 * Set the token representing this script tag to the given script tag.
8839 * @param scriptTag the token representing this script tag
8840 */
8841 void set scriptTag(Token scriptTag3) {
8842 this._scriptTag = scriptTag3;
8843 }
8844 void visitChildren(ASTVisitor<Object> visitor) {
8845 }
8846 }
8847 /**
8848 * Instances of the class {@code ShowCombinator} represent a combinator that res tricts the names
8849 * being imported to those in a given list.
8850 * <pre>
8851 * showCombinator ::=
8852 * 'show' {@link SimpleIdentifier identifier} (',' {@link SimpleIdentifier ident ifier})
8853 * </pre>
8854 * @coverage dart.engine.ast
8855 */
8856 class ShowCombinator extends Combinator {
8857 /**
8858 * The list of names from the library that are made visible by this combinator .
8859 */
8860 NodeList<SimpleIdentifier> _shownNames;
8861 /**
8862 * Initialize a newly created import show combinator.
8863 * @param keyword the comma introducing the combinator
8864 * @param shownNames the list of names from the library that are made visible by this combinator
8865 */
8866 ShowCombinator.full(Token keyword, List<SimpleIdentifier> shownNames) : super. full(keyword) {
8867 this._shownNames = new NodeList<SimpleIdentifier>(this);
8868 this._shownNames.addAll(shownNames);
8869 }
8870 /**
8871 * Initialize a newly created import show combinator.
8872 * @param keyword the comma introducing the combinator
8873 * @param shownNames the list of names from the library that are made visible by this combinator
8874 */
8875 ShowCombinator({Token keyword, List<SimpleIdentifier> shownNames}) : this.full (keyword, shownNames);
8876 accept(ASTVisitor visitor) => visitor.visitShowCombinator(this);
8877 Token get endToken => _shownNames.endToken;
8878 /**
8879 * Return the list of names from the library that are made visible by this com binator.
8880 * @return the list of names from the library that are made visible by this co mbinator
8881 */
8882 NodeList<SimpleIdentifier> get shownNames => _shownNames;
8883 void visitChildren(ASTVisitor<Object> visitor) {
8884 _shownNames.accept(visitor);
8885 }
8886 }
8887 /**
8888 * Instances of the class {@code SimpleFormalParameter} represent a simple forma l parameter.
8889 * <pre>
8890 * simpleFormalParameter ::=
8891 * ('final' {@link TypeName type} | 'var' | {@link TypeName type})? {@link Simpl eIdentifier identifier}</pre>
8892 * @coverage dart.engine.ast
8893 */
8894 class SimpleFormalParameter extends NormalFormalParameter {
8895 /**
8896 * The token representing either the 'final', 'const' or 'var' keyword, or {@c ode null} if no
8897 * keyword was used.
8898 */
8899 Token _keyword;
8900 /**
8901 * The name of the declared type of the parameter, or {@code null} if the para meter does not have
8902 * a declared type.
8903 */
8904 TypeName _type;
8905 /**
8906 * Initialize a newly created formal parameter.
8907 * @param comment the documentation comment associated with this parameter
8908 * @param metadata the annotations associated with this parameter
8909 * @param keyword the token representing either the 'final', 'const' or 'var' keyword
8910 * @param type the name of the declared type of the parameter
8911 * @param identifier the name of the parameter being declared
8912 */
8913 SimpleFormalParameter.full(Comment comment, List<Annotation> metadata, Token k eyword, TypeName type, SimpleIdentifier identifier) : super.full(comment, metada ta, identifier) {
8914 this._keyword = keyword;
8915 this._type = becomeParentOf(type);
8916 }
8917 /**
8918 * Initialize a newly created formal parameter.
8919 * @param comment the documentation comment associated with this parameter
8920 * @param metadata the annotations associated with this parameter
8921 * @param keyword the token representing either the 'final', 'const' or 'var' keyword
8922 * @param type the name of the declared type of the parameter
8923 * @param identifier the name of the parameter being declared
8924 */
8925 SimpleFormalParameter({Comment comment, List<Annotation> metadata, Token keywo rd, TypeName type, SimpleIdentifier identifier}) : this.full(comment, metadata, keyword, type, identifier);
8926 accept(ASTVisitor visitor) => visitor.visitSimpleFormalParameter(this);
8927 Token get beginToken {
8928 if (_keyword != null) {
8929 return _keyword;
8930 } else if (_type != null) {
8931 return _type.beginToken;
8932 }
8933 return identifier.beginToken;
8934 }
8935 Token get endToken => identifier.endToken;
8936 /**
8937 * Return the token representing either the 'final', 'const' or 'var' keyword.
8938 * @return the token representing either the 'final', 'const' or 'var' keyword
8939 */
8940 Token get keyword => _keyword;
8941 /**
8942 * Return the name of the declared type of the parameter, or {@code null} if t he parameter does
8943 * not have a declared type.
8944 * @return the name of the declared type of the parameter
8945 */
8946 TypeName get type => _type;
8947 bool isConst() => (_keyword is KeywordToken) && identical(((_keyword as Keywor dToken)).keyword, Keyword.CONST);
8948 bool isFinal() => (_keyword is KeywordToken) && identical(((_keyword as Keywor dToken)).keyword, Keyword.FINAL);
8949 /**
8950 * Set the token representing either the 'final', 'const' or 'var' keyword to the given token.
8951 * @param keyword the token representing either the 'final', 'const' or 'var' keyword
8952 */
8953 void set keyword(Token keyword16) {
8954 this._keyword = keyword16;
8955 }
8956 /**
8957 * Set the name of the declared type of the parameter to the given type name.
8958 * @param typeName the name of the declared type of the parameter
8959 */
8960 void set type(TypeName typeName) {
8961 _type = becomeParentOf(typeName);
8962 }
8963 void visitChildren(ASTVisitor<Object> visitor) {
8964 super.visitChildren(visitor);
8965 safelyVisitChild(_type, visitor);
8966 safelyVisitChild(identifier, visitor);
8967 }
8968 }
8969 /**
8970 * Instances of the class {@code SimpleIdentifier} represent a simple identifier .
8971 * <pre>
8972 * simpleIdentifier ::=
8973 * initialCharacter internalCharacter
8974 * initialCharacter ::= '_' | '$' | letter
8975 * internalCharacter ::= '_' | '$' | letter | digit
8976 * </pre>
8977 * @coverage dart.engine.ast
8978 */
8979 class SimpleIdentifier extends Identifier {
8980 /**
8981 * The token representing the identifier.
8982 */
8983 Token _token;
8984 /**
8985 * The element associated with this identifier, or {@code null} if the AST str ucture has not been
8986 * resolved or if this identifier could not be resolved.
8987 */
8988 Element _element;
8989 /**
8990 * Initialize a newly created identifier.
8991 * @param token the token representing the identifier
8992 */
8993 SimpleIdentifier.full(Token token) {
8994 this._token = token;
8995 }
8996 /**
8997 * Initialize a newly created identifier.
8998 * @param token the token representing the identifier
8999 */
9000 SimpleIdentifier({Token token}) : this.full(token);
9001 accept(ASTVisitor visitor) => visitor.visitSimpleIdentifier(this);
9002 Token get beginToken => _token;
9003 Element get element => _element;
9004 Token get endToken => _token;
9005 String get name => _token.lexeme;
9006 /**
9007 * Return the token representing the identifier.
9008 * @return the token representing the identifier
9009 */
9010 Token get token => _token;
9011 /**
9012 * Return {@code true} if this identifier is the name being declared in a decl aration.
9013 * @return {@code true} if this identifier is the name being declared in a dec laration
9014 */
9015 bool inDeclarationContext() {
9016 ASTNode parent7 = parent;
9017 if (parent7 is CatchClause) {
9018 CatchClause clause = parent7 as CatchClause;
9019 return identical(this, clause.exceptionParameter) || identical(this, claus e.stackTraceParameter);
9020 } else if (parent7 is ClassDeclaration) {
9021 return identical(this, ((parent7 as ClassDeclaration)).name);
9022 } else if (parent7 is ClassTypeAlias) {
9023 return identical(this, ((parent7 as ClassTypeAlias)).name);
9024 } else if (parent7 is ConstructorDeclaration) {
9025 return identical(this, ((parent7 as ConstructorDeclaration)).name);
9026 } else if (parent7 is FunctionDeclaration) {
9027 return identical(this, ((parent7 as FunctionDeclaration)).name);
9028 } else if (parent7 is FunctionTypeAlias) {
9029 return identical(this, ((parent7 as FunctionTypeAlias)).name);
9030 } else if (parent7 is Label) {
9031 return identical(this, ((parent7 as Label)).label) && (parent7.parent is L abeledStatement);
9032 } else if (parent7 is MethodDeclaration) {
9033 return identical(this, ((parent7 as MethodDeclaration)).name);
9034 } else if (parent7 is NormalFormalParameter) {
9035 return identical(this, ((parent7 as NormalFormalParameter)).identifier);
9036 } else if (parent7 is TypeParameter) {
9037 return identical(this, ((parent7 as TypeParameter)).name);
9038 } else if (parent7 is VariableDeclaration) {
9039 return identical(this, ((parent7 as VariableDeclaration)).name);
9040 }
9041 return false;
9042 }
9043 /**
9044 * Return {@code true} if this expression is computing a right-hand value.
9045 * <p>
9046 * Note that {@link #inGetterContext()} and {@link #inSetterContext()} are not opposites, nor are
9047 * they mutually exclusive. In other words, it is possible for both methods to return {@code true}when invoked on the same node.
9048 * @return {@code true} if this expression is in a context where a getter will be invoked
9049 */
9050 bool inGetterContext() {
9051 ASTNode parent8 = parent;
9052 ASTNode target = this;
9053 if (parent8 is PrefixedIdentifier) {
9054 PrefixedIdentifier prefixed = parent8 as PrefixedIdentifier;
9055 if (identical(prefixed.prefix, this)) {
9056 return true;
9057 }
9058 parent8 = prefixed.parent;
9059 target = prefixed;
9060 } else if (parent8 is PropertyAccess) {
9061 PropertyAccess access = parent8 as PropertyAccess;
9062 if (identical(access.target, this)) {
9063 return true;
9064 }
9065 parent8 = access.parent;
9066 target = access;
9067 }
9068 if (parent8 is AssignmentExpression) {
9069 AssignmentExpression expr = parent8 as AssignmentExpression;
9070 if (identical(expr.leftHandSide, target) && identical(expr.operator.type, TokenType.EQ)) {
9071 return false;
9072 }
9073 }
9074 return true;
9075 }
9076 /**
9077 * Return {@code true} if this expression is computing a left-hand value.
9078 * <p>
9079 * Note that {@link #inGetterContext()} and {@link #inSetterContext()} are not opposites, nor are
9080 * they mutually exclusive. In other words, it is possible for both methods to return {@code true}when invoked on the same node.
9081 * @return {@code true} if this expression is in a context where a setter will be invoked
9082 */
9083 bool inSetterContext() {
9084 ASTNode parent9 = parent;
9085 ASTNode target = this;
9086 if (parent9 is PrefixedIdentifier) {
9087 PrefixedIdentifier prefixed = parent9 as PrefixedIdentifier;
9088 if (identical(prefixed.prefix, this)) {
9089 return false;
9090 }
9091 parent9 = prefixed.parent;
9092 target = prefixed;
9093 } else if (parent9 is PropertyAccess) {
9094 PropertyAccess access = parent9 as PropertyAccess;
9095 if (identical(access.target, this)) {
9096 return false;
9097 }
9098 parent9 = access.parent;
9099 target = access;
9100 }
9101 if (parent9 is PrefixExpression) {
9102 return ((parent9 as PrefixExpression)).operator.type.isIncrementOperator() ;
9103 } else if (parent9 is PostfixExpression) {
9104 return true;
9105 } else if (parent9 is AssignmentExpression) {
9106 return identical(((parent9 as AssignmentExpression)).leftHandSide, target) ;
9107 }
9108 return false;
9109 }
9110 bool isSynthetic() => _token.isSynthetic();
9111 /**
9112 * Set the element associated with this identifier to the given element.
9113 * @param element the element associated with this identifier
9114 */
9115 void set element(Element element16) {
9116 this._element = element16;
9117 }
9118 /**
9119 * Set the token representing the identifier to the given token.
9120 * @param token the token representing the literal
9121 */
9122 void set token(Token token12) {
9123 this._token = token12;
9124 }
9125 void visitChildren(ASTVisitor<Object> visitor) {
9126 }
9127 }
9128 /**
9129 * Instances of the class {@code SimpleStringLiteral} represent a string literal expression that
9130 * does not contain any interpolations.
9131 * <pre>
9132 * simpleStringLiteral ::=
9133 * rawStringLiteral
9134 * | basicStringLiteral
9135 * rawStringLiteral ::=
9136 * '@' basicStringLiteral
9137 * simpleStringLiteral ::=
9138 * multiLineStringLiteral
9139 * | singleLineStringLiteral
9140 * multiLineStringLiteral ::=
9141 * "'''" characters "'''"
9142 * | '"""' characters '"""'
9143 * singleLineStringLiteral ::=
9144 * "'" characters "'"
9145 * '"' characters '"'
9146 * </pre>
9147 * @coverage dart.engine.ast
9148 */
9149 class SimpleStringLiteral extends StringLiteral {
9150 /**
9151 * The token representing the literal.
9152 */
9153 Token _literal;
9154 /**
9155 * The value of the literal.
9156 */
9157 String _value;
9158 /**
9159 * Initialize a newly created simple string literal.
9160 * @param literal the token representing the literal
9161 * @param value the value of the literal
9162 */
9163 SimpleStringLiteral.full(Token literal, String value) {
9164 this._literal = literal;
9165 this._value = value;
9166 }
9167 /**
9168 * Initialize a newly created simple string literal.
9169 * @param literal the token representing the literal
9170 * @param value the value of the literal
9171 */
9172 SimpleStringLiteral({Token literal, String value}) : this.full(literal, value) ;
9173 accept(ASTVisitor visitor) => visitor.visitSimpleStringLiteral(this);
9174 Token get beginToken => _literal;
9175 Token get endToken => _literal;
9176 /**
9177 * Return the token representing the literal.
9178 * @return the token representing the literal
9179 */
9180 Token get literal => _literal;
9181 /**
9182 * Return the value of the literal.
9183 * @return the value of the literal
9184 */
9185 String get value => _value;
9186 /**
9187 * Return {@code true} if this string literal is a multi-line string.
9188 * @return {@code true} if this string literal is a multi-line string
9189 */
9190 bool isMultiline() {
9191 if (_value.length < 6) {
9192 return false;
9193 }
9194 return _value.endsWith("\"\"\"") || _value.endsWith("'''");
9195 }
9196 /**
9197 * Return {@code true} if this string literal is a raw string.
9198 * @return {@code true} if this string literal is a raw string
9199 */
9200 bool isRaw() => _value.codeUnitAt(0) == 0x40;
9201 bool isSynthetic() => _literal.isSynthetic();
9202 /**
9203 * Set the token representing the literal to the given token.
9204 * @param literal the token representing the literal
9205 */
9206 void set literal(Token literal6) {
9207 this._literal = literal6;
9208 }
9209 /**
9210 * Set the value of the literal to the given string.
9211 * @param string the value of the literal
9212 */
9213 void set value(String string) {
9214 _value = string;
9215 }
9216 void visitChildren(ASTVisitor<Object> visitor) {
9217 }
9218 }
9219 /**
9220 * Instances of the class {@code Statement} defines the behavior common to nodes that represent a
9221 * statement.
9222 * <pre>
9223 * statement ::={@link Block block}| {@link VariableDeclarationStatement initial izedVariableDeclaration ';'}| {@link ForStatement forStatement}| {@link ForEachS tatement forEachStatement}| {@link WhileStatement whileStatement}| {@link DoStat ement doStatement}| {@link SwitchStatement switchStatement}| {@link IfStatement ifStatement}| {@link TryStatement tryStatement}| {@link BreakStatement breakStat ement}| {@link ContinueStatement continueStatement}| {@link ReturnStatement retu rnStatement}| {@link ExpressionStatement expressionStatement}| {@link FunctionDe clarationStatement functionSignature functionBody}</pre>
9224 * @coverage dart.engine.ast
9225 */
9226 abstract class Statement extends ASTNode {
9227 }
9228 /**
9229 * Instances of the class {@code StringInterpolation} represent a string interpo lation literal.
9230 * <pre>
9231 * stringInterpolation ::=
9232 * ''' {@link InterpolationElement interpolationElement}* '''
9233 * | '"' {@link InterpolationElement interpolationElement}* '"'
9234 * </pre>
9235 * @coverage dart.engine.ast
9236 */
9237 class StringInterpolation extends StringLiteral {
9238 /**
9239 * The elements that will be composed to produce the resulting string.
9240 */
9241 NodeList<InterpolationElement> _elements;
9242 /**
9243 * Initialize a newly created string interpolation expression.
9244 * @param elements the elements that will be composed to produce the resulting string
9245 */
9246 StringInterpolation.full(List<InterpolationElement> elements) {
9247 this._elements = new NodeList<InterpolationElement>(this);
9248 this._elements.addAll(elements);
9249 }
9250 /**
9251 * Initialize a newly created string interpolation expression.
9252 * @param elements the elements that will be composed to produce the resulting string
9253 */
9254 StringInterpolation({List<InterpolationElement> elements}) : this.full(element s);
9255 accept(ASTVisitor visitor) => visitor.visitStringInterpolation(this);
9256 Token get beginToken => _elements.beginToken;
9257 /**
9258 * Return the elements that will be composed to produce the resulting string.
9259 * @return the elements that will be composed to produce the resulting string
9260 */
9261 NodeList<InterpolationElement> get elements => _elements;
9262 Token get endToken => _elements.endToken;
9263 void visitChildren(ASTVisitor<Object> visitor) {
9264 _elements.accept(visitor);
9265 }
9266 }
9267 /**
9268 * Instances of the class {@code StringLiteral} represent a string literal expre ssion.
9269 * <pre>
9270 * stringLiteral ::={@link SimpleStringLiteral simpleStringLiteral}| {@link Adja centStrings adjacentStrings}| {@link StringInterpolation stringInterpolation}</p re>
9271 * @coverage dart.engine.ast
9272 */
9273 abstract class StringLiteral extends Literal {
9274 }
9275 /**
9276 * Instances of the class {@code SuperConstructorInvocation} represent the invoc ation of a
9277 * superclass' constructor from within a constructor's initialization list.
9278 * <pre>
9279 * superInvocation ::=
9280 * 'super' ('.' {@link SimpleIdentifier name})? {@link ArgumentList argumentList }</pre>
9281 * @coverage dart.engine.ast
9282 */
9283 class SuperConstructorInvocation extends ConstructorInitializer {
9284 /**
9285 * The token for the 'super' keyword.
9286 */
9287 Token _keyword;
9288 /**
9289 * The token for the period before the name of the constructor that is being i nvoked, or{@code null} if the unnamed constructor is being invoked.
9290 */
9291 Token _period;
9292 /**
9293 * The name of the constructor that is being invoked, or {@code null} if the u nnamed constructor
9294 * is being invoked.
9295 */
9296 SimpleIdentifier _constructorName;
9297 /**
9298 * The list of arguments to the constructor.
9299 */
9300 ArgumentList _argumentList;
9301 /**
9302 * The element associated with the constructor, or {@code null} if the AST str ucture has not been
9303 * resolved or if the constructor could not be resolved.
9304 */
9305 ConstructorElement _element;
9306 /**
9307 * Initialize a newly created super invocation to invoke the inherited constru ctor with the given
9308 * name with the given arguments.
9309 * @param keyword the token for the 'super' keyword
9310 * @param period the token for the period before the name of the constructor t hat is being invoked
9311 * @param constructorName the name of the constructor that is being invoked
9312 * @param argumentList the list of arguments to the constructor
9313 */
9314 SuperConstructorInvocation.full(Token keyword, Token period, SimpleIdentifier constructorName, ArgumentList argumentList) {
9315 this._keyword = keyword;
9316 this._period = period;
9317 this._constructorName = becomeParentOf(constructorName);
9318 this._argumentList = becomeParentOf(argumentList);
9319 }
9320 /**
9321 * Initialize a newly created super invocation to invoke the inherited constru ctor with the given
9322 * name with the given arguments.
9323 * @param keyword the token for the 'super' keyword
9324 * @param period the token for the period before the name of the constructor t hat is being invoked
9325 * @param constructorName the name of the constructor that is being invoked
9326 * @param argumentList the list of arguments to the constructor
9327 */
9328 SuperConstructorInvocation({Token keyword, Token period, SimpleIdentifier cons tructorName, ArgumentList argumentList}) : this.full(keyword, period, constructo rName, argumentList);
9329 accept(ASTVisitor visitor) => visitor.visitSuperConstructorInvocation(this);
9330 /**
9331 * Return the list of arguments to the constructor.
9332 * @return the list of arguments to the constructor
9333 */
9334 ArgumentList get argumentList => _argumentList;
9335 Token get beginToken => _keyword;
9336 /**
9337 * Return the name of the constructor that is being invoked, or {@code null} i f the unnamed
9338 * constructor is being invoked.
9339 * @return the name of the constructor that is being invoked
9340 */
9341 SimpleIdentifier get constructorName => _constructorName;
9342 /**
9343 * Return the element associated with the constructor, or {@code null} if the AST structure has
9344 * not been resolved or if the constructor could not be resolved.
9345 * @return the element associated with the super constructor
9346 */
9347 ConstructorElement get element => _element;
9348 Token get endToken => _argumentList.endToken;
9349 /**
9350 * Return the token for the 'super' keyword.
9351 * @return the token for the 'super' keyword
9352 */
9353 Token get keyword => _keyword;
9354 /**
9355 * Return the token for the period before the name of the constructor that is being invoked, or{@code null} if the unnamed constructor is being invoked.
9356 * @return the token for the period before the name of the constructor that is being invoked
9357 */
9358 Token get period => _period;
9359 /**
9360 * Set the list of arguments to the constructor to the given list.
9361 * @param argumentList the list of arguments to the constructor
9362 */
9363 void set argumentList(ArgumentList argumentList9) {
9364 this._argumentList = becomeParentOf(argumentList9);
9365 }
9366 /**
9367 * Set the name of the constructor that is being invoked to the given identifi er.
9368 * @param identifier the name of the constructor that is being invoked
9369 */
9370 void set constructorName(SimpleIdentifier identifier) {
9371 _constructorName = becomeParentOf(identifier);
9372 }
9373 /**
9374 * Set the element associated with the constructor to the given element.
9375 * @param element the element associated with the constructor
9376 */
9377 void set element(ConstructorElement element17) {
9378 this._element = element17;
9379 }
9380 /**
9381 * Set the token for the 'super' keyword to the given token.
9382 * @param keyword the token for the 'super' keyword
9383 */
9384 void set keyword(Token keyword17) {
9385 this._keyword = keyword17;
9386 }
9387 /**
9388 * Set the token for the period before the name of the constructor that is bei ng invoked to the
9389 * given token.
9390 * @param period the token for the period before the name of the constructor t hat is being invoked
9391 */
9392 void set period(Token period12) {
9393 this._period = period12;
9394 }
9395 void visitChildren(ASTVisitor<Object> visitor) {
9396 safelyVisitChild(_constructorName, visitor);
9397 safelyVisitChild(_argumentList, visitor);
9398 }
9399 }
9400 /**
9401 * Instances of the class {@code SuperExpression} represent a super expression.
9402 * <pre>
9403 * superExpression ::=
9404 * 'super'
9405 * </pre>
9406 * @coverage dart.engine.ast
9407 */
9408 class SuperExpression extends Expression {
9409 /**
9410 * The token representing the keyword.
9411 */
9412 Token _keyword;
9413 /**
9414 * Initialize a newly created super expression.
9415 * @param keyword the token representing the keyword
9416 */
9417 SuperExpression.full(Token keyword) {
9418 this._keyword = keyword;
9419 }
9420 /**
9421 * Initialize a newly created super expression.
9422 * @param keyword the token representing the keyword
9423 */
9424 SuperExpression({Token keyword}) : this.full(keyword);
9425 accept(ASTVisitor visitor) => visitor.visitSuperExpression(this);
9426 Token get beginToken => _keyword;
9427 Token get endToken => _keyword;
9428 /**
9429 * Return the token representing the keyword.
9430 * @return the token representing the keyword
9431 */
9432 Token get keyword => _keyword;
9433 /**
9434 * Set the token representing the keyword to the given token.
9435 * @param keyword the token representing the keyword
9436 */
9437 void set keyword(Token keyword18) {
9438 this._keyword = keyword18;
9439 }
9440 void visitChildren(ASTVisitor<Object> visitor) {
9441 }
9442 }
9443 /**
9444 * Instances of the class {@code SwitchCase} represent the case in a switch stat ement.
9445 * <pre>
9446 * switchCase ::={@link SimpleIdentifier label}* 'case' {@link Expression expres sion} ':' {@link Statement statement}</pre>
9447 * @coverage dart.engine.ast
9448 */
9449 class SwitchCase extends SwitchMember {
9450 /**
9451 * The expression controlling whether the statements will be executed.
9452 */
9453 Expression _expression;
9454 /**
9455 * Initialize a newly created switch case.
9456 * @param labels the labels associated with the switch member
9457 * @param keyword the token representing the 'case' or 'default' keyword
9458 * @param expression the expression controlling whether the statements will be executed
9459 * @param colon the colon separating the keyword or the expression from the st atements
9460 * @param statements the statements that will be executed if this switch membe r is selected
9461 */
9462 SwitchCase.full(List<Label> labels, Token keyword, Expression expression, Toke n colon, List<Statement> statements) : super.full(labels, keyword, colon, statem ents) {
9463 this._expression = becomeParentOf(expression);
9464 }
9465 /**
9466 * Initialize a newly created switch case.
9467 * @param labels the labels associated with the switch member
9468 * @param keyword the token representing the 'case' or 'default' keyword
9469 * @param expression the expression controlling whether the statements will be executed
9470 * @param colon the colon separating the keyword or the expression from the st atements
9471 * @param statements the statements that will be executed if this switch membe r is selected
9472 */
9473 SwitchCase({List<Label> labels, Token keyword, Expression expression, Token co lon, List<Statement> statements}) : this.full(labels, keyword, expression, colon , statements);
9474 accept(ASTVisitor visitor) => visitor.visitSwitchCase(this);
9475 /**
9476 * Return the expression controlling whether the statements will be executed.
9477 * @return the expression controlling whether the statements will be executed
9478 */
9479 Expression get expression => _expression;
9480 /**
9481 * Set the expression controlling whether the statements will be executed to t he given expression.
9482 * @param expression the expression controlling whether the statements will be executed
9483 */
9484 void set expression(Expression expression11) {
9485 this._expression = becomeParentOf(expression11);
9486 }
9487 void visitChildren(ASTVisitor<Object> visitor) {
9488 labels.accept(visitor);
9489 safelyVisitChild(_expression, visitor);
9490 statements.accept(visitor);
9491 }
9492 }
9493 /**
9494 * Instances of the class {@code SwitchDefault} represent the default case in a switch statement.
9495 * <pre>
9496 * switchDefault ::={@link SimpleIdentifier label}* 'default' ':' {@link Stateme nt statement}</pre>
9497 * @coverage dart.engine.ast
9498 */
9499 class SwitchDefault extends SwitchMember {
9500 /**
9501 * Initialize a newly created switch default.
9502 * @param labels the labels associated with the switch member
9503 * @param keyword the token representing the 'case' or 'default' keyword
9504 * @param colon the colon separating the keyword or the expression from the st atements
9505 * @param statements the statements that will be executed if this switch membe r is selected
9506 */
9507 SwitchDefault.full(List<Label> labels, Token keyword, Token colon, List<Statem ent> statements) : super.full(labels, keyword, colon, statements) {
9508 }
9509 /**
9510 * Initialize a newly created switch default.
9511 * @param labels the labels associated with the switch member
9512 * @param keyword the token representing the 'case' or 'default' keyword
9513 * @param colon the colon separating the keyword or the expression from the st atements
9514 * @param statements the statements that will be executed if this switch membe r is selected
9515 */
9516 SwitchDefault({List<Label> labels, Token keyword, Token colon, List<Statement> statements}) : this.full(labels, keyword, colon, statements);
9517 accept(ASTVisitor visitor) => visitor.visitSwitchDefault(this);
9518 void visitChildren(ASTVisitor<Object> visitor) {
9519 labels.accept(visitor);
9520 statements.accept(visitor);
9521 }
9522 }
9523 /**
9524 * The abstract class {@code SwitchMember} defines the behavior common to object s representing
9525 * elements within a switch statement.
9526 * <pre>
9527 * switchMember ::=
9528 * switchCase
9529 * | switchDefault
9530 * </pre>
9531 * @coverage dart.engine.ast
9532 */
9533 abstract class SwitchMember extends ASTNode {
9534 /**
9535 * The labels associated with the switch member.
9536 */
9537 NodeList<Label> _labels;
9538 /**
9539 * The token representing the 'case' or 'default' keyword.
9540 */
9541 Token _keyword;
9542 /**
9543 * The colon separating the keyword or the expression from the statements.
9544 */
9545 Token _colon;
9546 /**
9547 * The statements that will be executed if this switch member is selected.
9548 */
9549 NodeList<Statement> _statements;
9550 /**
9551 * Initialize a newly created switch member.
9552 * @param labels the labels associated with the switch member
9553 * @param keyword the token representing the 'case' or 'default' keyword
9554 * @param colon the colon separating the keyword or the expression from the st atements
9555 * @param statements the statements that will be executed if this switch membe r is selected
9556 */
9557 SwitchMember.full(List<Label> labels, Token keyword, Token colon, List<Stateme nt> statements) {
9558 this._labels = new NodeList<Label>(this);
9559 this._statements = new NodeList<Statement>(this);
9560 this._labels.addAll(labels);
9561 this._keyword = keyword;
9562 this._colon = colon;
9563 this._statements.addAll(statements);
9564 }
9565 /**
9566 * Initialize a newly created switch member.
9567 * @param labels the labels associated with the switch member
9568 * @param keyword the token representing the 'case' or 'default' keyword
9569 * @param colon the colon separating the keyword or the expression from the st atements
9570 * @param statements the statements that will be executed if this switch membe r is selected
9571 */
9572 SwitchMember({List<Label> labels, Token keyword, Token colon, List<Statement> statements}) : this.full(labels, keyword, colon, statements);
9573 Token get beginToken {
9574 if (!_labels.isEmpty) {
9575 return _labels.beginToken;
9576 }
9577 return _keyword;
9578 }
9579 /**
9580 * Return the colon separating the keyword or the expression from the statemen ts.
9581 * @return the colon separating the keyword or the expression from the stateme nts
9582 */
9583 Token get colon => _colon;
9584 Token get endToken {
9585 if (!_statements.isEmpty) {
9586 return _statements.endToken;
9587 }
9588 return _colon;
9589 }
9590 /**
9591 * Return the token representing the 'case' or 'default' keyword.
9592 * @return the token representing the 'case' or 'default' keyword
9593 */
9594 Token get keyword => _keyword;
9595 /**
9596 * Return the labels associated with the switch member.
9597 * @return the labels associated with the switch member
9598 */
9599 NodeList<Label> get labels => _labels;
9600 /**
9601 * Return the statements that will be executed if this switch member is select ed.
9602 * @return the statements that will be executed if this switch member is selec ted
9603 */
9604 NodeList<Statement> get statements => _statements;
9605 /**
9606 * Set the colon separating the keyword or the expression from the statements to the given token.
9607 * @param colon the colon separating the keyword or the expression from the st atements
9608 */
9609 void set colon(Token colon4) {
9610 this._colon = colon4;
9611 }
9612 /**
9613 * Set the token representing the 'case' or 'default' keyword to the given tok en.
9614 * @param keyword the token representing the 'case' or 'default' keyword
9615 */
9616 void set keyword(Token keyword19) {
9617 this._keyword = keyword19;
9618 }
9619 }
9620 /**
9621 * Instances of the class {@code SwitchStatement} represent a switch statement.
9622 * <pre>
9623 * switchStatement ::=
9624 * 'switch' '(' {@link Expression expression} ')' '{' {@link SwitchCase switchCa se}* {@link SwitchDefault defaultCase}? '}'
9625 * </pre>
9626 * @coverage dart.engine.ast
9627 */
9628 class SwitchStatement extends Statement {
9629 /**
9630 * The token representing the 'switch' keyword.
9631 */
9632 Token _keyword;
9633 /**
9634 * The left parenthesis.
9635 */
9636 Token _leftParenthesis;
9637 /**
9638 * The expression used to determine which of the switch members will be select ed.
9639 */
9640 Expression _expression;
9641 /**
9642 * The right parenthesis.
9643 */
9644 Token _rightParenthesis;
9645 /**
9646 * The left curly bracket.
9647 */
9648 Token _leftBracket;
9649 /**
9650 * The switch members that can be selected by the expression.
9651 */
9652 NodeList<SwitchMember> _members;
9653 /**
9654 * The right curly bracket.
9655 */
9656 Token _rightBracket;
9657 /**
9658 * Initialize a newly created switch statement.
9659 * @param keyword the token representing the 'switch' keyword
9660 * @param leftParenthesis the left parenthesis
9661 * @param expression the expression used to determine which of the switch memb ers will be selected
9662 * @param rightParenthesis the right parenthesis
9663 * @param leftBracket the left curly bracket
9664 * @param members the switch members that can be selected by the expression
9665 * @param rightBracket the right curly bracket
9666 */
9667 SwitchStatement.full(Token keyword, Token leftParenthesis, Expression expressi on, Token rightParenthesis, Token leftBracket, List<SwitchMember> members, Token rightBracket) {
9668 this._members = new NodeList<SwitchMember>(this);
9669 this._keyword = keyword;
9670 this._leftParenthesis = leftParenthesis;
9671 this._expression = becomeParentOf(expression);
9672 this._rightParenthesis = rightParenthesis;
9673 this._leftBracket = leftBracket;
9674 this._members.addAll(members);
9675 this._rightBracket = rightBracket;
9676 }
9677 /**
9678 * Initialize a newly created switch statement.
9679 * @param keyword the token representing the 'switch' keyword
9680 * @param leftParenthesis the left parenthesis
9681 * @param expression the expression used to determine which of the switch memb ers will be selected
9682 * @param rightParenthesis the right parenthesis
9683 * @param leftBracket the left curly bracket
9684 * @param members the switch members that can be selected by the expression
9685 * @param rightBracket the right curly bracket
9686 */
9687 SwitchStatement({Token keyword, Token leftParenthesis, Expression expression, Token rightParenthesis, Token leftBracket, List<SwitchMember> members, Token rig htBracket}) : this.full(keyword, leftParenthesis, expression, rightParenthesis, leftBracket, members, rightBracket);
9688 accept(ASTVisitor visitor) => visitor.visitSwitchStatement(this);
9689 Token get beginToken => _keyword;
9690 Token get endToken => _rightBracket;
9691 /**
9692 * Return the expression used to determine which of the switch members will be selected.
9693 * @return the expression used to determine which of the switch members will b e selected
9694 */
9695 Expression get expression => _expression;
9696 /**
9697 * Return the token representing the 'switch' keyword.
9698 * @return the token representing the 'switch' keyword
9699 */
9700 Token get keyword => _keyword;
9701 /**
9702 * Return the left curly bracket.
9703 * @return the left curly bracket
9704 */
9705 Token get leftBracket => _leftBracket;
9706 /**
9707 * Return the left parenthesis.
9708 * @return the left parenthesis
9709 */
9710 Token get leftParenthesis => _leftParenthesis;
9711 /**
9712 * Return the switch members that can be selected by the expression.
9713 * @return the switch members that can be selected by the expression
9714 */
9715 NodeList<SwitchMember> get members => _members;
9716 /**
9717 * Return the right curly bracket.
9718 * @return the right curly bracket
9719 */
9720 Token get rightBracket => _rightBracket;
9721 /**
9722 * Return the right parenthesis.
9723 * @return the right parenthesis
9724 */
9725 Token get rightParenthesis => _rightParenthesis;
9726 /**
9727 * Set the expression used to determine which of the switch members will be se lected to the given
9728 * expression.
9729 * @param expression the expression used to determine which of the switch memb ers will be selected
9730 */
9731 void set expression(Expression expression12) {
9732 this._expression = becomeParentOf(expression12);
9733 }
9734 /**
9735 * Set the token representing the 'switch' keyword to the given token.
9736 * @param keyword the token representing the 'switch' keyword
9737 */
9738 void set keyword(Token keyword20) {
9739 this._keyword = keyword20;
9740 }
9741 /**
9742 * Set the left curly bracket to the given token.
9743 * @param leftBracket the left curly bracket
9744 */
9745 void set leftBracket(Token leftBracket7) {
9746 this._leftBracket = leftBracket7;
9747 }
9748 /**
9749 * Set the left parenthesis to the given token.
9750 * @param leftParenthesis the left parenthesis
9751 */
9752 void set leftParenthesis(Token leftParenthesis6) {
9753 this._leftParenthesis = leftParenthesis6;
9754 }
9755 /**
9756 * Set the right curly bracket to the given token.
9757 * @param rightBracket the right curly bracket
9758 */
9759 void set rightBracket(Token rightBracket7) {
9760 this._rightBracket = rightBracket7;
9761 }
9762 /**
9763 * Set the right parenthesis to the given token.
9764 * @param rightParenthesis the right parenthesis
9765 */
9766 void set rightParenthesis(Token rightParenthesis6) {
9767 this._rightParenthesis = rightParenthesis6;
9768 }
9769 void visitChildren(ASTVisitor<Object> visitor) {
9770 safelyVisitChild(_expression, visitor);
9771 _members.accept(visitor);
9772 }
9773 }
9774 /**
9775 * Instances of the class {@code ThisExpression} represent a this expression.
9776 * <pre>
9777 * thisExpression ::=
9778 * 'this'
9779 * </pre>
9780 * @coverage dart.engine.ast
9781 */
9782 class ThisExpression extends Expression {
9783 /**
9784 * The token representing the keyword.
9785 */
9786 Token _keyword;
9787 /**
9788 * Initialize a newly created this expression.
9789 * @param keyword the token representing the keyword
9790 */
9791 ThisExpression.full(Token keyword) {
9792 this._keyword = keyword;
9793 }
9794 /**
9795 * Initialize a newly created this expression.
9796 * @param keyword the token representing the keyword
9797 */
9798 ThisExpression({Token keyword}) : this.full(keyword);
9799 accept(ASTVisitor visitor) => visitor.visitThisExpression(this);
9800 Token get beginToken => _keyword;
9801 Token get endToken => _keyword;
9802 /**
9803 * Return the token representing the keyword.
9804 * @return the token representing the keyword
9805 */
9806 Token get keyword => _keyword;
9807 /**
9808 * Set the token representing the keyword to the given token.
9809 * @param keyword the token representing the keyword
9810 */
9811 void set keyword(Token keyword21) {
9812 this._keyword = keyword21;
9813 }
9814 void visitChildren(ASTVisitor<Object> visitor) {
9815 }
9816 }
9817 /**
9818 * Instances of the class {@code ThrowExpression} represent a throw expression.
9819 * <pre>
9820 * throwExpression ::=
9821 * 'throw' {@link Expression expression}? ';'
9822 * </pre>
9823 * @coverage dart.engine.ast
9824 */
9825 class ThrowExpression extends Expression {
9826 /**
9827 * The token representing the 'throw' keyword.
9828 */
9829 Token _keyword;
9830 /**
9831 * The expression computing the exception to be thrown, or {@code null} if the current exception
9832 * is to be re-thrown. (The latter case can only occur if the throw statement is inside a catch
9833 * clause.)
9834 */
9835 Expression _expression;
9836 /**
9837 * Initialize a newly created throw expression.
9838 * @param keyword the token representing the 'throw' keyword
9839 * @param expression the expression computing the exception to be thrown
9840 */
9841 ThrowExpression.full(Token keyword, Expression expression) {
9842 this._keyword = keyword;
9843 this._expression = becomeParentOf(expression);
9844 }
9845 /**
9846 * Initialize a newly created throw expression.
9847 * @param keyword the token representing the 'throw' keyword
9848 * @param expression the expression computing the exception to be thrown
9849 */
9850 ThrowExpression({Token keyword, Expression expression}) : this.full(keyword, e xpression);
9851 accept(ASTVisitor visitor) => visitor.visitThrowExpression(this);
9852 Token get beginToken => _keyword;
9853 Token get endToken {
9854 if (_expression != null) {
9855 return _expression.endToken;
9856 }
9857 return _keyword;
9858 }
9859 /**
9860 * Return the expression computing the exception to be thrown, or {@code null} if the current
9861 * exception is to be re-thrown. (The latter case can only occur if the throw statement is inside
9862 * a catch clause.)
9863 * @return the expression computing the exception to be thrown
9864 */
9865 Expression get expression => _expression;
9866 /**
9867 * Return the token representing the 'throw' keyword.
9868 * @return the token representing the 'throw' keyword
9869 */
9870 Token get keyword => _keyword;
9871 /**
9872 * Set the expression computing the exception to be thrown to the given expres sion.
9873 * @param expression the expression computing the exception to be thrown
9874 */
9875 void set expression(Expression expression13) {
9876 this._expression = becomeParentOf(expression13);
9877 }
9878 /**
9879 * Set the token representing the 'throw' keyword to the given token.
9880 * @param keyword the token representing the 'throw' keyword
9881 */
9882 void set keyword(Token keyword22) {
9883 this._keyword = keyword22;
9884 }
9885 void visitChildren(ASTVisitor<Object> visitor) {
9886 safelyVisitChild(_expression, visitor);
9887 }
9888 }
9889 /**
9890 * Instances of the class {@code TopLevelVariableDeclaration} represent the decl aration of one or
9891 * more top-level variables of the same type.
9892 * <pre>
9893 * topLevelVariableDeclaration ::=
9894 * ('final' | 'const') type? staticFinalDeclarationList ';'
9895 * | variableDeclaration ';'
9896 * </pre>
9897 * @coverage dart.engine.ast
9898 */
9899 class TopLevelVariableDeclaration extends CompilationUnitMember {
9900 /**
9901 * The top-level variables being declared.
9902 */
9903 VariableDeclarationList _variableList;
9904 /**
9905 * The semicolon terminating the declaration.
9906 */
9907 Token _semicolon;
9908 /**
9909 * Initialize a newly created top-level variable declaration.
9910 * @param comment the documentation comment associated with this variable
9911 * @param metadata the annotations associated with this variable
9912 * @param variableList the top-level variables being declared
9913 * @param semicolon the semicolon terminating the declaration
9914 */
9915 TopLevelVariableDeclaration.full(Comment comment, List<Annotation> metadata, V ariableDeclarationList variableList, Token semicolon) : super.full(comment, meta data) {
9916 this._variableList = becomeParentOf(variableList);
9917 this._semicolon = semicolon;
9918 }
9919 /**
9920 * Initialize a newly created top-level variable declaration.
9921 * @param comment the documentation comment associated with this variable
9922 * @param metadata the annotations associated with this variable
9923 * @param variableList the top-level variables being declared
9924 * @param semicolon the semicolon terminating the declaration
9925 */
9926 TopLevelVariableDeclaration({Comment comment, List<Annotation> metadata, Varia bleDeclarationList variableList, Token semicolon}) : this.full(comment, metadata , variableList, semicolon);
9927 accept(ASTVisitor visitor) => visitor.visitTopLevelVariableDeclaration(this);
9928 Element get element => null;
9929 Token get endToken => _semicolon;
9930 /**
9931 * Return the semicolon terminating the declaration.
9932 * @return the semicolon terminating the declaration
9933 */
9934 Token get semicolon => _semicolon;
9935 /**
9936 * Return the top-level variables being declared.
9937 * @return the top-level variables being declared
9938 */
9939 VariableDeclarationList get variables => _variableList;
9940 /**
9941 * Set the semicolon terminating the declaration to the given token.
9942 * @param semicolon the semicolon terminating the declaration
9943 */
9944 void set semicolon(Token semicolon16) {
9945 this._semicolon = semicolon16;
9946 }
9947 /**
9948 * Set the top-level variables being declared to the given list of variables.
9949 * @param variableList the top-level variables being declared
9950 */
9951 void set variables(VariableDeclarationList variableList) {
9952 variableList = becomeParentOf(variableList);
9953 }
9954 void visitChildren(ASTVisitor<Object> visitor) {
9955 super.visitChildren(visitor);
9956 safelyVisitChild(_variableList, visitor);
9957 }
9958 Token get firstTokenAfterCommentAndMetadata => _variableList.beginToken;
9959 }
9960 /**
9961 * Instances of the class {@code TryStatement} represent a try statement.
9962 * <pre>
9963 * tryStatement ::=
9964 * 'try' {@link Block block} ({@link CatchClause catchClause}+ finallyClause? | finallyClause)
9965 * finallyClause ::=
9966 * 'finally' {@link Block block}</pre>
9967 * @coverage dart.engine.ast
9968 */
9969 class TryStatement extends Statement {
9970 /**
9971 * The token representing the 'try' keyword.
9972 */
9973 Token _tryKeyword;
9974 /**
9975 * The body of the statement.
9976 */
9977 Block _body;
9978 /**
9979 * The catch clauses contained in the try statement.
9980 */
9981 NodeList<CatchClause> _catchClauses;
9982 /**
9983 * The token representing the 'finally' keyword, or {@code null} if the statem ent does not contain
9984 * a finally clause.
9985 */
9986 Token _finallyKeyword;
9987 /**
9988 * The finally clause contained in the try statement, or {@code null} if the s tatement does not
9989 * contain a finally clause.
9990 */
9991 Block _finallyClause;
9992 /**
9993 * Initialize a newly created try statement.
9994 * @param tryKeyword the token representing the 'try' keyword
9995 * @param body the body of the statement
9996 * @param catchClauses the catch clauses contained in the try statement
9997 * @param finallyKeyword the token representing the 'finally' keyword
9998 * @param finallyClause the finally clause contained in the try statement
9999 */
10000 TryStatement.full(Token tryKeyword, Block body, List<CatchClause> catchClauses , Token finallyKeyword, Block finallyClause) {
10001 this._catchClauses = new NodeList<CatchClause>(this);
10002 this._tryKeyword = tryKeyword;
10003 this._body = becomeParentOf(body);
10004 this._catchClauses.addAll(catchClauses);
10005 this._finallyKeyword = finallyKeyword;
10006 this._finallyClause = becomeParentOf(finallyClause);
10007 }
10008 /**
10009 * Initialize a newly created try statement.
10010 * @param tryKeyword the token representing the 'try' keyword
10011 * @param body the body of the statement
10012 * @param catchClauses the catch clauses contained in the try statement
10013 * @param finallyKeyword the token representing the 'finally' keyword
10014 * @param finallyClause the finally clause contained in the try statement
10015 */
10016 TryStatement({Token tryKeyword, Block body, List<CatchClause> catchClauses, To ken finallyKeyword, Block finallyClause}) : this.full(tryKeyword, body, catchCla uses, finallyKeyword, finallyClause);
10017 accept(ASTVisitor visitor) => visitor.visitTryStatement(this);
10018 Token get beginToken => _tryKeyword;
10019 /**
10020 * Return the body of the statement.
10021 * @return the body of the statement
10022 */
10023 Block get body => _body;
10024 /**
10025 * Return the catch clauses contained in the try statement.
10026 * @return the catch clauses contained in the try statement
10027 */
10028 NodeList<CatchClause> get catchClauses => _catchClauses;
10029 Token get endToken {
10030 if (_finallyClause != null) {
10031 return _finallyClause.endToken;
10032 } else if (_finallyKeyword != null) {
10033 return _finallyKeyword;
10034 } else if (!_catchClauses.isEmpty) {
10035 return _catchClauses.endToken;
10036 }
10037 return _body.endToken;
10038 }
10039 /**
10040 * Return the finally clause contained in the try statement, or {@code null} i f the statement does
10041 * not contain a finally clause.
10042 * @return the finally clause contained in the try statement
10043 */
10044 Block get finallyClause => _finallyClause;
10045 /**
10046 * Return the token representing the 'finally' keyword, or {@code null} if the statement does not
10047 * contain a finally clause.
10048 * @return the token representing the 'finally' keyword
10049 */
10050 Token get finallyKeyword => _finallyKeyword;
10051 /**
10052 * Return the token representing the 'try' keyword.
10053 * @return the token representing the 'try' keyword
10054 */
10055 Token get tryKeyword => _tryKeyword;
10056 /**
10057 * Set the body of the statement to the given block.
10058 * @param block the body of the statement
10059 */
10060 void set body(Block block) {
10061 _body = becomeParentOf(block);
10062 }
10063 /**
10064 * Set the finally clause contained in the try statement to the given block.
10065 * @param block the finally clause contained in the try statement
10066 */
10067 void set finallyClause(Block block) {
10068 _finallyClause = becomeParentOf(block);
10069 }
10070 /**
10071 * Set the token representing the 'finally' keyword to the given token.
10072 * @param finallyKeyword the token representing the 'finally' keyword
10073 */
10074 void set finallyKeyword(Token finallyKeyword2) {
10075 this._finallyKeyword = finallyKeyword2;
10076 }
10077 /**
10078 * Set the token representing the 'try' keyword to the given token.
10079 * @param tryKeyword the token representing the 'try' keyword
10080 */
10081 void set tryKeyword(Token tryKeyword2) {
10082 this._tryKeyword = tryKeyword2;
10083 }
10084 void visitChildren(ASTVisitor<Object> visitor) {
10085 safelyVisitChild(_body, visitor);
10086 _catchClauses.accept(visitor);
10087 safelyVisitChild(_finallyClause, visitor);
10088 }
10089 }
10090 /**
10091 * The abstract class {@code TypeAlias} defines the behavior common to declarati ons of type aliases.
10092 * <pre>
10093 * typeAlias ::=
10094 * 'typedef' typeAliasBody
10095 * typeAliasBody ::=
10096 * classTypeAlias
10097 * | functionTypeAlias
10098 * </pre>
10099 * @coverage dart.engine.ast
10100 */
10101 abstract class TypeAlias extends CompilationUnitMember {
10102 /**
10103 * The token representing the 'typedef' keyword.
10104 */
10105 Token _keyword;
10106 /**
10107 * The semicolon terminating the declaration.
10108 */
10109 Token _semicolon;
10110 /**
10111 * Initialize a newly created type alias.
10112 * @param comment the documentation comment associated with this type alias
10113 * @param metadata the annotations associated with this type alias
10114 * @param keyword the token representing the 'typedef' keyword
10115 * @param semicolon the semicolon terminating the declaration
10116 */
10117 TypeAlias.full(Comment comment, List<Annotation> metadata, Token keyword, Toke n semicolon) : super.full(comment, metadata) {
10118 this._keyword = keyword;
10119 this._semicolon = semicolon;
10120 }
10121 /**
10122 * Initialize a newly created type alias.
10123 * @param comment the documentation comment associated with this type alias
10124 * @param metadata the annotations associated with this type alias
10125 * @param keyword the token representing the 'typedef' keyword
10126 * @param semicolon the semicolon terminating the declaration
10127 */
10128 TypeAlias({Comment comment, List<Annotation> metadata, Token keyword, Token se micolon}) : this.full(comment, metadata, keyword, semicolon);
10129 Token get endToken => _semicolon;
10130 /**
10131 * Return the token representing the 'typedef' keyword.
10132 * @return the token representing the 'typedef' keyword
10133 */
10134 Token get keyword => _keyword;
10135 /**
10136 * Return the semicolon terminating the declaration.
10137 * @return the semicolon terminating the declaration
10138 */
10139 Token get semicolon => _semicolon;
10140 /**
10141 * Set the token representing the 'typedef' keyword to the given token.
10142 * @param keyword the token representing the 'typedef' keyword
10143 */
10144 void set keyword(Token keyword23) {
10145 this._keyword = keyword23;
10146 }
10147 /**
10148 * Set the semicolon terminating the declaration to the given token.
10149 * @param semicolon the semicolon terminating the declaration
10150 */
10151 void set semicolon(Token semicolon17) {
10152 this._semicolon = semicolon17;
10153 }
10154 Token get firstTokenAfterCommentAndMetadata => _keyword;
10155 }
10156 /**
10157 * Instances of the class {@code TypeArgumentList} represent a list of type argu ments.
10158 * <pre>
10159 * typeArguments ::=
10160 * '<' typeName (',' typeName)* '>'
10161 * </pre>
10162 * @coverage dart.engine.ast
10163 */
10164 class TypeArgumentList extends ASTNode {
10165 /**
10166 * The left bracket.
10167 */
10168 Token _leftBracket;
10169 /**
10170 * The type arguments associated with the type.
10171 */
10172 NodeList<TypeName> _arguments;
10173 /**
10174 * The right bracket.
10175 */
10176 Token _rightBracket;
10177 /**
10178 * Initialize a newly created list of type arguments.
10179 * @param leftBracket the left bracket
10180 * @param arguments the type arguments associated with the type
10181 * @param rightBracket the right bracket
10182 */
10183 TypeArgumentList.full(Token leftBracket, List<TypeName> arguments, Token right Bracket) {
10184 this._arguments = new NodeList<TypeName>(this);
10185 this._leftBracket = leftBracket;
10186 this._arguments.addAll(arguments);
10187 this._rightBracket = rightBracket;
10188 }
10189 /**
10190 * Initialize a newly created list of type arguments.
10191 * @param leftBracket the left bracket
10192 * @param arguments the type arguments associated with the type
10193 * @param rightBracket the right bracket
10194 */
10195 TypeArgumentList({Token leftBracket, List<TypeName> arguments, Token rightBrac ket}) : this.full(leftBracket, arguments, rightBracket);
10196 accept(ASTVisitor visitor) => visitor.visitTypeArgumentList(this);
10197 /**
10198 * Return the type arguments associated with the type.
10199 * @return the type arguments associated with the type
10200 */
10201 NodeList<TypeName> get arguments => _arguments;
10202 Token get beginToken => _leftBracket;
10203 Token get endToken => _rightBracket;
10204 /**
10205 * Return the left bracket.
10206 * @return the left bracket
10207 */
10208 Token get leftBracket => _leftBracket;
10209 /**
10210 * Return the right bracket.
10211 * @return the right bracket
10212 */
10213 Token get rightBracket => _rightBracket;
10214 /**
10215 * Set the left bracket to the given token.
10216 * @param leftBracket the left bracket
10217 */
10218 void set leftBracket(Token leftBracket8) {
10219 this._leftBracket = leftBracket8;
10220 }
10221 /**
10222 * Set the right bracket to the given token.
10223 * @param rightBracket the right bracket
10224 */
10225 void set rightBracket(Token rightBracket8) {
10226 this._rightBracket = rightBracket8;
10227 }
10228 void visitChildren(ASTVisitor<Object> visitor) {
10229 _arguments.accept(visitor);
10230 }
10231 }
10232 /**
10233 * Instances of the class {@code TypeName} represent the name of a type, which c an optionally
10234 * include type arguments.
10235 * <pre>
10236 * typeName ::={@link Identifier identifier} typeArguments?
10237 * </pre>
10238 * @coverage dart.engine.ast
10239 */
10240 class TypeName extends ASTNode {
10241 /**
10242 * The name of the type.
10243 */
10244 Identifier _name;
10245 /**
10246 * The type arguments associated with the type, or {@code null} if there are n o type arguments.
10247 */
10248 TypeArgumentList _typeArguments;
10249 /**
10250 * The type being named, or {@code null} if the AST structure has not been res olved.
10251 */
10252 Type2 _type;
10253 /**
10254 * Initialize a newly created type name.
10255 * @param name the name of the type
10256 * @param typeArguments the type arguments associated with the type, or {@code null} if there are
10257 * no type arguments
10258 */
10259 TypeName.full(Identifier name, TypeArgumentList typeArguments) {
10260 this._name = becomeParentOf(name);
10261 this._typeArguments = becomeParentOf(typeArguments);
10262 }
10263 /**
10264 * Initialize a newly created type name.
10265 * @param name the name of the type
10266 * @param typeArguments the type arguments associated with the type, or {@code null} if there are
10267 * no type arguments
10268 */
10269 TypeName({Identifier name, TypeArgumentList typeArguments}) : this.full(name, typeArguments);
10270 accept(ASTVisitor visitor) => visitor.visitTypeName(this);
10271 Token get beginToken => _name.beginToken;
10272 Token get endToken {
10273 if (_typeArguments != null) {
10274 return _typeArguments.endToken;
10275 }
10276 return _name.endToken;
10277 }
10278 /**
10279 * Return the name of the type.
10280 * @return the name of the type
10281 */
10282 Identifier get name => _name;
10283 /**
10284 * Return the type being named, or {@code null} if the AST structure has not b een resolved.
10285 * @return the type being named
10286 */
10287 Type2 get type => _type;
10288 /**
10289 * Return the type arguments associated with the type, or {@code null} if ther e are no type
10290 * arguments.
10291 * @return the type arguments associated with the type
10292 */
10293 TypeArgumentList get typeArguments => _typeArguments;
10294 bool isSynthetic() => _name.isSynthetic() && _typeArguments == null;
10295 /**
10296 * Set the name of the type to the given identifier.
10297 * @param identifier the name of the type
10298 */
10299 void set name(Identifier identifier) {
10300 _name = becomeParentOf(identifier);
10301 }
10302 /**
10303 * Set the type being named to the given type.
10304 * @param type the type being named
10305 */
10306 void set type(Type2 type3) {
10307 this._type = type3;
10308 }
10309 /**
10310 * Set the type arguments associated with the type to the given type arguments .
10311 * @param typeArguments the type arguments associated with the type
10312 */
10313 void set typeArguments(TypeArgumentList typeArguments2) {
10314 this._typeArguments = becomeParentOf(typeArguments2);
10315 }
10316 void visitChildren(ASTVisitor<Object> visitor) {
10317 safelyVisitChild(_name, visitor);
10318 safelyVisitChild(_typeArguments, visitor);
10319 }
10320 }
10321 /**
10322 * Instances of the class {@code TypeParameter} represent a type parameter.
10323 * <pre>
10324 * typeParameter ::={@link SimpleIdentifier name} ('extends' {@link TypeName bou nd})?
10325 * </pre>
10326 * @coverage dart.engine.ast
10327 */
10328 class TypeParameter extends Declaration {
10329 /**
10330 * The name of the type parameter.
10331 */
10332 SimpleIdentifier _name;
10333 /**
10334 * The token representing the 'extends' keyword, or {@code null} if there was no explicit upper
10335 * bound.
10336 */
10337 Token _keyword;
10338 /**
10339 * The name of the upper bound for legal arguments, or {@code null} if there w as no explicit upper
10340 * bound.
10341 */
10342 TypeName _bound;
10343 /**
10344 * Initialize a newly created type parameter.
10345 * @param comment the documentation comment associated with the type parameter
10346 * @param metadata the annotations associated with the type parameter
10347 * @param name the name of the type parameter
10348 * @param keyword the token representing the 'extends' keyword
10349 * @param bound the name of the upper bound for legal arguments
10350 */
10351 TypeParameter.full(Comment comment, List<Annotation> metadata, SimpleIdentifie r name, Token keyword, TypeName bound) : super.full(comment, metadata) {
10352 this._name = becomeParentOf(name);
10353 this._keyword = keyword;
10354 this._bound = becomeParentOf(bound);
10355 }
10356 /**
10357 * Initialize a newly created type parameter.
10358 * @param comment the documentation comment associated with the type parameter
10359 * @param metadata the annotations associated with the type parameter
10360 * @param name the name of the type parameter
10361 * @param keyword the token representing the 'extends' keyword
10362 * @param bound the name of the upper bound for legal arguments
10363 */
10364 TypeParameter({Comment comment, List<Annotation> metadata, SimpleIdentifier na me, Token keyword, TypeName bound}) : this.full(comment, metadata, name, keyword , bound);
10365 accept(ASTVisitor visitor) => visitor.visitTypeParameter(this);
10366 /**
10367 * Return the name of the upper bound for legal arguments, or {@code null} if there was no
10368 * explicit upper bound.
10369 * @return the name of the upper bound for legal arguments
10370 */
10371 TypeName get bound => _bound;
10372 TypeVariableElement get element => _name != null ? (_name.element as TypeVaria bleElement) : null;
10373 Token get endToken {
10374 if (_bound == null) {
10375 return _name.endToken;
10376 }
10377 return _bound.endToken;
10378 }
10379 /**
10380 * Return the token representing the 'assert' keyword.
10381 * @return the token representing the 'assert' keyword
10382 */
10383 Token get keyword => _keyword;
10384 /**
10385 * Return the name of the type parameter.
10386 * @return the name of the type parameter
10387 */
10388 SimpleIdentifier get name => _name;
10389 /**
10390 * Set the name of the upper bound for legal arguments to the given type name.
10391 * @param typeName the name of the upper bound for legal arguments
10392 */
10393 void set bound(TypeName typeName) {
10394 _bound = becomeParentOf(typeName);
10395 }
10396 /**
10397 * Set the token representing the 'assert' keyword to the given token.
10398 * @param keyword the token representing the 'assert' keyword
10399 */
10400 void set keyword(Token keyword24) {
10401 this._keyword = keyword24;
10402 }
10403 /**
10404 * Set the name of the type parameter to the given identifier.
10405 * @param identifier the name of the type parameter
10406 */
10407 void set name(SimpleIdentifier identifier) {
10408 _name = becomeParentOf(identifier);
10409 }
10410 void visitChildren(ASTVisitor<Object> visitor) {
10411 super.visitChildren(visitor);
10412 safelyVisitChild(_name, visitor);
10413 safelyVisitChild(_bound, visitor);
10414 }
10415 Token get firstTokenAfterCommentAndMetadata => _name.beginToken;
10416 }
10417 /**
10418 * Instances of the class {@code TypeParameterList} represent type parameters wi thin a declaration.
10419 * <pre>
10420 * typeParameterList ::=
10421 * '<' {@link TypeParameter typeParameter} (',' {@link TypeParameter typeParamet er})* '>'
10422 * </pre>
10423 * @coverage dart.engine.ast
10424 */
10425 class TypeParameterList extends ASTNode {
10426 /**
10427 * The left angle bracket.
10428 */
10429 Token _leftBracket;
10430 /**
10431 * The type parameters in the list.
10432 */
10433 NodeList<TypeParameter> _typeParameters;
10434 /**
10435 * The right angle bracket.
10436 */
10437 Token _rightBracket;
10438 /**
10439 * Initialize a newly created list of type parameters.
10440 * @param leftBracket the left angle bracket
10441 * @param typeParameters the type parameters in the list
10442 * @param rightBracket the right angle bracket
10443 */
10444 TypeParameterList.full(Token leftBracket, List<TypeParameter> typeParameters, Token rightBracket) {
10445 this._typeParameters = new NodeList<TypeParameter>(this);
10446 this._leftBracket = leftBracket;
10447 this._typeParameters.addAll(typeParameters);
10448 this._rightBracket = rightBracket;
10449 }
10450 /**
10451 * Initialize a newly created list of type parameters.
10452 * @param leftBracket the left angle bracket
10453 * @param typeParameters the type parameters in the list
10454 * @param rightBracket the right angle bracket
10455 */
10456 TypeParameterList({Token leftBracket, List<TypeParameter> typeParameters, Toke n rightBracket}) : this.full(leftBracket, typeParameters, rightBracket);
10457 accept(ASTVisitor visitor) => visitor.visitTypeParameterList(this);
10458 Token get beginToken => _leftBracket;
10459 Token get endToken => _rightBracket;
10460 /**
10461 * Return the left angle bracket.
10462 * @return the left angle bracket
10463 */
10464 Token get leftBracket => _leftBracket;
10465 /**
10466 * Return the right angle bracket.
10467 * @return the right angle bracket
10468 */
10469 Token get rightBracket => _rightBracket;
10470 /**
10471 * Return the type parameters for the type.
10472 * @return the type parameters for the type
10473 */
10474 NodeList<TypeParameter> get typeParameters => _typeParameters;
10475 void visitChildren(ASTVisitor<Object> visitor) {
10476 _typeParameters.accept(visitor);
10477 }
10478 }
10479 /**
10480 * The abstract class {@code TypedLiteral} defines the behavior common to litera ls that have a type
10481 * associated with them.
10482 * <pre>
10483 * listLiteral ::={@link ListLiteral listLiteral}| {@link MapLiteral mapLiteral} </pre>
10484 * @coverage dart.engine.ast
10485 */
10486 abstract class TypedLiteral extends Literal {
10487 /**
10488 * The const modifier associated with this literal, or {@code null} if the lit eral is not a
10489 * constant.
10490 */
10491 Token _modifier;
10492 /**
10493 * The type argument associated with this literal, or {@code null} if no type arguments were
10494 * declared.
10495 */
10496 TypeArgumentList _typeArguments;
10497 /**
10498 * Initialize a newly created typed literal.
10499 * @param modifier the const modifier associated with this literal
10500 * @param typeArguments the type argument associated with this literal, or {@c ode null} if no type
10501 * arguments were declared
10502 */
10503 TypedLiteral.full(Token modifier, TypeArgumentList typeArguments) {
10504 this._modifier = modifier;
10505 this._typeArguments = becomeParentOf(typeArguments);
10506 }
10507 /**
10508 * Initialize a newly created typed literal.
10509 * @param modifier the const modifier associated with this literal
10510 * @param typeArguments the type argument associated with this literal, or {@c ode null} if no type
10511 * arguments were declared
10512 */
10513 TypedLiteral({Token modifier, TypeArgumentList typeArguments}) : this.full(mod ifier, typeArguments);
10514 /**
10515 * Return the const modifier associated with this literal.
10516 * @return the const modifier associated with this literal
10517 */
10518 Token get modifier => _modifier;
10519 /**
10520 * Return the type argument associated with this literal, or {@code null} if n o type arguments
10521 * were declared.
10522 * @return the type argument associated with this literal
10523 */
10524 TypeArgumentList get typeArguments => _typeArguments;
10525 /**
10526 * Set the modifiers associated with this literal to the given modifiers.
10527 * @param modifiers the modifiers associated with this literal
10528 */
10529 void set modifier(Token modifier2) {
10530 this._modifier = modifier2;
10531 }
10532 /**
10533 * Set the type argument associated with this literal to the given arguments.
10534 * @param typeArguments the type argument associated with this literal
10535 */
10536 void set typeArguments(TypeArgumentList typeArguments3) {
10537 this._typeArguments = typeArguments3;
10538 }
10539 void visitChildren(ASTVisitor<Object> visitor) {
10540 safelyVisitChild(_typeArguments, visitor);
10541 }
10542 }
10543 /**
10544 * The abstract class {@code UriBasedDirective} defines the behavior common to n odes that represent
10545 * a directive that references a URI.
10546 * <pre>
10547 * uriBasedDirective ::={@link ExportDirective exportDirective}| {@link ImportDi rective importDirective}| {@link PartDirective partDirective}</pre>
10548 * @coverage dart.engine.ast
10549 */
10550 abstract class UriBasedDirective extends Directive {
10551 /**
10552 * The URI referenced by this directive.
10553 */
10554 StringLiteral _uri;
10555 /**
10556 * Initialize a newly create URI-based directive.
10557 * @param comment the documentation comment associated with this directive
10558 * @param metadata the annotations associated with the directive
10559 * @param uri the URI referenced by this directive
10560 */
10561 UriBasedDirective.full(Comment comment, List<Annotation> metadata, StringLiter al uri) : super.full(comment, metadata) {
10562 this._uri = becomeParentOf(uri);
10563 }
10564 /**
10565 * Initialize a newly create URI-based directive.
10566 * @param comment the documentation comment associated with this directive
10567 * @param metadata the annotations associated with the directive
10568 * @param uri the URI referenced by this directive
10569 */
10570 UriBasedDirective({Comment comment, List<Annotation> metadata, StringLiteral u ri}) : this.full(comment, metadata, uri);
10571 /**
10572 * Return the URI referenced by this directive.
10573 * @return the URI referenced by this directive
10574 */
10575 StringLiteral get uri => _uri;
10576 /**
10577 * Set the URI referenced by this directive to the given URI.
10578 * @param uri the URI referenced by this directive
10579 */
10580 void set uri(StringLiteral uri2) {
10581 this._uri = becomeParentOf(uri2);
10582 }
10583 void visitChildren(ASTVisitor<Object> visitor) {
10584 super.visitChildren(visitor);
10585 safelyVisitChild(_uri, visitor);
10586 }
10587 }
10588 /**
10589 * Instances of the class {@code VariableDeclaration} represent an identifier th at has an initial
10590 * value associated with it. Instances of this class are always children of the class{@link VariableDeclarationList}.
10591 * <pre>
10592 * variableDeclaration ::={@link SimpleIdentifier identifier} ('=' {@link Expres sion initialValue})?
10593 * </pre>
10594 * @coverage dart.engine.ast
10595 */
10596 class VariableDeclaration extends Declaration {
10597 /**
10598 * The name of the variable being declared.
10599 */
10600 SimpleIdentifier _name;
10601 /**
10602 * The equal sign separating the variable name from the initial value, or {@co de null} if the
10603 * initial value was not specified.
10604 */
10605 Token _equals;
10606 /**
10607 * The expression used to compute the initial value for the variable, or {@cod e null} if the
10608 * initial value was not specified.
10609 */
10610 Expression _initializer;
10611 /**
10612 * Initialize a newly created variable declaration.
10613 * @param comment the documentation comment associated with this declaration
10614 * @param metadata the annotations associated with this member
10615 * @param name the name of the variable being declared
10616 * @param equals the equal sign separating the variable name from the initial value
10617 * @param initializer the expression used to compute the initial value for the variable
10618 */
10619 VariableDeclaration.full(Comment comment, List<Annotation> metadata, SimpleIde ntifier name, Token equals, Expression initializer) : super.full(comment, metada ta) {
10620 this._name = becomeParentOf(name);
10621 this._equals = equals;
10622 this._initializer = becomeParentOf(initializer);
10623 }
10624 /**
10625 * Initialize a newly created variable declaration.
10626 * @param comment the documentation comment associated with this declaration
10627 * @param metadata the annotations associated with this member
10628 * @param name the name of the variable being declared
10629 * @param equals the equal sign separating the variable name from the initial value
10630 * @param initializer the expression used to compute the initial value for the variable
10631 */
10632 VariableDeclaration({Comment comment, List<Annotation> metadata, SimpleIdentif ier name, Token equals, Expression initializer}) : this.full(comment, metadata, name, equals, initializer);
10633 accept(ASTVisitor visitor) => visitor.visitVariableDeclaration(this);
10634 VariableElement get element => _name != null ? (_name.element as VariableEleme nt) : null;
10635 Token get endToken {
10636 if (_initializer != null) {
10637 return _initializer.endToken;
10638 }
10639 return _name.endToken;
10640 }
10641 /**
10642 * Return the equal sign separating the variable name from the initial value, or {@code null} if
10643 * the initial value was not specified.
10644 * @return the equal sign separating the variable name from the initial value
10645 */
10646 Token get equals => _equals;
10647 /**
10648 * Return the expression used to compute the initial value for the variable, o r {@code null} if
10649 * the initial value was not specified.
10650 * @return the expression used to compute the initial value for the variable
10651 */
10652 Expression get initializer => _initializer;
10653 /**
10654 * Return the name of the variable being declared.
10655 * @return the name of the variable being declared
10656 */
10657 SimpleIdentifier get name => _name;
10658 /**
10659 * Return {@code true} if this variable was declared with the 'const' modifier .
10660 * @return {@code true} if this variable was declared with the 'const' modifie r
10661 */
10662 bool isConst() {
10663 ASTNode parent10 = parent;
10664 return parent10 is VariableDeclarationList && ((parent10 as VariableDeclarat ionList)).isConst();
10665 }
10666 /**
10667 * Return {@code true} if this variable was declared with the 'final' modifier . Variables that are
10668 * declared with the 'const' modifier will return {@code false} even though th ey are implicitly
10669 * final.
10670 * @return {@code true} if this variable was declared with the 'final' modifie r
10671 */
10672 bool isFinal() {
10673 ASTNode parent11 = parent;
10674 return parent11 is VariableDeclarationList && ((parent11 as VariableDeclarat ionList)).isFinal();
10675 }
10676 /**
10677 * Set the equal sign separating the variable name from the initial value to t he given token.
10678 * @param equals the equal sign separating the variable name from the initial value
10679 */
10680 void set equals(Token equals6) {
10681 this._equals = equals6;
10682 }
10683 /**
10684 * Set the expression used to compute the initial value for the variable to th e given expression.
10685 * @param initializer the expression used to compute the initial value for the variable
10686 */
10687 void set initializer(Expression initializer2) {
10688 this._initializer = becomeParentOf(initializer2);
10689 }
10690 /**
10691 * Set the name of the variable being declared to the given identifier.
10692 * @param name the name of the variable being declared
10693 */
10694 void set name(SimpleIdentifier name7) {
10695 this._name = becomeParentOf(name7);
10696 }
10697 void visitChildren(ASTVisitor<Object> visitor) {
10698 super.visitChildren(visitor);
10699 safelyVisitChild(_name, visitor);
10700 safelyVisitChild(_initializer, visitor);
10701 }
10702 Token get firstTokenAfterCommentAndMetadata => _name.beginToken;
10703 }
10704 /**
10705 * Instances of the class {@code VariableDeclarationList} represent the declarat ion of one or more
10706 * variables of the same type.
10707 * <pre>
10708 * variableDeclarationList ::=
10709 * finalConstVarOrType {@link VariableDeclaration variableDeclaration} (',' {@li nk VariableDeclaration variableDeclaration})
10710 * finalConstVarOrType ::=
10711 * | 'final' {@link TypeName type}?
10712 * | 'const' {@link TypeName type}?
10713 * | 'var'
10714 * | {@link TypeName type}</pre>
10715 * @coverage dart.engine.ast
10716 */
10717 class VariableDeclarationList extends ASTNode {
10718 /**
10719 * The token representing the 'final', 'const' or 'var' keyword, or {@code nul l} if no keyword was
10720 * included.
10721 */
10722 Token _keyword;
10723 /**
10724 * The type of the variables being declared, or {@code null} if no type was pr ovided.
10725 */
10726 TypeName _type;
10727 /**
10728 * A list containing the individual variables being declared.
10729 */
10730 NodeList<VariableDeclaration> _variables;
10731 /**
10732 * Initialize a newly created variable declaration list.
10733 * @param keyword the token representing the 'final', 'const' or 'var' keyword
10734 * @param type the type of the variables being declared
10735 * @param variables a list containing the individual variables being declared
10736 */
10737 VariableDeclarationList.full(Token keyword, TypeName type, List<VariableDeclar ation> variables) {
10738 this._variables = new NodeList<VariableDeclaration>(this);
10739 this._keyword = keyword;
10740 this._type = becomeParentOf(type);
10741 this._variables.addAll(variables);
10742 }
10743 /**
10744 * Initialize a newly created variable declaration list.
10745 * @param keyword the token representing the 'final', 'const' or 'var' keyword
10746 * @param type the type of the variables being declared
10747 * @param variables a list containing the individual variables being declared
10748 */
10749 VariableDeclarationList({Token keyword, TypeName type, List<VariableDeclaratio n> variables}) : this.full(keyword, type, variables);
10750 accept(ASTVisitor visitor) => visitor.visitVariableDeclarationList(this);
10751 Token get beginToken {
10752 if (_keyword != null) {
10753 return _keyword;
10754 } else if (_type != null) {
10755 return _type.beginToken;
10756 }
10757 return _variables.beginToken;
10758 }
10759 Token get endToken => _variables.endToken;
10760 /**
10761 * Return the token representing the 'final', 'const' or 'var' keyword, or {@c ode null} if no
10762 * keyword was included.
10763 * @return the token representing the 'final', 'const' or 'var' keyword
10764 */
10765 Token get keyword => _keyword;
10766 /**
10767 * Return the type of the variables being declared, or {@code null} if no type was provided.
10768 * @return the type of the variables being declared
10769 */
10770 TypeName get type => _type;
10771 /**
10772 * Return a list containing the individual variables being declared.
10773 * @return a list containing the individual variables being declared
10774 */
10775 NodeList<VariableDeclaration> get variables => _variables;
10776 /**
10777 * Return {@code true} if the variables in this list were declared with the 'c onst' modifier.
10778 * @return {@code true} if the variables in this list were declared with the ' const' modifier
10779 */
10780 bool isConst() => _keyword is KeywordToken && identical(((_keyword as KeywordT oken)).keyword, Keyword.CONST);
10781 /**
10782 * Return {@code true} if the variables in this list were declared with the 'f inal' modifier.
10783 * Variables that are declared with the 'const' modifier will return {@code fa lse} even though
10784 * they are implicitly final.
10785 * @return {@code true} if the variables in this list were declared with the ' final' modifier
10786 */
10787 bool isFinal() => _keyword is KeywordToken && identical(((_keyword as KeywordT oken)).keyword, Keyword.FINAL);
10788 /**
10789 * Set the token representing the 'final', 'const' or 'var' keyword to the giv en token.
10790 * @param keyword the token representing the 'final', 'const' or 'var' keyword
10791 */
10792 void set keyword(Token keyword25) {
10793 this._keyword = keyword25;
10794 }
10795 /**
10796 * Set the type of the variables being declared to the given type name.
10797 * @param typeName the type of the variables being declared
10798 */
10799 void set type(TypeName typeName) {
10800 _type = becomeParentOf(typeName);
10801 }
10802 void visitChildren(ASTVisitor<Object> visitor) {
10803 safelyVisitChild(_type, visitor);
10804 _variables.accept(visitor);
10805 }
10806 }
10807 /**
10808 * Instances of the class {@code VariableDeclarationStatement} represent a list of variables that
10809 * are being declared in a context where a statement is required.
10810 * <pre>
10811 * variableDeclarationStatement ::={@link VariableDeclarationList variableList} ';'
10812 * </pre>
10813 * @coverage dart.engine.ast
10814 */
10815 class VariableDeclarationStatement extends Statement {
10816 /**
10817 * The variables being declared.
10818 */
10819 VariableDeclarationList _variableList;
10820 /**
10821 * The semicolon terminating the statement.
10822 */
10823 Token _semicolon;
10824 /**
10825 * Initialize a newly created variable declaration statement.
10826 * @param variableList the fields being declared
10827 * @param semicolon the semicolon terminating the statement
10828 */
10829 VariableDeclarationStatement.full(VariableDeclarationList variableList, Token semicolon) {
10830 this._variableList = becomeParentOf(variableList);
10831 this._semicolon = semicolon;
10832 }
10833 /**
10834 * Initialize a newly created variable declaration statement.
10835 * @param variableList the fields being declared
10836 * @param semicolon the semicolon terminating the statement
10837 */
10838 VariableDeclarationStatement({VariableDeclarationList variableList, Token semi colon}) : this.full(variableList, semicolon);
10839 accept(ASTVisitor visitor) => visitor.visitVariableDeclarationStatement(this);
10840 Token get beginToken => _variableList.beginToken;
10841 Token get endToken => _semicolon;
10842 /**
10843 * Return the semicolon terminating the statement.
10844 * @return the semicolon terminating the statement
10845 */
10846 Token get semicolon => _semicolon;
10847 /**
10848 * Return the variables being declared.
10849 * @return the variables being declared
10850 */
10851 VariableDeclarationList get variables => _variableList;
10852 /**
10853 * Set the semicolon terminating the statement to the given token.
10854 * @param semicolon the semicolon terminating the statement
10855 */
10856 void set semicolon(Token semicolon18) {
10857 this._semicolon = semicolon18;
10858 }
10859 /**
10860 * Set the variables being declared to the given list of variables.
10861 * @param variableList the variables being declared
10862 */
10863 void set variables(VariableDeclarationList variableList2) {
10864 this._variableList = becomeParentOf(variableList2);
10865 }
10866 void visitChildren(ASTVisitor<Object> visitor) {
10867 safelyVisitChild(_variableList, visitor);
10868 }
10869 }
10870 /**
10871 * Instances of the class {@code WhileStatement} represent a while statement.
10872 * <pre>
10873 * whileStatement ::=
10874 * 'while' '(' {@link Expression condition} ')' {@link Statement body}</pre>
10875 * @coverage dart.engine.ast
10876 */
10877 class WhileStatement extends Statement {
10878 /**
10879 * The token representing the 'while' keyword.
10880 */
10881 Token _keyword;
10882 /**
10883 * The left parenthesis.
10884 */
10885 Token _leftParenthesis;
10886 /**
10887 * The expression used to determine whether to execute the body of the loop.
10888 */
10889 Expression _condition;
10890 /**
10891 * The right parenthesis.
10892 */
10893 Token _rightParenthesis;
10894 /**
10895 * The body of the loop.
10896 */
10897 Statement _body;
10898 /**
10899 * Initialize a newly created while statement.
10900 * @param keyword the token representing the 'while' keyword
10901 * @param leftParenthesis the left parenthesis
10902 * @param condition the expression used to determine whether to execute the bo dy of the loop
10903 * @param rightParenthesis the right parenthesis
10904 * @param body the body of the loop
10905 */
10906 WhileStatement.full(Token keyword, Token leftParenthesis, Expression condition , Token rightParenthesis, Statement body) {
10907 this._keyword = keyword;
10908 this._leftParenthesis = leftParenthesis;
10909 this._condition = becomeParentOf(condition);
10910 this._rightParenthesis = rightParenthesis;
10911 this._body = becomeParentOf(body);
10912 }
10913 /**
10914 * Initialize a newly created while statement.
10915 * @param keyword the token representing the 'while' keyword
10916 * @param leftParenthesis the left parenthesis
10917 * @param condition the expression used to determine whether to execute the bo dy of the loop
10918 * @param rightParenthesis the right parenthesis
10919 * @param body the body of the loop
10920 */
10921 WhileStatement({Token keyword, Token leftParenthesis, Expression condition, To ken rightParenthesis, Statement body}) : this.full(keyword, leftParenthesis, con dition, rightParenthesis, body);
10922 accept(ASTVisitor visitor) => visitor.visitWhileStatement(this);
10923 Token get beginToken => _keyword;
10924 /**
10925 * Return the body of the loop.
10926 * @return the body of the loop
10927 */
10928 Statement get body => _body;
10929 /**
10930 * Return the expression used to determine whether to execute the body of the loop.
10931 * @return the expression used to determine whether to execute the body of the loop
10932 */
10933 Expression get condition => _condition;
10934 Token get endToken => _body.endToken;
10935 /**
10936 * Return the token representing the 'while' keyword.
10937 * @return the token representing the 'while' keyword
10938 */
10939 Token get keyword => _keyword;
10940 /**
10941 * Return the left parenthesis.
10942 * @return the left parenthesis
10943 */
10944 Token get leftParenthesis => _leftParenthesis;
10945 /**
10946 * Return the right parenthesis.
10947 * @return the right parenthesis
10948 */
10949 Token get rightParenthesis => _rightParenthesis;
10950 /**
10951 * Set the body of the loop to the given statement.
10952 * @param statement the body of the loop
10953 */
10954 void set body(Statement statement) {
10955 _body = becomeParentOf(statement);
10956 }
10957 /**
10958 * Set the expression used to determine whether to execute the body of the loo p to the given
10959 * expression.
10960 * @param expression the expression used to determine whether to execute the b ody of the loop
10961 */
10962 void set condition(Expression expression) {
10963 _condition = becomeParentOf(expression);
10964 }
10965 /**
10966 * Set the token representing the 'while' keyword to the given token.
10967 * @param keyword the token representing the 'while' keyword
10968 */
10969 void set keyword(Token keyword26) {
10970 this._keyword = keyword26;
10971 }
10972 /**
10973 * Set the left parenthesis to the given token.
10974 * @param leftParenthesis the left parenthesis
10975 */
10976 void set leftParenthesis(Token leftParenthesis7) {
10977 this._leftParenthesis = leftParenthesis7;
10978 }
10979 /**
10980 * Set the right parenthesis to the given token.
10981 * @param rightParenthesis the right parenthesis
10982 */
10983 void set rightParenthesis(Token rightParenthesis7) {
10984 this._rightParenthesis = rightParenthesis7;
10985 }
10986 void visitChildren(ASTVisitor<Object> visitor) {
10987 safelyVisitChild(_condition, visitor);
10988 safelyVisitChild(_body, visitor);
10989 }
10990 }
10991 /**
10992 * Instances of the class {@code WithClause} represent the with clause in a clas s declaration.
10993 * <pre>
10994 * withClause ::=
10995 * 'with' {@link TypeName mixin} (',' {@link TypeName mixin})
10996 * </pre>
10997 * @coverage dart.engine.ast
10998 */
10999 class WithClause extends ASTNode {
11000 /**
11001 * The token representing the 'with' keyword.
11002 */
11003 Token _withKeyword;
11004 /**
11005 * The names of the mixins that were specified.
11006 */
11007 NodeList<TypeName> _mixinTypes;
11008 /**
11009 * Initialize a newly created with clause.
11010 * @param withKeyword the token representing the 'with' keyword
11011 * @param mixinTypes the names of the mixins that were specified
11012 */
11013 WithClause.full(Token withKeyword, List<TypeName> mixinTypes) {
11014 this._mixinTypes = new NodeList<TypeName>(this);
11015 this._withKeyword = withKeyword;
11016 this._mixinTypes.addAll(mixinTypes);
11017 }
11018 /**
11019 * Initialize a newly created with clause.
11020 * @param withKeyword the token representing the 'with' keyword
11021 * @param mixinTypes the names of the mixins that were specified
11022 */
11023 WithClause({Token withKeyword, List<TypeName> mixinTypes}) : this.full(withKey word, mixinTypes);
11024 accept(ASTVisitor visitor) => visitor.visitWithClause(this);
11025 Token get beginToken => _withKeyword;
11026 Token get endToken => _mixinTypes.endToken;
11027 /**
11028 * Return the names of the mixins that were specified.
11029 * @return the names of the mixins that were specified
11030 */
11031 NodeList<TypeName> get mixinTypes => _mixinTypes;
11032 /**
11033 * Return the token representing the 'with' keyword.
11034 * @return the token representing the 'with' keyword
11035 */
11036 Token get withKeyword => _withKeyword;
11037 /**
11038 * Set the token representing the 'with' keyword to the given token.
11039 * @param withKeyword the token representing the 'with' keyword
11040 */
11041 void set mixinKeyword(Token withKeyword2) {
11042 this._withKeyword = withKeyword2;
11043 }
11044 void visitChildren(ASTVisitor<Object> visitor) {
11045 _mixinTypes.accept(visitor);
11046 }
11047 }
11048 /**
11049 * Instances of the class {@code ConstantEvaluator} evaluate constant expression s to produce their
11050 * compile-time value. According to the Dart Language Specification: <blockquote > A constant
11051 * expression is one of the following:
11052 * <ul>
11053 * <li>A literal number.</li>
11054 * <li>A literal boolean.</li>
11055 * <li>A literal string where any interpolated expression is a compile-time cons tant that evaluates
11056 * to a numeric, string or boolean value or to {@code null}.</li>
11057 * <li>{@code null}.</li>
11058 * <li>A reference to a static constant variable.</li>
11059 * <li>An identifier expression that denotes a constant variable, a class or a t ype variable.</li>
11060 * <li>A constant constructor invocation.</li>
11061 * <li>A constant list literal.</li>
11062 * <li>A constant map literal.</li>
11063 * <li>A simple or qualified identifier denoting a top-level function or a stati c method.</li>
11064 * <li>A parenthesized expression {@code (e)} where {@code e} is a constant expr ession.</li>
11065 * <li>An expression of one of the forms {@code identical(e1, e2)}, {@code e1 == e2},{@code e1 != e2} where {@code e1} and {@code e2} are constant expressions t hat evaluate to a
11066 * numeric, string or boolean value or to {@code null}.</li>
11067 * <li>An expression of one of the forms {@code !e}, {@code e1 && e2} or {@code e1 || e2}, where{@code e}, {@code e1} and {@code e2} are constant expressions th at evaluate to a boolean value or
11068 * to {@code null}.</li>
11069 * <li>An expression of one of the forms {@code ~e}, {@code e1 ^ e2}, {@code e1 & e2},{@code e1 | e2}, {@code e1 >> e2} or {@code e1 << e2}, where {@code e}, {@ code e1} and {@code e2}are constant expressions that evaluate to an integer valu e or to {@code null}.</li>
11070 * <li>An expression of one of the forms {@code -e}, {@code e1 + e2}, {@code e1 - e2},{@code e1 * e2}, {@code e1 / e2}, {@code e1 ~/ e2}, {@code e1 > e2}, {@cod e e1 < e2},{@code e1 >= e2}, {@code e1 <= e2} or {@code e1 % e2}, where {@code e }, {@code e1} and {@code e2}are constant expressions that evaluate to a numeric value or to {@code null}.</li>
11071 * </ul>
11072 * </blockquote> The values returned by instances of this class are therefore {@ code null} and
11073 * instances of the classes {@code Boolean}, {@code BigInteger}, {@code Double}, {@code String}, and{@code DartObject}.
11074 * <p>
11075 * In addition, this class defines several values that can be returned to indica te various
11076 * conditions encountered during evaluation. These are documented with the stati c field that define
11077 * those values.
11078 * @coverage dart.engine.ast
11079 */
11080 class ConstantEvaluator extends GeneralizingASTVisitor<Object> {
11081 /**
11082 * The value returned for expressions (or non-expression nodes) that are not c ompile-time constant
11083 * expressions.
11084 */
11085 static Object NOT_A_CONSTANT = new Object();
11086 /**
11087 * The error reporter by which errors will be reported.
11088 */
11089 ErrorReporter _errorReporter;
11090 /**
11091 * Initialize a newly created constant evaluator.
11092 * @param errorReporter the error reporter by which errors will be reported
11093 */
11094 ConstantEvaluator(ErrorReporter errorReporter) {
11095 this._errorReporter = errorReporter;
11096 }
11097 Object visitAdjacentStrings(AdjacentStrings node) {
11098 JavaStringBuilder builder = new JavaStringBuilder();
11099 for (StringLiteral string in node.strings) {
11100 Object value = string.accept(this);
11101 if (identical(value, NOT_A_CONSTANT)) {
11102 return value;
11103 }
11104 builder.append(value);
11105 }
11106 return builder.toString();
11107 }
11108 Object visitBinaryExpression(BinaryExpression node) {
11109 Object leftOperand2 = node.leftOperand.accept(this);
11110 if (identical(leftOperand2, NOT_A_CONSTANT)) {
11111 return leftOperand2;
11112 }
11113 Object rightOperand2 = node.rightOperand.accept(this);
11114 if (identical(rightOperand2, NOT_A_CONSTANT)) {
11115 return rightOperand2;
11116 }
11117 while (true) {
11118 if (node.operator.type == TokenType.AMPERSAND) {
11119 if (leftOperand2 is int && rightOperand2 is int) {
11120 return ((leftOperand2 as int)) & (rightOperand2 as int);
11121 }
11122 } else if (node.operator.type == TokenType.AMPERSAND_AMPERSAND) {
11123 if (leftOperand2 is bool && rightOperand2 is bool) {
11124 return ((leftOperand2 as bool)) && ((rightOperand2 as bool));
11125 }
11126 } else if (node.operator.type == TokenType.BANG_EQ) {
11127 if (leftOperand2 is bool && rightOperand2 is bool) {
11128 return ((leftOperand2 as bool)) != ((rightOperand2 as bool));
11129 } else if (leftOperand2 is int && rightOperand2 is int) {
11130 return ((leftOperand2 as int)) != rightOperand2;
11131 } else if (leftOperand2 is double && rightOperand2 is double) {
11132 return ((leftOperand2 as double)) != rightOperand2;
11133 } else if (leftOperand2 is String && rightOperand2 is String) {
11134 return ((leftOperand2 as String)) != rightOperand2;
11135 }
11136 } else if (node.operator.type == TokenType.BAR) {
11137 if (leftOperand2 is int && rightOperand2 is int) {
11138 return ((leftOperand2 as int)) | (rightOperand2 as int);
11139 }
11140 } else if (node.operator.type == TokenType.BAR_BAR) {
11141 if (leftOperand2 is bool && rightOperand2 is bool) {
11142 return ((leftOperand2 as bool)) || ((rightOperand2 as bool));
11143 }
11144 } else if (node.operator.type == TokenType.CARET) {
11145 if (leftOperand2 is int && rightOperand2 is int) {
11146 return ((leftOperand2 as int)) ^ (rightOperand2 as int);
11147 }
11148 } else if (node.operator.type == TokenType.EQ_EQ) {
11149 if (leftOperand2 is bool && rightOperand2 is bool) {
11150 return identical(((leftOperand2 as bool)), ((rightOperand2 as bool)));
11151 } else if (leftOperand2 is int && rightOperand2 is int) {
11152 return ((leftOperand2 as int)) == rightOperand2;
11153 } else if (leftOperand2 is double && rightOperand2 is double) {
11154 return ((leftOperand2 as double)) == rightOperand2;
11155 } else if (leftOperand2 is String && rightOperand2 is String) {
11156 return ((leftOperand2 as String)) == rightOperand2;
11157 }
11158 } else if (node.operator.type == TokenType.GT) {
11159 if (leftOperand2 is int && rightOperand2 is int) {
11160 return ((leftOperand2 as int)).compareTo((rightOperand2 as int)) > 0;
11161 } else if (leftOperand2 is double && rightOperand2 is double) {
11162 return ((leftOperand2 as double)).compareTo((rightOperand2 as double)) > 0;
11163 }
11164 } else if (node.operator.type == TokenType.GT_EQ) {
11165 if (leftOperand2 is int && rightOperand2 is int) {
11166 return ((leftOperand2 as int)).compareTo((rightOperand2 as int)) >= 0;
11167 } else if (leftOperand2 is double && rightOperand2 is double) {
11168 return ((leftOperand2 as double)).compareTo((rightOperand2 as double)) >= 0;
11169 }
11170 } else if (node.operator.type == TokenType.GT_GT) {
11171 if (leftOperand2 is int && rightOperand2 is int) {
11172 return ((leftOperand2 as int)) >> ((rightOperand2 as int));
11173 }
11174 } else if (node.operator.type == TokenType.LT) {
11175 if (leftOperand2 is int && rightOperand2 is int) {
11176 return ((leftOperand2 as int)).compareTo((rightOperand2 as int)) < 0;
11177 } else if (leftOperand2 is double && rightOperand2 is double) {
11178 return ((leftOperand2 as double)).compareTo((rightOperand2 as double)) < 0;
11179 }
11180 } else if (node.operator.type == TokenType.LT_EQ) {
11181 if (leftOperand2 is int && rightOperand2 is int) {
11182 return ((leftOperand2 as int)).compareTo((rightOperand2 as int)) <= 0;
11183 } else if (leftOperand2 is double && rightOperand2 is double) {
11184 return ((leftOperand2 as double)).compareTo((rightOperand2 as double)) <= 0;
11185 }
11186 } else if (node.operator.type == TokenType.LT_LT) {
11187 if (leftOperand2 is int && rightOperand2 is int) {
11188 return ((leftOperand2 as int)) << ((rightOperand2 as int));
11189 }
11190 } else if (node.operator.type == TokenType.MINUS) {
11191 if (leftOperand2 is int && rightOperand2 is int) {
11192 return ((leftOperand2 as int)) - (rightOperand2 as int);
11193 } else if (leftOperand2 is double && rightOperand2 is double) {
11194 return ((leftOperand2 as double)) - ((rightOperand2 as double));
11195 }
11196 } else if (node.operator.type == TokenType.PERCENT) {
11197 if (leftOperand2 is int && rightOperand2 is int) {
11198 return ((leftOperand2 as int)).remainder((rightOperand2 as int));
11199 } else if (leftOperand2 is double && rightOperand2 is double) {
11200 return ((leftOperand2 as double)) % ((rightOperand2 as double));
11201 }
11202 } else if (node.operator.type == TokenType.PLUS) {
11203 if (leftOperand2 is int && rightOperand2 is int) {
11204 return ((leftOperand2 as int)) + (rightOperand2 as int);
11205 } else if (leftOperand2 is double && rightOperand2 is double) {
11206 return ((leftOperand2 as double)) + ((rightOperand2 as double));
11207 }
11208 } else if (node.operator.type == TokenType.STAR) {
11209 if (leftOperand2 is int && rightOperand2 is int) {
11210 return ((leftOperand2 as int)) * (rightOperand2 as int);
11211 } else if (leftOperand2 is double && rightOperand2 is double) {
11212 return ((leftOperand2 as double)) * ((rightOperand2 as double));
11213 }
11214 } else if (node.operator.type == TokenType.SLASH) {
11215 if (leftOperand2 is int && rightOperand2 is int) {
11216 if (rightOperand2 != 0) {
11217 return ((leftOperand2 as int)) ~/ (rightOperand2 as int);
11218 } else {
11219 reportDivideByZeroError(node);
11220 return 0;
11221 }
11222 } else if (leftOperand2 is double && rightOperand2 is double) {
11223 if (rightOperand2 != 0) {
11224 return ((leftOperand2 as double)) / ((rightOperand2 as double));
11225 } else {
11226 reportDivideByZeroError(node);
11227 return 0;
11228 }
11229 }
11230 } else if (node.operator.type == TokenType.TILDE_SLASH) {
11231 if (leftOperand2 is int && rightOperand2 is int) {
11232 if (rightOperand2 != 0) {
11233 return ((leftOperand2 as int)) ~/ (rightOperand2 as int);
11234 } else {
11235 reportDivideByZeroError(node);
11236 return 0;
11237 }
11238 } else if (leftOperand2 is double && rightOperand2 is double) {
11239 if (rightOperand2 != 0) {
11240 return ((leftOperand2 as double)) ~/ ((rightOperand2 as double));
11241 } else {
11242 reportDivideByZeroError(node);
11243 return 0;
11244 }
11245 }
11246 }
11247 break;
11248 }
11249 return visitExpression(node);
11250 }
11251 Object visitBooleanLiteral(BooleanLiteral node) => node.value ? true : false;
11252 Object visitDoubleLiteral(DoubleLiteral node) => node.value;
11253 Object visitIntegerLiteral(IntegerLiteral node) => node.value;
11254 Object visitInterpolationExpression(InterpolationExpression node) {
11255 Object value = node.expression.accept(this);
11256 if (value == null || value is bool || value is String || value is int || val ue is double) {
11257 return value;
11258 }
11259 return NOT_A_CONSTANT;
11260 }
11261 Object visitInterpolationString(InterpolationString node) => node.value;
11262 Object visitListLiteral(ListLiteral node) {
11263 List<Object> list = new List<Object>();
11264 for (Expression element in node.elements) {
11265 Object value = element.accept(this);
11266 if (identical(value, NOT_A_CONSTANT)) {
11267 return value;
11268 }
11269 list.add(value);
11270 }
11271 return list;
11272 }
11273 Object visitMapLiteral(MapLiteral node) {
11274 Map<String, Object> map = new Map<String, Object>();
11275 for (MapLiteralEntry entry in node.entries) {
11276 Object key2 = entry.key.accept(this);
11277 Object value8 = entry.value.accept(this);
11278 if (key2 is! String || identical(value8, NOT_A_CONSTANT)) {
11279 return NOT_A_CONSTANT;
11280 }
11281 map[(key2 as String)] = value8;
11282 }
11283 return map;
11284 }
11285 Object visitMethodInvocation(MethodInvocation node) => visitNode(node);
11286 Object visitNode(ASTNode node) => NOT_A_CONSTANT;
11287 Object visitNullLiteral(NullLiteral node) => null;
11288 Object visitParenthesizedExpression(ParenthesizedExpression node) => node.expr ession.accept(this);
11289 Object visitPrefixedIdentifier(PrefixedIdentifier node) => getConstantValue(nu ll);
11290 Object visitPrefixExpression(PrefixExpression node) {
11291 Object operand2 = node.operand.accept(this);
11292 if (identical(operand2, NOT_A_CONSTANT)) {
11293 return operand2;
11294 }
11295 while (true) {
11296 if (node.operator.type == TokenType.BANG) {
11297 if (identical(operand2, true)) {
11298 return false;
11299 } else if (identical(operand2, false)) {
11300 return true;
11301 }
11302 } else if (node.operator.type == TokenType.TILDE) {
11303 if (operand2 is int) {
11304 return ~((operand2 as int));
11305 }
11306 } else if (node.operator.type == TokenType.MINUS) {
11307 if (operand2 == null) {
11308 return null;
11309 } else if (operand2 is int) {
11310 return -((operand2 as int));
11311 } else if (operand2 is double) {
11312 return -((operand2 as double));
11313 }
11314 }
11315 break;
11316 }
11317 return NOT_A_CONSTANT;
11318 }
11319 Object visitPropertyAccess(PropertyAccess node) => getConstantValue(null);
11320 Object visitSimpleIdentifier(SimpleIdentifier node) => getConstantValue(null);
11321 Object visitSimpleStringLiteral(SimpleStringLiteral node) => node.value;
11322 Object visitStringInterpolation(StringInterpolation node) {
11323 JavaStringBuilder builder = new JavaStringBuilder();
11324 for (InterpolationElement element in node.elements) {
11325 Object value = element.accept(this);
11326 if (identical(value, NOT_A_CONSTANT)) {
11327 return value;
11328 }
11329 builder.append(value);
11330 }
11331 return builder.toString();
11332 }
11333 /**
11334 * Return the constant value of the static constant represented by the given e lement.
11335 * @param element the element whose value is to be returned
11336 * @return the constant value of the static constant
11337 */
11338 Object getConstantValue(Element element) {
11339 if (element is FieldElement) {
11340 FieldElement field = element as FieldElement;
11341 if (field.isStatic() && field.isConst()) {
11342 }
11343 }
11344 return NOT_A_CONSTANT;
11345 }
11346 void reportDivideByZeroError(BinaryExpression node) {
11347 _errorReporter.reportError(CompileTimeErrorCode.COMPILE_TIME_CONSTANT_RAISES _EXCEPTION_DIVIDE_BY_ZERO, node, []);
11348 }
11349 }
11350 /**
11351 * Instances of the class {@code ElementLocator} locate the {@link Element Dart model element}associated with a given {@link ASTNode AST node}.
11352 * @coverage dart.engine.ast
11353 */
11354 class ElementLocator {
11355 /**
11356 * Locate the {@link Element Dart model element} associated with the given {@l ink ASTNode AST
11357 * node}.
11358 * @param node the node (not {@code null})
11359 * @return the associated element, or {@code null} if none is found
11360 */
11361 static Element locate(ASTNode node) {
11362 ElementLocator_ElementMapper mapper = new ElementLocator_ElementMapper();
11363 return node.accept(mapper);
11364 }
11365 /**
11366 * Clients should use {@link #locate(ASTNode)}.
11367 */
11368 ElementLocator() {
11369 }
11370 }
11371 /**
11372 * Visitor that maps nodes to elements.
11373 */
11374 class ElementLocator_ElementMapper extends GeneralizingASTVisitor<Element> {
11375 Element visitBinaryExpression(BinaryExpression node) => node.element;
11376 Element visitIdentifier(Identifier node) => node.element;
11377 Element visitImportDirective(ImportDirective node) => node.element;
11378 Element visitIndexExpression(IndexExpression node) => node.element;
11379 Element visitLibraryDirective(LibraryDirective node) => node.element;
11380 Element visitPostfixExpression(PostfixExpression node) => node.element;
11381 Element visitPrefixedIdentifier(PrefixedIdentifier node) => node.element;
11382 Element visitPrefixExpression(PrefixExpression node) => node.element;
11383 Element visitStringLiteral(StringLiteral node) {
11384 ASTNode parent12 = node.parent;
11385 if (parent12 is UriBasedDirective) {
11386 return ((parent12 as UriBasedDirective)).element;
11387 }
11388 return null;
11389 }
11390 }
11391 /**
11392 * Instances of the class {@code GeneralizingASTVisitor} implement an AST visito r that will
11393 * recursively visit all of the nodes in an AST structure (like instances of the class{@link RecursiveASTVisitor}). In addition, when a node of a specific type is visited not only
11394 * will the visit method for that specific type of node be invoked, but addition al methods for the
11395 * superclasses of that node will also be invoked. For example, using an instanc e of this class to
11396 * visit a {@link Block} will cause the method {@link #visitBlock(Block)} to be invoked but will
11397 * also cause the methods {@link #visitStatement(Statement)} and {@link #visitNo de(ASTNode)} to be
11398 * subsequently invoked. This allows visitors to be written that visit all state ments without
11399 * needing to override the visit method for each of the specific subclasses of { @link Statement}.
11400 * <p>
11401 * Subclasses that override a visit method must either invoke the overridden vis it method or
11402 * explicitly invoke the more general visit method. Failure to do so will cause the visit methods
11403 * for superclasses of the node to not be invoked and will cause the children of the visited node to
11404 * not be visited.
11405 * @coverage dart.engine.ast
11406 */
11407 class GeneralizingASTVisitor<R> implements ASTVisitor<R> {
11408 R visitAdjacentStrings(AdjacentStrings node) => visitStringLiteral(node);
11409 R visitAnnotatedNode(AnnotatedNode node) => visitNode(node);
11410 R visitAnnotation(Annotation node) => visitNode(node);
11411 R visitArgumentDefinitionTest(ArgumentDefinitionTest node) => visitExpression( node);
11412 R visitArgumentList(ArgumentList node) => visitNode(node);
11413 R visitAsExpression(AsExpression node) => visitExpression(node);
11414 R visitAssertStatement(AssertStatement node) => visitStatement(node);
11415 R visitAssignmentExpression(AssignmentExpression node) => visitExpression(node );
11416 R visitBinaryExpression(BinaryExpression node) => visitExpression(node);
11417 R visitBlock(Block node) => visitStatement(node);
11418 R visitBlockFunctionBody(BlockFunctionBody node) => visitFunctionBody(node);
11419 R visitBooleanLiteral(BooleanLiteral node) => visitLiteral(node);
11420 R visitBreakStatement(BreakStatement node) => visitStatement(node);
11421 R visitCascadeExpression(CascadeExpression node) => visitExpression(node);
11422 R visitCatchClause(CatchClause node) => visitNode(node);
11423 R visitClassDeclaration(ClassDeclaration node) => visitCompilationUnitMember(n ode);
11424 R visitClassMember(ClassMember node) => visitDeclaration(node);
11425 R visitClassTypeAlias(ClassTypeAlias node) => visitTypeAlias(node);
11426 R visitCombinator(Combinator node) => visitNode(node);
11427 R visitComment(Comment node) => visitNode(node);
11428 R visitCommentReference(CommentReference node) => visitNode(node);
11429 R visitCompilationUnit(CompilationUnit node) => visitNode(node);
11430 R visitCompilationUnitMember(CompilationUnitMember node) => visitDeclaration(n ode);
11431 R visitConditionalExpression(ConditionalExpression node) => visitExpression(no de);
11432 R visitConstructorDeclaration(ConstructorDeclaration node) => visitClassMember (node);
11433 R visitConstructorFieldInitializer(ConstructorFieldInitializer node) => visitC onstructorInitializer(node);
11434 R visitConstructorInitializer(ConstructorInitializer node) => visitNode(node);
11435 R visitConstructorName(ConstructorName node) => visitNode(node);
11436 R visitContinueStatement(ContinueStatement node) => visitStatement(node);
11437 R visitDeclaration(Declaration node) => visitAnnotatedNode(node);
11438 R visitDeclaredIdentifier(DeclaredIdentifier node) => visitDeclaration(node);
11439 R visitDefaultFormalParameter(DefaultFormalParameter node) => visitFormalParam eter(node);
11440 R visitDirective(Directive node) => visitAnnotatedNode(node);
11441 R visitDoStatement(DoStatement node) => visitStatement(node);
11442 R visitDoubleLiteral(DoubleLiteral node) => visitLiteral(node);
11443 R visitEmptyFunctionBody(EmptyFunctionBody node) => visitFunctionBody(node);
11444 R visitEmptyStatement(EmptyStatement node) => visitStatement(node);
11445 R visitExportDirective(ExportDirective node) => visitNamespaceDirective(node);
11446 R visitExpression(Expression node) => visitNode(node);
11447 R visitExpressionFunctionBody(ExpressionFunctionBody node) => visitFunctionBod y(node);
11448 R visitExpressionStatement(ExpressionStatement node) => visitStatement(node);
11449 R visitExtendsClause(ExtendsClause node) => visitNode(node);
11450 R visitFieldDeclaration(FieldDeclaration node) => visitClassMember(node);
11451 R visitFieldFormalParameter(FieldFormalParameter node) => visitNormalFormalPar ameter(node);
11452 R visitForEachStatement(ForEachStatement node) => visitStatement(node);
11453 R visitFormalParameter(FormalParameter node) => visitNode(node);
11454 R visitFormalParameterList(FormalParameterList node) => visitNode(node);
11455 R visitForStatement(ForStatement node) => visitStatement(node);
11456 R visitFunctionBody(FunctionBody node) => visitNode(node);
11457 R visitFunctionDeclaration(FunctionDeclaration node) => visitNode(node);
11458 R visitFunctionDeclarationStatement(FunctionDeclarationStatement node) => visi tStatement(node);
11459 R visitFunctionExpression(FunctionExpression node) => visitExpression(node);
11460 R visitFunctionExpressionInvocation(FunctionExpressionInvocation node) => visi tExpression(node);
11461 R visitFunctionTypeAlias(FunctionTypeAlias node) => visitTypeAlias(node);
11462 R visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) => visi tNormalFormalParameter(node);
11463 R visitHideCombinator(HideCombinator node) => visitCombinator(node);
11464 R visitIdentifier(Identifier node) => visitExpression(node);
11465 R visitIfStatement(IfStatement node) => visitStatement(node);
11466 R visitImplementsClause(ImplementsClause node) => visitNode(node);
11467 R visitImportDirective(ImportDirective node) => visitNamespaceDirective(node);
11468 R visitIndexExpression(IndexExpression node) => visitExpression(node);
11469 R visitInstanceCreationExpression(InstanceCreationExpression node) => visitExp ression(node);
11470 R visitIntegerLiteral(IntegerLiteral node) => visitLiteral(node);
11471 R visitInterpolationElement(InterpolationElement node) => visitNode(node);
11472 R visitInterpolationExpression(InterpolationExpression node) => visitInterpola tionElement(node);
11473 R visitInterpolationString(InterpolationString node) => visitInterpolationElem ent(node);
11474 R visitIsExpression(IsExpression node) => visitExpression(node);
11475 R visitLabel(Label node) => visitNode(node);
11476 R visitLabeledStatement(LabeledStatement node) => visitStatement(node);
11477 R visitLibraryDirective(LibraryDirective node) => visitDirective(node);
11478 R visitLibraryIdentifier(LibraryIdentifier node) => visitIdentifier(node);
11479 R visitListLiteral(ListLiteral node) => visitTypedLiteral(node);
11480 R visitLiteral(Literal node) => visitExpression(node);
11481 R visitMapLiteral(MapLiteral node) => visitTypedLiteral(node);
11482 R visitMapLiteralEntry(MapLiteralEntry node) => visitNode(node);
11483 R visitMethodDeclaration(MethodDeclaration node) => visitClassMember(node);
11484 R visitMethodInvocation(MethodInvocation node) => visitExpression(node);
11485 R visitNamedExpression(NamedExpression node) => visitExpression(node);
11486 R visitNamespaceDirective(NamespaceDirective node) => visitUriBasedDirective(n ode);
11487 R visitNode(ASTNode node) {
11488 node.visitChildren(this);
11489 return null;
11490 }
11491 R visitNormalFormalParameter(NormalFormalParameter node) => visitFormalParamet er(node);
11492 R visitNullLiteral(NullLiteral node) => visitLiteral(node);
11493 R visitParenthesizedExpression(ParenthesizedExpression node) => visitExpressio n(node);
11494 R visitPartDirective(PartDirective node) => visitUriBasedDirective(node);
11495 R visitPartOfDirective(PartOfDirective node) => visitDirective(node);
11496 R visitPostfixExpression(PostfixExpression node) => visitExpression(node);
11497 R visitPrefixedIdentifier(PrefixedIdentifier node) => visitIdentifier(node);
11498 R visitPrefixExpression(PrefixExpression node) => visitExpression(node);
11499 R visitPropertyAccess(PropertyAccess node) => visitExpression(node);
11500 R visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) => visitConstructorInitializer(node);
11501 R visitReturnStatement(ReturnStatement node) => visitStatement(node);
11502 R visitScriptTag(ScriptTag scriptTag) => visitNode(scriptTag);
11503 R visitShowCombinator(ShowCombinator node) => visitCombinator(node);
11504 R visitSimpleFormalParameter(SimpleFormalParameter node) => visitNormalFormalP arameter(node);
11505 R visitSimpleIdentifier(SimpleIdentifier node) => visitIdentifier(node);
11506 R visitSimpleStringLiteral(SimpleStringLiteral node) => visitStringLiteral(nod e);
11507 R visitStatement(Statement node) => visitNode(node);
11508 R visitStringInterpolation(StringInterpolation node) => visitStringLiteral(nod e);
11509 R visitStringLiteral(StringLiteral node) => visitLiteral(node);
11510 R visitSuperConstructorInvocation(SuperConstructorInvocation node) => visitCon structorInitializer(node);
11511 R visitSuperExpression(SuperExpression node) => visitExpression(node);
11512 R visitSwitchCase(SwitchCase node) => visitSwitchMember(node);
11513 R visitSwitchDefault(SwitchDefault node) => visitSwitchMember(node);
11514 R visitSwitchMember(SwitchMember node) => visitNode(node);
11515 R visitSwitchStatement(SwitchStatement node) => visitStatement(node);
11516 R visitThisExpression(ThisExpression node) => visitExpression(node);
11517 R visitThrowExpression(ThrowExpression node) => visitExpression(node);
11518 R visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) => visitC ompilationUnitMember(node);
11519 R visitTryStatement(TryStatement node) => visitStatement(node);
11520 R visitTypeAlias(TypeAlias node) => visitCompilationUnitMember(node);
11521 R visitTypeArgumentList(TypeArgumentList node) => visitNode(node);
11522 R visitTypedLiteral(TypedLiteral node) => visitLiteral(node);
11523 R visitTypeName(TypeName node) => visitNode(node);
11524 R visitTypeParameter(TypeParameter node) => visitNode(node);
11525 R visitTypeParameterList(TypeParameterList node) => visitNode(node);
11526 R visitUriBasedDirective(UriBasedDirective node) => visitDirective(node);
11527 R visitVariableDeclaration(VariableDeclaration node) => visitDeclaration(node) ;
11528 R visitVariableDeclarationList(VariableDeclarationList node) => visitNode(node );
11529 R visitVariableDeclarationStatement(VariableDeclarationStatement node) => visi tStatement(node);
11530 R visitWhileStatement(WhileStatement node) => visitStatement(node);
11531 R visitWithClause(WithClause node) => visitNode(node);
11532 }
11533 /**
11534 * Instances of the class {@code NodeLocator} locate the {@link ASTNode AST node } associated with a
11535 * source range, given the AST structure built from the source. More specificall y, they will return
11536 * the {@link ASTNode AST node} with the shortest length whose source range comp letely encompasses
11537 * the specified range.
11538 * @coverage dart.engine.ast
11539 */
11540 class NodeLocator extends GeneralizingASTVisitor<Object> {
11541 /**
11542 * The start offset of the range used to identify the node.
11543 */
11544 int _startOffset = 0;
11545 /**
11546 * The end offset of the range used to identify the node.
11547 */
11548 int _endOffset = 0;
11549 /**
11550 * The element that was found that corresponds to the given source range, or { @code null} if there
11551 * is no such element.
11552 */
11553 ASTNode _foundNode;
11554 /**
11555 * Initialize a newly created locator to locate one or more {@link ASTNode AST nodes} by locating
11556 * the node within an AST structure that corresponds to the given offset in th e source.
11557 * @param offset the offset used to identify the node
11558 */
11559 NodeLocator.con1(int offset) {
11560 _jtd_constructor_118_impl(offset);
11561 }
11562 _jtd_constructor_118_impl(int offset) {
11563 _jtd_constructor_119_impl(offset, offset);
11564 }
11565 /**
11566 * Initialize a newly created locator to locate one or more {@link ASTNode AST nodes} by locating
11567 * the node within an AST structure that corresponds to the given range of cha racters in the
11568 * source.
11569 * @param start the start offset of the range used to identify the node
11570 * @param end the end offset of the range used to identify the node
11571 */
11572 NodeLocator.con2(int start, int end) {
11573 _jtd_constructor_119_impl(start, end);
11574 }
11575 _jtd_constructor_119_impl(int start, int end) {
11576 this._startOffset = start;
11577 this._endOffset = end;
11578 }
11579 /**
11580 * Return the node that was found that corresponds to the given source range, or {@code null} if
11581 * there is no such node.
11582 * @return the node that was found
11583 */
11584 ASTNode get foundNode => _foundNode;
11585 /**
11586 * Search within the given AST node for an identifier representing a {@link Da rtElement Dart
11587 * element} in the specified source range. Return the element that was found, or {@code null} if
11588 * no element was found.
11589 * @param node the AST node within which to search
11590 * @return the element that was found
11591 */
11592 ASTNode searchWithin(ASTNode node) {
11593 try {
11594 node.accept(this);
11595 } on NodeLocator_NodeFoundException catch (exception) {
11596 } on JavaException catch (exception) {
11597 AnalysisEngine.instance.logger.logInformation2("Unable to locate element a t offset (${_startOffset} - ${_endOffset})", exception);
11598 return null;
11599 }
11600 return _foundNode;
11601 }
11602 Object visitNode(ASTNode node) {
11603 try {
11604 node.visitChildren(this);
11605 } on NodeLocator_NodeFoundException catch (exception) {
11606 throw exception;
11607 } on JavaException catch (exception) {
11608 AnalysisEngine.instance.logger.logInformation2("Exception caught while tra versing an AST structure.", exception);
11609 }
11610 int start = node.offset;
11611 int end = start + node.length;
11612 if (start <= _startOffset && _endOffset <= end) {
11613 _foundNode = node;
11614 throw new NodeLocator_NodeFoundException();
11615 }
11616 return null;
11617 }
11618 }
11619 /**
11620 * Instances of the class {@code NodeFoundException} are used to cancel visiting after a node has
11621 * been found.
11622 */
11623 class NodeLocator_NodeFoundException extends RuntimeException {
11624 static int _serialVersionUID = 1;
11625 }
11626 /**
11627 * Instances of the class {@code RecursiveASTVisitor} implement an AST visitor t hat will recursively
11628 * visit all of the nodes in an AST structure. For example, using an instance of this class to visit
11629 * a {@link Block} will also cause all of the statements in the block to be visi ted.
11630 * <p>
11631 * Subclasses that override a visit method must either invoke the overridden vis it method or must
11632 * explicitly ask the visited node to visit its children. Failure to do so will cause the children
11633 * of the visited node to not be visited.
11634 * @coverage dart.engine.ast
11635 */
11636 class RecursiveASTVisitor<R> implements ASTVisitor<R> {
11637 R visitAdjacentStrings(AdjacentStrings node) {
11638 node.visitChildren(this);
11639 return null;
11640 }
11641 R visitAnnotation(Annotation node) {
11642 node.visitChildren(this);
11643 return null;
11644 }
11645 R visitArgumentDefinitionTest(ArgumentDefinitionTest node) {
11646 node.visitChildren(this);
11647 return null;
11648 }
11649 R visitArgumentList(ArgumentList node) {
11650 node.visitChildren(this);
11651 return null;
11652 }
11653 R visitAsExpression(AsExpression node) {
11654 node.visitChildren(this);
11655 return null;
11656 }
11657 R visitAssertStatement(AssertStatement node) {
11658 node.visitChildren(this);
11659 return null;
11660 }
11661 R visitAssignmentExpression(AssignmentExpression node) {
11662 node.visitChildren(this);
11663 return null;
11664 }
11665 R visitBinaryExpression(BinaryExpression node) {
11666 node.visitChildren(this);
11667 return null;
11668 }
11669 R visitBlock(Block node) {
11670 node.visitChildren(this);
11671 return null;
11672 }
11673 R visitBlockFunctionBody(BlockFunctionBody node) {
11674 node.visitChildren(this);
11675 return null;
11676 }
11677 R visitBooleanLiteral(BooleanLiteral node) {
11678 node.visitChildren(this);
11679 return null;
11680 }
11681 R visitBreakStatement(BreakStatement node) {
11682 node.visitChildren(this);
11683 return null;
11684 }
11685 R visitCascadeExpression(CascadeExpression node) {
11686 node.visitChildren(this);
11687 return null;
11688 }
11689 R visitCatchClause(CatchClause node) {
11690 node.visitChildren(this);
11691 return null;
11692 }
11693 R visitClassDeclaration(ClassDeclaration node) {
11694 node.visitChildren(this);
11695 return null;
11696 }
11697 R visitClassTypeAlias(ClassTypeAlias node) {
11698 node.visitChildren(this);
11699 return null;
11700 }
11701 R visitComment(Comment node) {
11702 node.visitChildren(this);
11703 return null;
11704 }
11705 R visitCommentReference(CommentReference node) {
11706 node.visitChildren(this);
11707 return null;
11708 }
11709 R visitCompilationUnit(CompilationUnit node) {
11710 node.visitChildren(this);
11711 return null;
11712 }
11713 R visitConditionalExpression(ConditionalExpression node) {
11714 node.visitChildren(this);
11715 return null;
11716 }
11717 R visitConstructorDeclaration(ConstructorDeclaration node) {
11718 node.visitChildren(this);
11719 return null;
11720 }
11721 R visitConstructorFieldInitializer(ConstructorFieldInitializer node) {
11722 node.visitChildren(this);
11723 return null;
11724 }
11725 R visitConstructorName(ConstructorName node) {
11726 node.visitChildren(this);
11727 return null;
11728 }
11729 R visitContinueStatement(ContinueStatement node) {
11730 node.visitChildren(this);
11731 return null;
11732 }
11733 R visitDeclaredIdentifier(DeclaredIdentifier node) {
11734 node.visitChildren(this);
11735 return null;
11736 }
11737 R visitDefaultFormalParameter(DefaultFormalParameter node) {
11738 node.visitChildren(this);
11739 return null;
11740 }
11741 R visitDoStatement(DoStatement node) {
11742 node.visitChildren(this);
11743 return null;
11744 }
11745 R visitDoubleLiteral(DoubleLiteral node) {
11746 node.visitChildren(this);
11747 return null;
11748 }
11749 R visitEmptyFunctionBody(EmptyFunctionBody node) {
11750 node.visitChildren(this);
11751 return null;
11752 }
11753 R visitEmptyStatement(EmptyStatement node) {
11754 node.visitChildren(this);
11755 return null;
11756 }
11757 R visitExportDirective(ExportDirective node) {
11758 node.visitChildren(this);
11759 return null;
11760 }
11761 R visitExpressionFunctionBody(ExpressionFunctionBody node) {
11762 node.visitChildren(this);
11763 return null;
11764 }
11765 R visitExpressionStatement(ExpressionStatement node) {
11766 node.visitChildren(this);
11767 return null;
11768 }
11769 R visitExtendsClause(ExtendsClause node) {
11770 node.visitChildren(this);
11771 return null;
11772 }
11773 R visitFieldDeclaration(FieldDeclaration node) {
11774 node.visitChildren(this);
11775 return null;
11776 }
11777 R visitFieldFormalParameter(FieldFormalParameter node) {
11778 node.visitChildren(this);
11779 return null;
11780 }
11781 R visitForEachStatement(ForEachStatement node) {
11782 node.visitChildren(this);
11783 return null;
11784 }
11785 R visitFormalParameterList(FormalParameterList node) {
11786 node.visitChildren(this);
11787 return null;
11788 }
11789 R visitForStatement(ForStatement node) {
11790 node.visitChildren(this);
11791 return null;
11792 }
11793 R visitFunctionDeclaration(FunctionDeclaration node) {
11794 node.visitChildren(this);
11795 return null;
11796 }
11797 R visitFunctionDeclarationStatement(FunctionDeclarationStatement node) {
11798 node.visitChildren(this);
11799 return null;
11800 }
11801 R visitFunctionExpression(FunctionExpression node) {
11802 node.visitChildren(this);
11803 return null;
11804 }
11805 R visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
11806 node.visitChildren(this);
11807 return null;
11808 }
11809 R visitFunctionTypeAlias(FunctionTypeAlias node) {
11810 node.visitChildren(this);
11811 return null;
11812 }
11813 R visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) {
11814 node.visitChildren(this);
11815 return null;
11816 }
11817 R visitHideCombinator(HideCombinator node) {
11818 node.visitChildren(this);
11819 return null;
11820 }
11821 R visitIfStatement(IfStatement node) {
11822 node.visitChildren(this);
11823 return null;
11824 }
11825 R visitImplementsClause(ImplementsClause node) {
11826 node.visitChildren(this);
11827 return null;
11828 }
11829 R visitImportDirective(ImportDirective node) {
11830 node.visitChildren(this);
11831 return null;
11832 }
11833 R visitIndexExpression(IndexExpression node) {
11834 node.visitChildren(this);
11835 return null;
11836 }
11837 R visitInstanceCreationExpression(InstanceCreationExpression node) {
11838 node.visitChildren(this);
11839 return null;
11840 }
11841 R visitIntegerLiteral(IntegerLiteral node) {
11842 node.visitChildren(this);
11843 return null;
11844 }
11845 R visitInterpolationExpression(InterpolationExpression node) {
11846 node.visitChildren(this);
11847 return null;
11848 }
11849 R visitInterpolationString(InterpolationString node) {
11850 node.visitChildren(this);
11851 return null;
11852 }
11853 R visitIsExpression(IsExpression node) {
11854 node.visitChildren(this);
11855 return null;
11856 }
11857 R visitLabel(Label node) {
11858 node.visitChildren(this);
11859 return null;
11860 }
11861 R visitLabeledStatement(LabeledStatement node) {
11862 node.visitChildren(this);
11863 return null;
11864 }
11865 R visitLibraryDirective(LibraryDirective node) {
11866 node.visitChildren(this);
11867 return null;
11868 }
11869 R visitLibraryIdentifier(LibraryIdentifier node) {
11870 node.visitChildren(this);
11871 return null;
11872 }
11873 R visitListLiteral(ListLiteral node) {
11874 node.visitChildren(this);
11875 return null;
11876 }
11877 R visitMapLiteral(MapLiteral node) {
11878 node.visitChildren(this);
11879 return null;
11880 }
11881 R visitMapLiteralEntry(MapLiteralEntry node) {
11882 node.visitChildren(this);
11883 return null;
11884 }
11885 R visitMethodDeclaration(MethodDeclaration node) {
11886 node.visitChildren(this);
11887 return null;
11888 }
11889 R visitMethodInvocation(MethodInvocation node) {
11890 node.visitChildren(this);
11891 return null;
11892 }
11893 R visitNamedExpression(NamedExpression node) {
11894 node.visitChildren(this);
11895 return null;
11896 }
11897 R visitNullLiteral(NullLiteral node) {
11898 node.visitChildren(this);
11899 return null;
11900 }
11901 R visitParenthesizedExpression(ParenthesizedExpression node) {
11902 node.visitChildren(this);
11903 return null;
11904 }
11905 R visitPartDirective(PartDirective node) {
11906 node.visitChildren(this);
11907 return null;
11908 }
11909 R visitPartOfDirective(PartOfDirective node) {
11910 node.visitChildren(this);
11911 return null;
11912 }
11913 R visitPostfixExpression(PostfixExpression node) {
11914 node.visitChildren(this);
11915 return null;
11916 }
11917 R visitPrefixedIdentifier(PrefixedIdentifier node) {
11918 node.visitChildren(this);
11919 return null;
11920 }
11921 R visitPrefixExpression(PrefixExpression node) {
11922 node.visitChildren(this);
11923 return null;
11924 }
11925 R visitPropertyAccess(PropertyAccess node) {
11926 node.visitChildren(this);
11927 return null;
11928 }
11929 R visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
11930 node.visitChildren(this);
11931 return null;
11932 }
11933 R visitReturnStatement(ReturnStatement node) {
11934 node.visitChildren(this);
11935 return null;
11936 }
11937 R visitScriptTag(ScriptTag node) {
11938 node.visitChildren(this);
11939 return null;
11940 }
11941 R visitShowCombinator(ShowCombinator node) {
11942 node.visitChildren(this);
11943 return null;
11944 }
11945 R visitSimpleFormalParameter(SimpleFormalParameter node) {
11946 node.visitChildren(this);
11947 return null;
11948 }
11949 R visitSimpleIdentifier(SimpleIdentifier node) {
11950 node.visitChildren(this);
11951 return null;
11952 }
11953 R visitSimpleStringLiteral(SimpleStringLiteral node) {
11954 node.visitChildren(this);
11955 return null;
11956 }
11957 R visitStringInterpolation(StringInterpolation node) {
11958 node.visitChildren(this);
11959 return null;
11960 }
11961 R visitSuperConstructorInvocation(SuperConstructorInvocation node) {
11962 node.visitChildren(this);
11963 return null;
11964 }
11965 R visitSuperExpression(SuperExpression node) {
11966 node.visitChildren(this);
11967 return null;
11968 }
11969 R visitSwitchCase(SwitchCase node) {
11970 node.visitChildren(this);
11971 return null;
11972 }
11973 R visitSwitchDefault(SwitchDefault node) {
11974 node.visitChildren(this);
11975 return null;
11976 }
11977 R visitSwitchStatement(SwitchStatement node) {
11978 node.visitChildren(this);
11979 return null;
11980 }
11981 R visitThisExpression(ThisExpression node) {
11982 node.visitChildren(this);
11983 return null;
11984 }
11985 R visitThrowExpression(ThrowExpression node) {
11986 node.visitChildren(this);
11987 return null;
11988 }
11989 R visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) {
11990 node.visitChildren(this);
11991 return null;
11992 }
11993 R visitTryStatement(TryStatement node) {
11994 node.visitChildren(this);
11995 return null;
11996 }
11997 R visitTypeArgumentList(TypeArgumentList node) {
11998 node.visitChildren(this);
11999 return null;
12000 }
12001 R visitTypeName(TypeName node) {
12002 node.visitChildren(this);
12003 return null;
12004 }
12005 R visitTypeParameter(TypeParameter node) {
12006 node.visitChildren(this);
12007 return null;
12008 }
12009 R visitTypeParameterList(TypeParameterList node) {
12010 node.visitChildren(this);
12011 return null;
12012 }
12013 R visitVariableDeclaration(VariableDeclaration node) {
12014 node.visitChildren(this);
12015 return null;
12016 }
12017 R visitVariableDeclarationList(VariableDeclarationList node) {
12018 node.visitChildren(this);
12019 return null;
12020 }
12021 R visitVariableDeclarationStatement(VariableDeclarationStatement node) {
12022 node.visitChildren(this);
12023 return null;
12024 }
12025 R visitWhileStatement(WhileStatement node) {
12026 node.visitChildren(this);
12027 return null;
12028 }
12029 R visitWithClause(WithClause node) {
12030 node.visitChildren(this);
12031 return null;
12032 }
12033 }
12034 /**
12035 * Instances of the class {@code SimpleASTVisitor} implement an AST visitor that will do nothing
12036 * when visiting an AST node. It is intended to be a superclass for classes that use the visitor
12037 * pattern primarily as a dispatch mechanism (and hence don't need to recursivel y visit a whole
12038 * structure) and that only need to visit a small number of node types.
12039 * @coverage dart.engine.ast
12040 */
12041 class SimpleASTVisitor<R> implements ASTVisitor<R> {
12042 R visitAdjacentStrings(AdjacentStrings node) => null;
12043 R visitAnnotation(Annotation node) => null;
12044 R visitArgumentDefinitionTest(ArgumentDefinitionTest node) => null;
12045 R visitArgumentList(ArgumentList node) => null;
12046 R visitAsExpression(AsExpression node) => null;
12047 R visitAssertStatement(AssertStatement node) => null;
12048 R visitAssignmentExpression(AssignmentExpression node) => null;
12049 R visitBinaryExpression(BinaryExpression node) => null;
12050 R visitBlock(Block node) => null;
12051 R visitBlockFunctionBody(BlockFunctionBody node) => null;
12052 R visitBooleanLiteral(BooleanLiteral node) => null;
12053 R visitBreakStatement(BreakStatement node) => null;
12054 R visitCascadeExpression(CascadeExpression node) => null;
12055 R visitCatchClause(CatchClause node) => null;
12056 R visitClassDeclaration(ClassDeclaration node) => null;
12057 R visitClassTypeAlias(ClassTypeAlias node) => null;
12058 R visitComment(Comment node) => null;
12059 R visitCommentReference(CommentReference node) => null;
12060 R visitCompilationUnit(CompilationUnit node) => null;
12061 R visitConditionalExpression(ConditionalExpression node) => null;
12062 R visitConstructorDeclaration(ConstructorDeclaration node) => null;
12063 R visitConstructorFieldInitializer(ConstructorFieldInitializer node) => null;
12064 R visitConstructorName(ConstructorName node) => null;
12065 R visitContinueStatement(ContinueStatement node) => null;
12066 R visitDeclaredIdentifier(DeclaredIdentifier node) => null;
12067 R visitDefaultFormalParameter(DefaultFormalParameter node) => null;
12068 R visitDoStatement(DoStatement node) => null;
12069 R visitDoubleLiteral(DoubleLiteral node) => null;
12070 R visitEmptyFunctionBody(EmptyFunctionBody node) => null;
12071 R visitEmptyStatement(EmptyStatement node) => null;
12072 R visitExportDirective(ExportDirective node) => null;
12073 R visitExpressionFunctionBody(ExpressionFunctionBody node) => null;
12074 R visitExpressionStatement(ExpressionStatement node) => null;
12075 R visitExtendsClause(ExtendsClause node) => null;
12076 R visitFieldDeclaration(FieldDeclaration node) => null;
12077 R visitFieldFormalParameter(FieldFormalParameter node) => null;
12078 R visitForEachStatement(ForEachStatement node) => null;
12079 R visitFormalParameterList(FormalParameterList node) => null;
12080 R visitForStatement(ForStatement node) => null;
12081 R visitFunctionDeclaration(FunctionDeclaration node) => null;
12082 R visitFunctionDeclarationStatement(FunctionDeclarationStatement node) => null ;
12083 R visitFunctionExpression(FunctionExpression node) => null;
12084 R visitFunctionExpressionInvocation(FunctionExpressionInvocation node) => null ;
12085 R visitFunctionTypeAlias(FunctionTypeAlias node) => null;
12086 R visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) => null ;
12087 R visitHideCombinator(HideCombinator node) => null;
12088 R visitIfStatement(IfStatement node) => null;
12089 R visitImplementsClause(ImplementsClause node) => null;
12090 R visitImportDirective(ImportDirective node) => null;
12091 R visitIndexExpression(IndexExpression node) => null;
12092 R visitInstanceCreationExpression(InstanceCreationExpression node) => null;
12093 R visitIntegerLiteral(IntegerLiteral node) => null;
12094 R visitInterpolationExpression(InterpolationExpression node) => null;
12095 R visitInterpolationString(InterpolationString node) => null;
12096 R visitIsExpression(IsExpression node) => null;
12097 R visitLabel(Label node) => null;
12098 R visitLabeledStatement(LabeledStatement node) => null;
12099 R visitLibraryDirective(LibraryDirective node) => null;
12100 R visitLibraryIdentifier(LibraryIdentifier node) => null;
12101 R visitListLiteral(ListLiteral node) => null;
12102 R visitMapLiteral(MapLiteral node) => null;
12103 R visitMapLiteralEntry(MapLiteralEntry node) => null;
12104 R visitMethodDeclaration(MethodDeclaration node) => null;
12105 R visitMethodInvocation(MethodInvocation node) => null;
12106 R visitNamedExpression(NamedExpression node) => null;
12107 R visitNullLiteral(NullLiteral node) => null;
12108 R visitParenthesizedExpression(ParenthesizedExpression node) => null;
12109 R visitPartDirective(PartDirective node) => null;
12110 R visitPartOfDirective(PartOfDirective node) => null;
12111 R visitPostfixExpression(PostfixExpression node) => null;
12112 R visitPrefixedIdentifier(PrefixedIdentifier node) => null;
12113 R visitPrefixExpression(PrefixExpression node) => null;
12114 R visitPropertyAccess(PropertyAccess node) => null;
12115 R visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) => null;
12116 R visitReturnStatement(ReturnStatement node) => null;
12117 R visitScriptTag(ScriptTag node) => null;
12118 R visitShowCombinator(ShowCombinator node) => null;
12119 R visitSimpleFormalParameter(SimpleFormalParameter node) => null;
12120 R visitSimpleIdentifier(SimpleIdentifier node) => null;
12121 R visitSimpleStringLiteral(SimpleStringLiteral node) => null;
12122 R visitStringInterpolation(StringInterpolation node) => null;
12123 R visitSuperConstructorInvocation(SuperConstructorInvocation node) => null;
12124 R visitSuperExpression(SuperExpression node) => null;
12125 R visitSwitchCase(SwitchCase node) => null;
12126 R visitSwitchDefault(SwitchDefault node) => null;
12127 R visitSwitchStatement(SwitchStatement node) => null;
12128 R visitThisExpression(ThisExpression node) => null;
12129 R visitThrowExpression(ThrowExpression node) => null;
12130 R visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) => null;
12131 R visitTryStatement(TryStatement node) => null;
12132 R visitTypeArgumentList(TypeArgumentList node) => null;
12133 R visitTypeName(TypeName node) => null;
12134 R visitTypeParameter(TypeParameter node) => null;
12135 R visitTypeParameterList(TypeParameterList node) => null;
12136 R visitVariableDeclaration(VariableDeclaration node) => null;
12137 R visitVariableDeclarationList(VariableDeclarationList node) => null;
12138 R visitVariableDeclarationStatement(VariableDeclarationStatement node) => null ;
12139 R visitWhileStatement(WhileStatement node) => null;
12140 R visitWithClause(WithClause node) => null;
12141 }
12142 /**
12143 * Instances of the class {@code ToSourceVisitor} write a source representation of a visited AST
12144 * node (and all of it's children) to a writer.
12145 * @coverage dart.engine.ast
12146 */
12147 class ToSourceVisitor implements ASTVisitor<Object> {
12148 /**
12149 * The writer to which the source is to be written.
12150 */
12151 PrintWriter _writer;
12152 /**
12153 * Initialize a newly created visitor to write source code representing the vi sited nodes to the
12154 * given writer.
12155 * @param writer the writer to which the source is to be written
12156 */
12157 ToSourceVisitor(PrintWriter writer) {
12158 this._writer = writer;
12159 }
12160 Object visitAdjacentStrings(AdjacentStrings node) {
12161 visitList2(node.strings, " ");
12162 return null;
12163 }
12164 Object visitAnnotation(Annotation node) {
12165 _writer.print('@');
12166 visit(node.name);
12167 visit3(".", node.constructorName);
12168 visit(node.arguments);
12169 return null;
12170 }
12171 Object visitArgumentDefinitionTest(ArgumentDefinitionTest node) {
12172 _writer.print('?');
12173 visit(node.identifier);
12174 return null;
12175 }
12176 Object visitArgumentList(ArgumentList node) {
12177 _writer.print('(');
12178 visitList2(node.arguments, ", ");
12179 _writer.print(')');
12180 return null;
12181 }
12182 Object visitAsExpression(AsExpression node) {
12183 visit(node.expression);
12184 _writer.print(" as ");
12185 visit(node.type);
12186 return null;
12187 }
12188 Object visitAssertStatement(AssertStatement node) {
12189 _writer.print("assert (");
12190 visit(node.condition);
12191 _writer.print(");");
12192 return null;
12193 }
12194 Object visitAssignmentExpression(AssignmentExpression node) {
12195 visit(node.leftHandSide);
12196 _writer.print(' ');
12197 _writer.print(node.operator.lexeme);
12198 _writer.print(' ');
12199 visit(node.rightHandSide);
12200 return null;
12201 }
12202 Object visitBinaryExpression(BinaryExpression node) {
12203 visit(node.leftOperand);
12204 _writer.print(' ');
12205 _writer.print(node.operator.lexeme);
12206 _writer.print(' ');
12207 visit(node.rightOperand);
12208 return null;
12209 }
12210 Object visitBlock(Block node) {
12211 _writer.print('{');
12212 visitList2(node.statements, " ");
12213 _writer.print('}');
12214 return null;
12215 }
12216 Object visitBlockFunctionBody(BlockFunctionBody node) {
12217 visit(node.block);
12218 return null;
12219 }
12220 Object visitBooleanLiteral(BooleanLiteral node) {
12221 _writer.print(node.literal.lexeme);
12222 return null;
12223 }
12224 Object visitBreakStatement(BreakStatement node) {
12225 _writer.print("break");
12226 visit3(" ", node.label);
12227 _writer.print(";");
12228 return null;
12229 }
12230 Object visitCascadeExpression(CascadeExpression node) {
12231 visit(node.target);
12232 visitList(node.cascadeSections);
12233 return null;
12234 }
12235 Object visitCatchClause(CatchClause node) {
12236 visit3("on ", node.exceptionType);
12237 if (node.catchKeyword != null) {
12238 if (node.exceptionType != null) {
12239 _writer.print(' ');
12240 }
12241 _writer.print("catch (");
12242 visit(node.exceptionParameter);
12243 visit3(", ", node.stackTraceParameter);
12244 _writer.print(") ");
12245 } else {
12246 _writer.print(" ");
12247 }
12248 visit(node.body);
12249 return null;
12250 }
12251 Object visitClassDeclaration(ClassDeclaration node) {
12252 visit5(node.abstractKeyword, " ");
12253 _writer.print("class ");
12254 visit(node.name);
12255 visit(node.typeParameters);
12256 visit3(" ", node.extendsClause);
12257 visit3(" ", node.withClause);
12258 visit3(" ", node.implementsClause);
12259 _writer.print(" {");
12260 visitList2(node.members, " ");
12261 _writer.print("}");
12262 return null;
12263 }
12264 Object visitClassTypeAlias(ClassTypeAlias node) {
12265 _writer.print("typedef ");
12266 visit(node.name);
12267 visit(node.typeParameters);
12268 _writer.print(" = ");
12269 if (node.abstractKeyword != null) {
12270 _writer.print("abstract ");
12271 }
12272 visit(node.superclass);
12273 visit3(" ", node.withClause);
12274 visit3(" ", node.implementsClause);
12275 _writer.print(";");
12276 return null;
12277 }
12278 Object visitComment(Comment node) => null;
12279 Object visitCommentReference(CommentReference node) => null;
12280 Object visitCompilationUnit(CompilationUnit node) {
12281 ScriptTag scriptTag6 = node.scriptTag;
12282 NodeList<Directive> directives2 = node.directives;
12283 visit(scriptTag6);
12284 String prefix = scriptTag6 == null ? "" : " ";
12285 visitList4(prefix, directives2, " ");
12286 prefix = scriptTag6 == null && directives2.isEmpty ? "" : " ";
12287 visitList4(prefix, node.declarations, " ");
12288 return null;
12289 }
12290 Object visitConditionalExpression(ConditionalExpression node) {
12291 visit(node.condition);
12292 _writer.print(" ? ");
12293 visit(node.thenExpression);
12294 _writer.print(" : ");
12295 visit(node.elseExpression);
12296 return null;
12297 }
12298 Object visitConstructorDeclaration(ConstructorDeclaration node) {
12299 visit5(node.externalKeyword, " ");
12300 visit5(node.constKeyword, " ");
12301 visit5(node.factoryKeyword, " ");
12302 visit(node.returnType);
12303 visit3(".", node.name);
12304 visit(node.parameters);
12305 visitList4(" : ", node.initializers, ", ");
12306 visit3(" = ", node.redirectedConstructor);
12307 visit4(" ", node.body);
12308 return null;
12309 }
12310 Object visitConstructorFieldInitializer(ConstructorFieldInitializer node) {
12311 visit5(node.keyword, ".");
12312 visit(node.fieldName);
12313 _writer.print(" = ");
12314 visit(node.expression);
12315 return null;
12316 }
12317 Object visitConstructorName(ConstructorName node) {
12318 visit(node.type);
12319 visit3(".", node.name);
12320 return null;
12321 }
12322 Object visitContinueStatement(ContinueStatement node) {
12323 _writer.print("continue");
12324 visit3(" ", node.label);
12325 _writer.print(";");
12326 return null;
12327 }
12328 Object visitDeclaredIdentifier(DeclaredIdentifier node) {
12329 visit5(node.keyword, " ");
12330 visit2(node.type, " ");
12331 visit(node.identifier);
12332 return null;
12333 }
12334 Object visitDefaultFormalParameter(DefaultFormalParameter node) {
12335 visit(node.parameter);
12336 if (node.separator != null) {
12337 _writer.print(" ");
12338 _writer.print(node.separator.lexeme);
12339 visit3(" ", node.defaultValue);
12340 }
12341 return null;
12342 }
12343 Object visitDoStatement(DoStatement node) {
12344 _writer.print("do ");
12345 visit(node.body);
12346 _writer.print(" while (");
12347 visit(node.condition);
12348 _writer.print(");");
12349 return null;
12350 }
12351 Object visitDoubleLiteral(DoubleLiteral node) {
12352 _writer.print(node.literal.lexeme);
12353 return null;
12354 }
12355 Object visitEmptyFunctionBody(EmptyFunctionBody node) {
12356 _writer.print(';');
12357 return null;
12358 }
12359 Object visitEmptyStatement(EmptyStatement node) {
12360 _writer.print(';');
12361 return null;
12362 }
12363 Object visitExportDirective(ExportDirective node) {
12364 _writer.print("export ");
12365 visit(node.uri);
12366 visitList4(" ", node.combinators, " ");
12367 _writer.print(';');
12368 return null;
12369 }
12370 Object visitExpressionFunctionBody(ExpressionFunctionBody node) {
12371 _writer.print("=> ");
12372 visit(node.expression);
12373 if (node.semicolon != null) {
12374 _writer.print(';');
12375 }
12376 return null;
12377 }
12378 Object visitExpressionStatement(ExpressionStatement node) {
12379 visit(node.expression);
12380 _writer.print(';');
12381 return null;
12382 }
12383 Object visitExtendsClause(ExtendsClause node) {
12384 _writer.print("extends ");
12385 visit(node.superclass);
12386 return null;
12387 }
12388 Object visitFieldDeclaration(FieldDeclaration node) {
12389 visit5(node.keyword, " ");
12390 visit(node.fields);
12391 _writer.print(";");
12392 return null;
12393 }
12394 Object visitFieldFormalParameter(FieldFormalParameter node) {
12395 visit5(node.keyword, " ");
12396 visit2(node.type, " ");
12397 _writer.print("this.");
12398 visit(node.identifier);
12399 return null;
12400 }
12401 Object visitForEachStatement(ForEachStatement node) {
12402 _writer.print("for (");
12403 visit(node.loopVariable);
12404 _writer.print(" in ");
12405 visit(node.iterator);
12406 _writer.print(") ");
12407 visit(node.body);
12408 return null;
12409 }
12410 Object visitFormalParameterList(FormalParameterList node) {
12411 String groupEnd = null;
12412 _writer.print('(');
12413 NodeList<FormalParameter> parameters9 = node.parameters;
12414 int size2 = parameters9.length;
12415 for (int i = 0; i < size2; i++) {
12416 FormalParameter parameter = parameters9[i];
12417 if (i > 0) {
12418 _writer.print(", ");
12419 }
12420 if (groupEnd == null && parameter is DefaultFormalParameter) {
12421 if (identical(parameter.kind, ParameterKind.NAMED)) {
12422 groupEnd = "}";
12423 _writer.print('{');
12424 } else {
12425 groupEnd = "]";
12426 _writer.print('[');
12427 }
12428 }
12429 parameter.accept(this);
12430 }
12431 if (groupEnd != null) {
12432 _writer.print(groupEnd);
12433 }
12434 _writer.print(')');
12435 return null;
12436 }
12437 Object visitForStatement(ForStatement node) {
12438 Expression initialization3 = node.initialization;
12439 _writer.print("for (");
12440 if (initialization3 != null) {
12441 visit(initialization3);
12442 } else {
12443 visit(node.variables);
12444 }
12445 _writer.print(";");
12446 visit3(" ", node.condition);
12447 _writer.print(";");
12448 visitList4(" ", node.updaters, ", ");
12449 _writer.print(") ");
12450 visit(node.body);
12451 return null;
12452 }
12453 Object visitFunctionDeclaration(FunctionDeclaration node) {
12454 visit2(node.returnType, " ");
12455 visit5(node.propertyKeyword, " ");
12456 visit(node.name);
12457 visit(node.functionExpression);
12458 return null;
12459 }
12460 Object visitFunctionDeclarationStatement(FunctionDeclarationStatement node) {
12461 visit(node.functionDeclaration);
12462 _writer.print(';');
12463 return null;
12464 }
12465 Object visitFunctionExpression(FunctionExpression node) {
12466 visit(node.parameters);
12467 _writer.print(' ');
12468 visit(node.body);
12469 return null;
12470 }
12471 Object visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
12472 visit(node.function);
12473 visit(node.argumentList);
12474 return null;
12475 }
12476 Object visitFunctionTypeAlias(FunctionTypeAlias node) {
12477 _writer.print("typedef ");
12478 visit2(node.returnType, " ");
12479 visit(node.name);
12480 visit(node.typeParameters);
12481 visit(node.parameters);
12482 _writer.print(";");
12483 return null;
12484 }
12485 Object visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) {
12486 visit2(node.returnType, " ");
12487 visit(node.identifier);
12488 visit(node.parameters);
12489 return null;
12490 }
12491 Object visitHideCombinator(HideCombinator node) {
12492 _writer.print("hide ");
12493 visitList2(node.hiddenNames, ", ");
12494 return null;
12495 }
12496 Object visitIfStatement(IfStatement node) {
12497 _writer.print("if (");
12498 visit(node.condition);
12499 _writer.print(") ");
12500 visit(node.thenStatement);
12501 visit3(" else ", node.elseStatement);
12502 return null;
12503 }
12504 Object visitImplementsClause(ImplementsClause node) {
12505 _writer.print("implements ");
12506 visitList2(node.interfaces, ", ");
12507 return null;
12508 }
12509 Object visitImportDirective(ImportDirective node) {
12510 _writer.print("import ");
12511 visit(node.uri);
12512 visit3(" as ", node.prefix);
12513 visitList4(" ", node.combinators, " ");
12514 _writer.print(';');
12515 return null;
12516 }
12517 Object visitIndexExpression(IndexExpression node) {
12518 if (node.isCascaded()) {
12519 _writer.print("..");
12520 } else {
12521 visit(node.array);
12522 }
12523 _writer.print('[');
12524 visit(node.index);
12525 _writer.print(']');
12526 return null;
12527 }
12528 Object visitInstanceCreationExpression(InstanceCreationExpression node) {
12529 visit5(node.keyword, " ");
12530 visit(node.constructorName);
12531 visit(node.argumentList);
12532 return null;
12533 }
12534 Object visitIntegerLiteral(IntegerLiteral node) {
12535 _writer.print(node.literal.lexeme);
12536 return null;
12537 }
12538 Object visitInterpolationExpression(InterpolationExpression node) {
12539 if (node.rightBracket != null) {
12540 _writer.print("\${");
12541 visit(node.expression);
12542 _writer.print("}");
12543 } else {
12544 _writer.print("\$");
12545 visit(node.expression);
12546 }
12547 return null;
12548 }
12549 Object visitInterpolationString(InterpolationString node) {
12550 _writer.print(node.contents.lexeme);
12551 return null;
12552 }
12553 Object visitIsExpression(IsExpression node) {
12554 visit(node.expression);
12555 if (node.notOperator == null) {
12556 _writer.print(" is ");
12557 } else {
12558 _writer.print(" is! ");
12559 }
12560 visit(node.type);
12561 return null;
12562 }
12563 Object visitLabel(Label node) {
12564 visit(node.label);
12565 _writer.print(":");
12566 return null;
12567 }
12568 Object visitLabeledStatement(LabeledStatement node) {
12569 visitList3(node.labels, " ", " ");
12570 visit(node.statement);
12571 return null;
12572 }
12573 Object visitLibraryDirective(LibraryDirective node) {
12574 _writer.print("library ");
12575 visit(node.name);
12576 _writer.print(';');
12577 return null;
12578 }
12579 Object visitLibraryIdentifier(LibraryIdentifier node) {
12580 _writer.print(node.name);
12581 return null;
12582 }
12583 Object visitListLiteral(ListLiteral node) {
12584 if (node.modifier != null) {
12585 _writer.print(node.modifier.lexeme);
12586 _writer.print(' ');
12587 }
12588 visit2(node.typeArguments, " ");
12589 _writer.print("[");
12590 visitList2(node.elements, ", ");
12591 _writer.print("]");
12592 return null;
12593 }
12594 Object visitMapLiteral(MapLiteral node) {
12595 if (node.modifier != null) {
12596 _writer.print(node.modifier.lexeme);
12597 _writer.print(' ');
12598 }
12599 visit2(node.typeArguments, " ");
12600 _writer.print("{");
12601 visitList2(node.entries, ", ");
12602 _writer.print("}");
12603 return null;
12604 }
12605 Object visitMapLiteralEntry(MapLiteralEntry node) {
12606 visit(node.key);
12607 _writer.print(" : ");
12608 visit(node.value);
12609 return null;
12610 }
12611 Object visitMethodDeclaration(MethodDeclaration node) {
12612 visit5(node.externalKeyword, " ");
12613 visit5(node.modifierKeyword, " ");
12614 visit2(node.returnType, " ");
12615 visit5(node.propertyKeyword, " ");
12616 visit5(node.operatorKeyword, " ");
12617 visit(node.name);
12618 if (!node.isGetter()) {
12619 visit(node.parameters);
12620 }
12621 visit4(" ", node.body);
12622 return null;
12623 }
12624 Object visitMethodInvocation(MethodInvocation node) {
12625 if (node.isCascaded()) {
12626 _writer.print("..");
12627 } else {
12628 visit2(node.target, ".");
12629 }
12630 visit(node.methodName);
12631 visit(node.argumentList);
12632 return null;
12633 }
12634 Object visitNamedExpression(NamedExpression node) {
12635 visit(node.name);
12636 visit3(" ", node.expression);
12637 return null;
12638 }
12639 Object visitNullLiteral(NullLiteral node) {
12640 _writer.print("null");
12641 return null;
12642 }
12643 Object visitParenthesizedExpression(ParenthesizedExpression node) {
12644 _writer.print('(');
12645 visit(node.expression);
12646 _writer.print(')');
12647 return null;
12648 }
12649 Object visitPartDirective(PartDirective node) {
12650 _writer.print("part ");
12651 visit(node.uri);
12652 _writer.print(';');
12653 return null;
12654 }
12655 Object visitPartOfDirective(PartOfDirective node) {
12656 _writer.print("part of ");
12657 visit(node.libraryName);
12658 _writer.print(';');
12659 return null;
12660 }
12661 Object visitPostfixExpression(PostfixExpression node) {
12662 visit(node.operand);
12663 _writer.print(node.operator.lexeme);
12664 return null;
12665 }
12666 Object visitPrefixedIdentifier(PrefixedIdentifier node) {
12667 visit(node.prefix);
12668 _writer.print('.');
12669 visit(node.identifier);
12670 return null;
12671 }
12672 Object visitPrefixExpression(PrefixExpression node) {
12673 _writer.print(node.operator.lexeme);
12674 visit(node.operand);
12675 return null;
12676 }
12677 Object visitPropertyAccess(PropertyAccess node) {
12678 if (node.isCascaded()) {
12679 _writer.print("..");
12680 } else {
12681 visit(node.target);
12682 _writer.print('.');
12683 }
12684 visit(node.propertyName);
12685 return null;
12686 }
12687 Object visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
12688 _writer.print("this");
12689 visit3(".", node.constructorName);
12690 visit(node.argumentList);
12691 return null;
12692 }
12693 Object visitReturnStatement(ReturnStatement node) {
12694 Expression expression14 = node.expression;
12695 if (expression14 == null) {
12696 _writer.print("return;");
12697 } else {
12698 _writer.print("return ");
12699 expression14.accept(this);
12700 _writer.print(";");
12701 }
12702 return null;
12703 }
12704 Object visitScriptTag(ScriptTag node) {
12705 _writer.print(node.scriptTag.lexeme);
12706 return null;
12707 }
12708 Object visitShowCombinator(ShowCombinator node) {
12709 _writer.print("show ");
12710 visitList2(node.shownNames, ", ");
12711 return null;
12712 }
12713 Object visitSimpleFormalParameter(SimpleFormalParameter node) {
12714 visit5(node.keyword, " ");
12715 visit2(node.type, " ");
12716 visit(node.identifier);
12717 return null;
12718 }
12719 Object visitSimpleIdentifier(SimpleIdentifier node) {
12720 _writer.print(node.token.lexeme);
12721 return null;
12722 }
12723 Object visitSimpleStringLiteral(SimpleStringLiteral node) {
12724 _writer.print(node.literal.lexeme);
12725 return null;
12726 }
12727 Object visitStringInterpolation(StringInterpolation node) {
12728 visitList(node.elements);
12729 return null;
12730 }
12731 Object visitSuperConstructorInvocation(SuperConstructorInvocation node) {
12732 _writer.print("super");
12733 visit3(".", node.constructorName);
12734 visit(node.argumentList);
12735 return null;
12736 }
12737 Object visitSuperExpression(SuperExpression node) {
12738 _writer.print("super");
12739 return null;
12740 }
12741 Object visitSwitchCase(SwitchCase node) {
12742 visitList3(node.labels, " ", " ");
12743 _writer.print("case ");
12744 visit(node.expression);
12745 _writer.print(": ");
12746 visitList2(node.statements, " ");
12747 return null;
12748 }
12749 Object visitSwitchDefault(SwitchDefault node) {
12750 visitList3(node.labels, " ", " ");
12751 _writer.print("default: ");
12752 visitList2(node.statements, " ");
12753 return null;
12754 }
12755 Object visitSwitchStatement(SwitchStatement node) {
12756 _writer.print("switch (");
12757 visit(node.expression);
12758 _writer.print(") {");
12759 visitList2(node.members, " ");
12760 _writer.print("}");
12761 return null;
12762 }
12763 Object visitThisExpression(ThisExpression node) {
12764 _writer.print("this");
12765 return null;
12766 }
12767 Object visitThrowExpression(ThrowExpression node) {
12768 _writer.print("throw ");
12769 visit(node.expression);
12770 return null;
12771 }
12772 Object visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) {
12773 visit2(node.variables, ";");
12774 return null;
12775 }
12776 Object visitTryStatement(TryStatement node) {
12777 _writer.print("try ");
12778 visit(node.body);
12779 visitList4(" ", node.catchClauses, " ");
12780 visit3(" finally ", node.finallyClause);
12781 return null;
12782 }
12783 Object visitTypeArgumentList(TypeArgumentList node) {
12784 _writer.print('<');
12785 visitList2(node.arguments, ", ");
12786 _writer.print('>');
12787 return null;
12788 }
12789 Object visitTypeName(TypeName node) {
12790 visit(node.name);
12791 visit(node.typeArguments);
12792 return null;
12793 }
12794 Object visitTypeParameter(TypeParameter node) {
12795 visit(node.name);
12796 visit3(" extends ", node.bound);
12797 return null;
12798 }
12799 Object visitTypeParameterList(TypeParameterList node) {
12800 _writer.print('<');
12801 visitList2(node.typeParameters, ", ");
12802 _writer.print('>');
12803 return null;
12804 }
12805 Object visitVariableDeclaration(VariableDeclaration node) {
12806 visit(node.name);
12807 visit3(" = ", node.initializer);
12808 return null;
12809 }
12810 Object visitVariableDeclarationList(VariableDeclarationList node) {
12811 visit5(node.keyword, " ");
12812 visit2(node.type, " ");
12813 visitList2(node.variables, ", ");
12814 return null;
12815 }
12816 Object visitVariableDeclarationStatement(VariableDeclarationStatement node) {
12817 visit(node.variables);
12818 _writer.print(";");
12819 return null;
12820 }
12821 Object visitWhileStatement(WhileStatement node) {
12822 _writer.print("while (");
12823 visit(node.condition);
12824 _writer.print(") ");
12825 visit(node.body);
12826 return null;
12827 }
12828 Object visitWithClause(WithClause node) {
12829 _writer.print("with ");
12830 visitList2(node.mixinTypes, ", ");
12831 return null;
12832 }
12833 /**
12834 * Safely visit the given node.
12835 * @param node the node to be visited
12836 */
12837 void visit(ASTNode node) {
12838 if (node != null) {
12839 node.accept(this);
12840 }
12841 }
12842 /**
12843 * Safely visit the given node, printing the suffix after the node if it is no n-{@code null}.
12844 * @param suffix the suffix to be printed if there is a node to visit
12845 * @param node the node to be visited
12846 */
12847 void visit2(ASTNode node, String suffix) {
12848 if (node != null) {
12849 node.accept(this);
12850 _writer.print(suffix);
12851 }
12852 }
12853 /**
12854 * Safely visit the given node, printing the prefix before the node if it is n on-{@code null}.
12855 * @param prefix the prefix to be printed if there is a node to visit
12856 * @param node the node to be visited
12857 */
12858 void visit3(String prefix, ASTNode node) {
12859 if (node != null) {
12860 _writer.print(prefix);
12861 node.accept(this);
12862 }
12863 }
12864 /**
12865 * Visit the given function body, printing the prefix before if given body is not empty.
12866 * @param prefix the prefix to be printed if there is a node to visit
12867 * @param body the function body to be visited
12868 */
12869 void visit4(String prefix, FunctionBody body) {
12870 if (body is! EmptyFunctionBody) {
12871 _writer.print(prefix);
12872 }
12873 visit(body);
12874 }
12875 /**
12876 * Safely visit the given node, printing the suffix after the node if it is no n-{@code null}.
12877 * @param suffix the suffix to be printed if there is a node to visit
12878 * @param node the node to be visited
12879 */
12880 void visit5(Token token, String suffix) {
12881 if (token != null) {
12882 _writer.print(token.lexeme);
12883 _writer.print(suffix);
12884 }
12885 }
12886 /**
12887 * Print a list of nodes without any separation.
12888 * @param nodes the nodes to be printed
12889 * @param separator the separator to be printed between adjacent nodes
12890 */
12891 void visitList(NodeList<ASTNode> nodes) {
12892 visitList2(nodes, "");
12893 }
12894 /**
12895 * Print a list of nodes, separated by the given separator.
12896 * @param nodes the nodes to be printed
12897 * @param separator the separator to be printed between adjacent nodes
12898 */
12899 void visitList2(NodeList<ASTNode> nodes, String separator) {
12900 if (nodes != null) {
12901 int size3 = nodes.length;
12902 for (int i = 0; i < size3; i++) {
12903 if (i > 0) {
12904 _writer.print(separator);
12905 }
12906 nodes[i].accept(this);
12907 }
12908 }
12909 }
12910 /**
12911 * Print a list of nodes, separated by the given separator.
12912 * @param nodes the nodes to be printed
12913 * @param separator the separator to be printed between adjacent nodes
12914 * @param suffix the suffix to be printed if the list is not empty
12915 */
12916 void visitList3(NodeList<ASTNode> nodes, String separator, String suffix) {
12917 if (nodes != null) {
12918 int size4 = nodes.length;
12919 if (size4 > 0) {
12920 for (int i = 0; i < size4; i++) {
12921 if (i > 0) {
12922 _writer.print(separator);
12923 }
12924 nodes[i].accept(this);
12925 }
12926 _writer.print(suffix);
12927 }
12928 }
12929 }
12930 /**
12931 * Print a list of nodes, separated by the given separator.
12932 * @param prefix the prefix to be printed if the list is not empty
12933 * @param nodes the nodes to be printed
12934 * @param separator the separator to be printed between adjacent nodes
12935 */
12936 void visitList4(String prefix, NodeList<ASTNode> nodes, String separator) {
12937 if (nodes != null) {
12938 int size5 = nodes.length;
12939 if (size5 > 0) {
12940 _writer.print(prefix);
12941 for (int i = 0; i < size5; i++) {
12942 if (i > 0) {
12943 _writer.print(separator);
12944 }
12945 nodes[i].accept(this);
12946 }
12947 }
12948 }
12949 }
12950 }
12951 /**
12952 * Instances of the class {@code NodeList} represent a list of AST nodes that ha ve a common parent.
12953 */
12954 class NodeList<E extends ASTNode> extends ListWrapper<E> {
12955 /**
12956 * The node that is the parent of each of the elements in the list.
12957 */
12958 ASTNode owner;
12959 /**
12960 * The elements of the list.
12961 */
12962 List<E> elements = new List<E>();
12963 /**
12964 * Initialize a newly created list of nodes to be empty.
12965 * @param owner the node that is the parent of each of the elements in the lis t
12966 */
12967 NodeList(ASTNode this.owner);
12968 /**
12969 * Use the given visitor to visit each of the nodes in this list.
12970 * @param visitor the visitor to be used to visit the elements of this list
12971 */
12972 accept(ASTVisitor visitor) {
12973 for (E element in elements) {
12974 element.accept(visitor);
12975 }
12976 }
12977 void add(E node) {
12978 owner.becomeParentOf(node);
12979 elements.add(node);
12980 }
12981 bool addAll(Collection<E> nodes) {
12982 if (nodes != null) {
12983 for (E node in nodes) {
12984 add(node);
12985 }
12986 return true;
12987 }
12988 return false;
12989 }
12990 /**
12991 * Return the first token included in this node's source range.
12992 * @return the first token included in this node's source range
12993 */
12994 Token get beginToken {
12995 if (elements.isEmpty) {
12996 return null;
12997 }
12998 return elements[0].beginToken;
12999 }
13000 /**
13001 * Return the last token included in this node list's source range.
13002 * @return the last token included in this node list's source range
13003 */
13004 Token get endToken {
13005 if (elements.isEmpty) {
13006 return null;
13007 }
13008 return elements[elements.length - 1].endToken;
13009 }
13010 /**
13011 * Return the node that is the parent of each of the elements in the list.
13012 * @return the node that is the parent of each of the elements in the list
13013 */
13014 ASTNode getOwner() {
13015 return owner;
13016 }
13017 }
OLDNEW
« no previous file with comments | « pkg/analyzer-experimental/lib/options.dart ('k') | pkg/analyzer-experimental/lib/src/generated/element.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698